2017-04-13 9 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

문제를 해결해 주셔서 감사합니다. –