我正在尝试围绕 vector 上的某个点旋转 vector (在 C++ 中):
1 2 3
4 5 6
7 8 9
围绕点 (1,1)(即“5”)旋转 90 度会导致:
7 4 1
8 5 2
9 6 3
我现在正在使用:
x = (x * cos(90)) - (y * sin(90))
y = (y * cos(90)) + (x * sin(90))
但我不希望它围绕 (0,0) 旋转
最佳答案
答案取决于您的坐标系。
计算机图形坐标系,(0,0)
在顶部左边
如果您使用计算机图形 vector 实现,其中 (0,0)
是 top 左角并且您正在围绕点 (dx, dy)
,那么旋转计算,包括平移回原始坐标系,将是:
x_rotated = ((x - dx) * cos(angle)) - ((dy - y) * sin(angle)) + dx
y_rotated = dy - ((dy - y) * cos(angle)) + ((x - dx) * sin(angle))
物理/数学坐标系,(0,0)
在底部左边
如果你使用的是更传统的现实世界坐标系,其中(0,0)
是底左角,那么旋转计算,围绕点(dx, dy)
包括转换回原始坐标系,将是:
x_rotated = ((x - dx) * cos(angle)) - ((y - dy) * sin(angle)) + dx
y_rotated = ((x - dx) * sin(angle)) + ((y - dy) * cos(angle)) + dy
感谢 mmx他们对 Pesto 的评论的帖子,并发送至 SkeletorFromEterenia用于突出显示我的实现中的错误。
关于C++:围绕某个点旋转 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/620745/