Vectorを原点中心に回す!

"vectorを回す"
# include <Siv3D.hpp> // OpenSiv3D v0.6.10
# include <cmath>
 
 
Vec2 sVec = { 0.0, -1.0 };
const double vLength = 100;
const double PI = 3.14159265359;
/// @brief 角度とラジアンを変換して返します
/// @param _angle 角度を入力
/// @return  ラジアンに変換された値
double Degree2Radians(double _angle)
{
	return(_angle * (PI / 180.0));
}
 
/// @brief _angle度だけ_vecを原点中心に回転して返す
/// @param _vec 回転されるベクトル
/// @param _angle  回転角度(度)
/// @return  回転後のベクトル
Vec2 RotateVec(Vec2 _vec, double _angle)
{
	double theta = Degree2Radians(_angle); //ラジアン
	Vec2 res;
	res.x = _vec.x * cos(theta) - _vec.y * sin(theta);
	res.y = _vec.x * sin(theta) + _vec.y * cos(theta);
 
	return(res);
}
 
void Main()
{
	// 背景の色を設定する | Set the background color
	Scene::SetBackground(ColorF{ 0.6, 0.8, 0.7 });
 
	const Vec2 ORIGIN = { Scene::Width() / 2, Scene::Height() / 2 };
	double rotAngle = 0;
	while (System::Update())
	{
		if (MouseL.pressed())
		{
			rotAngle += Scene::DeltaTime()* (20*(360/60));
		}
		if (MouseR.pressed())
		{
			rotAngle -= Scene::DeltaTime() * (20 * (360 / 60));
		}
		Print << rotAngle;
		Vec2 rVec = RotateVec(sVec, rotAngle);
		//rVec.normalize();
		Line{ ORIGIN, ORIGIN + vLength * rVec }.drawArrow(5, { 20,20 }, Palette::Black);
	}
}
# include <Siv3D.hpp> // OpenSiv3D v0.6.10
# include <cmath>
 
 
Vec2 sVec = { 0.0, -1.0 };
const double vLength = 100;
const double DIST_FROM_STR = 100;
const double PI = 3.14159265359;
double sRot, mRot, hRot;
 
/// @brief 角度とラジアンを変換して返します
/// @param _angle 角度を入力
/// @return  ラジアンに変換された値
double Degree2Radians(double _angle)
{
	return(_angle * (PI / 180.0));
}
 
/// @brief _angle度だけ_vecを原点中心に回転して返す
/// @param _vec 回転されるベクトル
/// @param _angle  回転角度(度)
/// @return  回転後のベクトル
Vec2 RotateVec(Vec2 _vec, double _angle)
{
	double theta = Degree2Radians(_angle); //ラジアン
	Vec2 res;
	res.x = _vec.x * cos(theta) - _vec.y * sin(theta);
	res.y = _vec.x * sin(theta) + _vec.y * cos(theta);
 
	return(res);
}
 
void DrawClockFace(Vec2 _center)
{
	Vec2 fVec;
	String faceNo[12] = { U"12",U"1", U"2", U"3", U"4", U"5", U"6", U"7", U"8", U"9", U"10", U"11" };
	for (int i = 0; i < 12; i++)
	{
		fVec = RotateVec(sVec, (double)i * (360 / 12));
		Circle{ _center + DIST_FROM_STR * fVec,30 }.draw(Palette::Sandybrown);
		FontAsset(U"FFONT")(faceNo[i]).drawAt(_center + DIST_FROM_STR * fVec, Palette::Black);
 
	}
}
void Update()
{
	sRot = sRot + Scene::DeltaTime() * (360.0 / 60.0);
 	mRot = mRot + Scene::DeltaTime() * (360.0 / (60.0*60.0));
	hRot = hRot + Scene::DeltaTime() * (360.0 / (60.0*60.0*60.0));
}
 
void Main()
{
	FontAsset::Register(U"FFONT", 30, U"example/font/RocknRoll/RocknRollOne-Regular.ttf");
	// 背景の色を設定する | Set the background color
	Scene::SetBackground(ColorF{ 0.6, 0.8, 0.7 });
 
	const Vec2 ORIGIN = { Scene::Width() / 2, Scene::Height() / 2 };
	double rotAngle = 0;
	while (System::Update())
	{
		//if (MouseL.pressed())
		//{
		//	rotAngle += Scene::DeltaTime() * (20 * (360 / 60));
		//}
		//if (MouseR.pressed())
		//{
		//	rotAngle -= Scene::DeltaTime() * (20 * (360 / 60));
		//}
		//Print << rotAngle;
		Update();
		Vec2 secVec = RotateVec(sVec, sRot);
		Vec2 minVec = RotateVec(sVec, mRot);
		Vec2 hourVec = RotateVec(sVec, hRot);
		//rVec.normalize();
		DrawClockFace(ORIGIN);
		Line{ ORIGIN, ORIGIN + vLength * secVec }.drawArrow(5, { 5,10 }, Palette::Red);
		Line{ ORIGIN, ORIGIN + vLength * minVec }.drawArrow(5, { 5,10 }, Palette::Black);
		Line{ ORIGIN, ORIGIN + vLength * hourVec }.drawArrow(5, { 5,10 }, Palette::Black);
 
	}
}