2017-04-13 21 views
0

私は与えられた角度をとり、その角度で三角形の座標を回転させる機能を持っています。しかし、それはわずかに一時停止し、円滑に動くのではなく新しい位置にジャンプする。回転が滑らかに実行されていません

この機能は、元の座標を原点に移動し、すでに移動した角度と指定した角度を回転させることによって機能します。次に、画像を現在の位置に変換する前に、座標を未変更の位置に変換し直します。

void rotateTriangle(double angle_){ 
int ang = angle_ + angle; 
triCoords[0]=((triCoords_[0] - triPos_[0])*cos(ang) - (triCoords_[1] - triPos_[1])*sin(ang)) + triPos_[0] + triPos[0]; 
triCoords[1]=((triCoords_[1] - triPos_[1])*cos(ang) + (triCoords_[0] - triPos_[0])*sin(ang)) + triPos_[1] + triPos[1]; 
triCoords[2]=((triCoords_[2] - triPos_[0])*cos(ang) - (triCoords_[3] - triPos_[1])*sin(ang)) + triPos_[0] + triPos[0]; 
triCoords[3]=((triCoords_[3] - triPos_[1])*cos(ang) + (triCoords_[2] - triPos_[0])*sin(ang)) + triPos_[1] + triPos[1]; 
triCoords[4]=((triCoords_[4] - triPos_[0])*cos(ang) - (triCoords_[5] - triPos_[1])*sin(ang)) + triPos_[0] + triPos[0]; 
triCoords[5]=((triCoords_[5] - triPos_[1])*cos(ang) + (triCoords_[4] - triPos_[0])*sin(ang)) + triPos_[1] + triPos[1]; 

}

答えて

1

さて、この:コースの

int ang = angle_ + angle; 

意志が整数に浮動小数点角度を切り捨てます。 sin()cos()はラジアンで動作するので、それほどうまくいきません。

あなたが持っている必要があります。

const double ang = angle_ + angle; 

それは(angle_は、関数の引数ですが、二つの名前が紛らわしい似ている)、ここで何angle明確ではありませんが、私はそれがグローバル変数だと思います。

これは画面上のレンダリング用の場合は、floatの精度に限定し、代わりにsinf()cosf()を使用すると考えられます。

+0

問題を解決していただきありがとうございます –

関連する問題