给定函数内部的以下测试代码:
int orientation = 0; // increments up to 359, then loops to 0
int tempx, tempy;
float radians = orientation * (M_PI / 180);
tempx = point->x;
tempy = point->y;
tempx = (int) (tempx * cos(radians) - tempy * sin(radians));
tempy = (int) (tempx * sin(radians) + tempy * cos(radians));
tempx = tempx + origin->x;
tempy = tempy + origin->y;
通过以下点(相对于原点):
(-100, 0)
,(0, -100)
,(0, 100)
我得到了这个奇怪的曲线图:蓝线和绿线是重叠的路径中间的交叉点(几乎看不到黄点)是原点。当
orientation
为0
或180
时,所有点都处于正确位置,但在所有其他角度上都处于非圆形路径中。我这段时间做了很多线性代数,但这让我很困惑。我不确定我是否忽略了C语言本身,或者我只是没有看到问题。 最佳答案
旋转后您将重新使用tempx
。请尝试以下操作:
tempx = (int) (point->x* cos(radians) - point->y* sin(radians));
tempy = (int) (point->x* sin(radians) + point->y* cos(radians));
看看能不能解决问题。