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

谢谢你解决了这个问题 –