C 围绕另一个任意点旋转点

C 围绕另一个任意点旋转点,c,linear-algebra,C,Linear Algebra,给定函数中的以下测试代码: 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));

给定函数中的以下测试代码:

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)
(01100)
我得到了这个奇怪的图:


蓝线和绿线是重叠的路径。中间的交点(几乎看不见的黄点)是原点。当
方向
0
180
时,所有点都处于正确位置,但在所有其他角度都处于非圆形路径中。在我的时间里,我已经做了很多线性代数,但这让我感到困惑。我不确定我是否忽略了C本身的某些东西,或者我只是没有看到问题所在。

在旋转它之后,您正在重用
tempx
。请尝试以下操作:

   tempx = (int) (point->x* cos(radians) - point->y* sin(radians));
   tempy = (int) (point->x* sin(radians) + point->y* cos(radians));

看看这是否能解决问题。

问题是什么?我不确定您希望这段代码做什么,但可能是因为您正在更新tempx,然后在重新计算tempy时使用该值,而您确实想使用tempx的原始值。@celeritas:是的,就是这样。这确实是个问题。一旦网站允许,我将接受你的回答。谢谢你的帮助!