为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2023-09-19 17:34:52
一种方法是:将原始向量转换为极坐标按设定量旋转转换回笛卡尔坐标系是否有一种更干净的方法,或者不需要进行这些转换的方法
查看完整描述

2 回答

?
慕容708150

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 点。


查看完整回答
反对 回复 2023-09-19
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

当然有。

对于二维来说,矩阵非常简单,就是

       | cos A   - sin A |

R = |                 |

       | sin A     cos A |

其中 A 是您想要旋转向量的角度


一旦你组成了一个这样的矩阵,将它乘以你的向量,你就会得到向量旋转量“A”


对于二维,请使用文章开头的那个,对于更高维度,谷歌是你的朋友。


通过一些调整,您可以将此技术扩展到缩放、移动(平移)和剪切变换。


请注意,二维向量乘以 2x2 矩阵会产生与您必须在方法中概述的相同操作。这是一种更干净的处理事情的方式。当维数超过 2 时,它会变得更容易。


查看完整回答
反对 回复 2023-09-19
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信