C++:围绕某个点旋转 vector

标签 c++ vector rotation

我正在尝试围绕 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/

相关文章:

c++ - MFC为OPOS添加Typelib或ActiveX

C++ 如何在线程终止后删除线程

c++ - 我的子类的属性被延迟初始化

c++ - 喜欢虚拟还是模板?

C# 将 Vector3d/Point3d 转换为 double[]

vector - 在 Rust 枚举/结构中接受 slice 和 Vec

Jquery 图像转换没有按预期工作?

r - 将带有逗号的字符串转换为 R 中的向量

animation - 为什么我的 css3 动画不能反向动画?

iphone - iOS 6 自动旋转困惑