2017-04-13 2 views
0

J'ai une fonction qui consiste à prendre un angle donné et à faire pivoter les coordonnées d'un triangle de cet angle. Cependant, il fait une pause légèrement puis saute à une nouvelle position plutôt que de courir doucement.La rotation ne fonctionne pas correctement

La fonction fonctionne en traduisant les coordonnées d'origine à l'origine, en les faisant pivoter de l'angle déjà déplacé plus l'angle spécifié. Ensuite, il traduit les coordonnées vers les positions non modifiées avant de les traduire à l'endroit où se trouve l'image.

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]; 

}

Répondre

1

Eh bien, ceci:

int ang = angle_ + angle; 

sera bien sûr tronquer l'angle à virgule flottante à un nombre entier. Depuis sin() et cos() fonctionnent avec des radians, cela ne fonctionne pas trop bien.

Vous devriez avoir:

const double ang = angle_ + angle; 

On ne sait pas ce que angle est ici (angle_ est l'argument de la fonction, mais les deux noms sont confusément similaire), je suppose que c'est une variable globale.

S'il s'agit d'un rendu à l'écran, vous pouvez vous limiter à la précision float et utiliser sinf() et cosf() à la place.

+0

Merci qui a résolu le problème –