2 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
是的,將 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 中旋轉(zhuǎn)并可選擇縮放。在 3D 中也是同樣的事情。擴(kuò)展幾乎是免費(fèi)的,因此幾乎沒(méi)有理由不使用它。
但是,我強(qiáng)烈建議您使用四元數(shù)庫(kù)來(lái)旋轉(zhuǎn) 3D 點(diǎn)。

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
當(dāng)然有。
對(duì)于二維來(lái)說(shuō),矩陣非常簡(jiǎn)單,就是
? ? ? ?| cos A? ?- sin A |
R = |? ? ? ? ? ? ? ? ?|
? ? ? ?| sin A? ? ?cos A |
其中 A 是您想要旋轉(zhuǎn)向量的角度
一旦你組成了一個(gè)這樣的矩陣,將它乘以你的向量,你就會(huì)得到向量旋轉(zhuǎn)量“A”
對(duì)于二維,請(qǐng)使用文章開(kāi)頭的那個(gè),對(duì)于更高維度,谷歌是你的朋友。
通過(guò)一些調(diào)整,您可以將此技術(shù)擴(kuò)展到縮放、移動(dòng)(平移)和剪切變換。
請(qǐng)注意,二維向量乘以 2x2 矩陣會(huì)產(chǎn)生與您必須在方法中概述的相同操作。這是一種更干凈的處理事情的方式。當(dāng)維數(shù)超過(guò) 2 時(shí),它會(huì)變得更容易。
添加回答
舉報(bào)