2017-04-13 88 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_是函數的參數,但兩個人的名字容易混淆的similiar),我想這是一個全局變量。

如果這是用於屏幕渲染,則可以考慮將自己限制爲float精度,並使用sinf()cosf()來代替。

+0

謝謝你解決了這個問題 –