Python 旋转矢量的一种方法,无需转换为极坐标或从极坐标转换为极坐标

Python 旋转矢量的一种方法,无需转换为极坐标或从极坐标转换为极坐标,python,python-3.x,math,Python,Python 3.x,Math,一种方法是: 将原始向量转换为极坐标 按设定数量旋转 转换回笛卡尔坐标 有没有更干净的方法,或者不必进行这些转换的方法当然有。看看旋转矩阵 对于二维,矩阵非常简单,它只是 | cos A - sin A | R = | | | sin A cos A | 其中A是要旋转向量的角度 一旦你组成了这样一个矩阵,把它乘以你的向量,你就可以让向量旋转“a” 对于二维,使用本文开头的那个,因为更高维的谷歌是你的朋友 通过一些调整,您可以将此技术

一种方法是:

将原始向量转换为极坐标

按设定数量旋转

转换回笛卡尔坐标


有没有更干净的方法,或者不必进行这些转换的方法当然有。看看旋转矩阵

对于二维,矩阵非常简单,它只是

    | cos A   - sin A |
R = |                 |
    | sin A     cos A |
其中A是要旋转向量的角度

一旦你组成了这样一个矩阵,把它乘以你的向量,你就可以让向量旋转“a”

对于二维,使用本文开头的那个,因为更高维的谷歌是你的朋友

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


请注意,将二维向量乘以2x2矩阵将产生与方法中所述相同的运算。这只是一种更干净的方式来处理事情。当维度数超过2时,它会变得更容易。

是的,用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
{
公众:
中国科萨、新浪;
旋转2d(恒浮radRot,恒浮刻度=1.0f)
:cosA(scale*cos(radRot)),sinA(scale*sin(radRot)){};
样板
内联点2DF映射(常数T&pt)常数
{
返回点2df(cosA*pt.cx()-sinA*pt.cy(),
新浪*pt.cx()+cosA*pt.cy());
}
};
此代码在二维中旋转和缩放(可选)。在3D中也是一样的。缩放几乎是免费的,所以几乎没有理由不使用它


但是,我强烈建议您使用四元数库旋转3D点。

“还有其他方法吗”是的……有点。它仍然涉及三角公式。一个带有旋转矩阵的仿射变换。我想你真正的问题是如何做到这一点。网上有很多资源。我建议你用谷歌搜索“向量旋转”或类似的东西。看看像Khan Acadamy这样的网站,他们教这类东西的数学。如果你想推广所有的变换,你需要学习线性代数和矩阵乘法Python@VirxEC这个问题与旋转向量无关。