c - 旋转运行不顺畅

标签 c rotation sdl

我有一个函数,旨在获取给定角度并将三角形的坐标旋转该角度。然而,它会稍微停顿一下,然后跳到一个新位置,而不是平稳运行。

该函数的工作原理是将原始坐标平移到原点,然后将它们旋转已移动的角度加上指定的角度。然后它将坐标转换回未修改的位置,然后再将它们转换到图像当前所在的位置。

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/

相关文章:

php - 在 PHP 中使用 C 库

android - 多次旋转图像但保持角对齐

c++ - 点绕 z 轴旋转

c++ - 如何在 SDL 中同时播放多个 MP3 文件?

c++ - SDL_Delay 不会在每个 Action 之前延迟

c - 我如何实现这个等式给出的带通滤波器?

c - 将值分配给结构数组中的变量

c - 从文件中读取 double float ?

javascript - 如何将矩阵的旋转设置为围绕给定点的绝对弧度值?

c - 依赖 SDL 的应用程序的 Makefile 编译严重失败