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这个问题与旋转向量无关。