我有一个函数,旨在获取给定角度并将三角形的坐标旋转该角度。然而,它会稍微停顿一下,然后跳到一个新位置,而不是平稳运行。
该函数的工作原理是将原始坐标平移到原点,然后将它们旋转已移动的角度加上指定的角度。然后它将坐标转换回未修改的位置,然后再将它们转换到图像当前所在的位置。
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];
}
最佳答案
嗯,这个:
int ang = angle_ + angle;
当然会将浮点角度截断为整数。由于 sin()
和 cos()
使用弧度,因此效果不太好。
你应该有:
const double ang = angle_ + angle;
不清楚这里的 angle
是什么(angle_
是函数的参数,但这两个名称非常相似),我猜它是一个全局变量。
如果这是为了屏幕渲染,您可能会考虑将自己限制为 float
精度并使用 sinf()
和 cosf()
相反。
关于c - 旋转运行不顺畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43391438/