2 回答
TA贡献1831条经验 获得超4个赞
是的,将 x 和 y 乘以角度的 sin 和 cos。这就是我在 C++ 中的做法:
class Rotate2D
{
public:
float cosA, sinA;
Rotate2D(const float radRot, const float scale=1.0f)
: cosA(scale*cos(radRot)), sinA(scale*sin(radRot)){};
template<typename T>
inline Point2DF map(const T &pt) const
{
return Point2DF(cosA*pt.cx() - sinA*pt.cy(),
sinA*pt.cx() + cosA*pt.cy());
}
};
此代码在 2D 中旋转并可选择缩放。在 3D 中也是同样的事情。扩展几乎是免费的,因此几乎没有理由不使用它。
但是,我强烈建议您使用四元数库来旋转 3D 点。
TA贡献1895条经验 获得超7个赞
当然有。
对于二维来说,矩阵非常简单,就是
| cos A - sin A |
R = | |
| sin A cos A |
其中 A 是您想要旋转向量的角度
一旦你组成了一个这样的矩阵,将它乘以你的向量,你就会得到向量旋转量“A”
对于二维,请使用文章开头的那个,对于更高维度,谷歌是你的朋友。
通过一些调整,您可以将此技术扩展到缩放、移动(平移)和剪切变换。
请注意,二维向量乘以 2x2 矩阵会产生与您必须在方法中概述的相同操作。这是一种更干净的处理事情的方式。当维数超过 2 时,它会变得更容易。
添加回答
举报