0

これが私が使用しているコードです。

#define ANGLETORADIANS 0.017453292519943295769236907684886f // PI / 180
#define RADIANSTOANGLE 57.295779513082320876798154814105f   // 180 / PI

rotation = rotation *ANGLETORADIANS;

cosRotation = cos(rotation);
sinRotation = sin(rotation);

for(int i = 0; i < 3; i++)
{
    px[i] = (vec[i].x + centerX) * (cosRotation - (vec[i].y + centerY)) * sinRotation;
    py[i] = (vec[i].x + centerX) * (sinRotation + (vec[i].y + centerY)) * cosRotation;
    printf("num: %i, px: %f, py: %f\n", i, px[i], py[i]);
}

これまでのところ、Y値が反転していることを示しています。たとえば、X=1とY=1の値を45回転で入力すると、x=0とy=1.25 ishが表示されますが、x = 0 y=- 1.25。

また、私の90度の回転は、常にx=0とy=0を返します。

ps私は自分の価値観を中心に置いているだけで、元の場所に戻していないことを知っています。私が知る必要があるのは私が今得ている価値だけなので、それらを元に戻す必要はありません。

4

2 に答える 2

2

あなたのブラケットの配置は私には正しく見えません。私は期待します:

px[i] = (vec[i].x + centerX) * cosRotation - (vec[i].y + centerY) * sinRotation;
py[i] = (vec[i].x + centerX) * sinRotation + (vec[i].y + centerY) * cosRotation;
于 2012-10-03T11:28:54.167 に答える
1

角かっこが間違っています。そのはず

px[i] = ((vec[i].x + centerX) * cosRotation) - ((vec[i].y + centerY) * sinRotation);
py[i] = ((vec[i].x + centerX) * sinRotation) + ((vec[i].y + centerY) * cosRotation);

代わりは

于 2012-10-03T11:29:12.870 に答える