構成
物体を回転させたい
ぶっちゃけ説明すべきことが特に思いつかないのでもうコード載せる。
void Move(float& t_x, float& t_y, float& t_moveX, float& t_moveY, float& t_rotaX, float& t_rotaY, const float t_areaX, const float t_areaY, const float t_turnFrameTime)
{
t_rotaX += t_moveX;
t_rotaY += t_moveY;
t_moveX += -(2.0f * M_PI / t_turnFrameTime) * (2.0f * M_PI / t_turnFrameTime) * t_rotaX;
t_moveY += -(2.0f * M_PI / t_turnFrameTime) * (2.0f * M_PI / t_turnFrameTime) * t_rotaY;
t_x = t_rotaX + t_areaX;
t_y = t_rotaY + t_areaY;
}
テスト用のために使ったDxLibの一部
const float size = 64;
const float radius = 45.0f;
const float areaX = (640 - size) / 2.0f;
const float areaY = (480 - size) / 2.0f;
const float frameTurn = 60.0f;
float vx = 0.0f;
float vy = radius * (2.0f * M_PI / frameTurn);
float rx = radius;
float ry = 0.0f;
float x = rx + areaX;
float y = ry + areaY;
// メインループ
while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE))
{
Move(x, y, vx, vy, rx, ry, areaX, areaY, frameTurn);
DrawCircle(x, y, size / 2, GetColor(255, 0, 0));
ある程度自由度を高めるために引数が多くなっています。簡単に言えば(0,0)のところを半径1で回転しているものに調整して動かしている感じです。