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 時,它會變得更容易。
添加回答
舉報