一种无需与极坐标相互转换即可旋转矢量的方法

一种方法是:

将原始向量转换为极坐标

按设定量旋转

转换回笛卡尔坐标系

是否有一种更干净的方法,或者不需要进行这些转换的方法


月关宝盒
浏览 106回答 2
2回答

慕容708150

是的,将 x 和 y 乘以角度的 sin 和 cos。这就是我在 C++ 中的做法:class Rotate2D{public:&nbsp; &nbsp; float cosA, sinA;&nbsp; &nbsp; Rotate2D(const float radRot, const float scale=1.0f)&nbsp; &nbsp; &nbsp; &nbsp; : cosA(scale*cos(radRot)), sinA(scale*sin(radRot)){};&nbsp; &nbsp; template<typename T>&nbsp; &nbsp; inline Point2DF map(const T &pt) const&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return Point2DF(cosA*pt.cx() - sinA*pt.cy(),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sinA*pt.cx() + cosA*pt.cy());&nbsp; &nbsp; }};此代码在 2D 中旋转并可选择缩放。在 3D 中也是同样的事情。扩展几乎是免费的,因此几乎没有理由不使用它。但是,我强烈建议您使用四元数库来旋转 3D 点。

人到中年有点甜

当然有。对于二维来说,矩阵非常简单,就是       | cos A   - sin A |R = |                 |       | sin A     cos A |其中 A 是您想要旋转向量的角度一旦你组成了一个这样的矩阵,将它乘以你的向量,你就会得到向量旋转量“A”对于二维,请使用文章开头的那个,对于更高维度,谷歌是你的朋友。通过一些调整,您可以将此技术扩展到缩放、移动(平移)和剪切变换。请注意,二维向量乘以 2x2 矩阵会产生与您必须在方法中概述的相同操作。这是一种更干净的处理事情的方式。当维数超过 2 时,它会变得更容易。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python