# include <Siv3D.hpp> void Main() { Window::Resize({ 300, 300 }); const Vec2 center = Scene::CenterF(); while (System::Update()) { constexpr Duration periodSec = 2s; const double rotateRate = s3d::Periodic::Sawtooth0_1(periodSec * 0.75); const double offsetAngle = rotateRate * Math::TwoPi; const double rate = s3d::Periodic::Sawtooth0_1(periodSec); double startAngle = offsetAngle; if (rate <= 0.5) { startAngle += Math::Lerp(0, Math::TwoPi, rate * 2); } else { startAngle += Math::TwoPi; } double endAngle = offsetAngle; if (rate <= 0.5) { endAngle += Math::Lerp(0, Math::HalfPi, rate * 2); } else { endAngle += Math::Lerp(Math::HalfPi, Math::TwoPi, (rate - 0.5) * 2); } const double angle = -(startAngle - endAngle); Circle(center, 100).drawArc(startAngle, angle, 0, 30); } }