點繞點旋轉->點繞座標軸旋轉

最近看irrlicht源碼,在include/core中的vector2d.h中有一個函數rotateBy()。其計算原理如下:

    // vector2d的一個成員函數
    void rotateBy(f64 degrees, const vector2d<T>& center)
    {
        degrees *=gradPI2;//轉換爲弧度制
        T cs = (T)cos(degrees);
        T sn = (T)sin(degrees);
        // 先將旋轉中心點平移到原點,同時也要平移待旋轉點
        X -= center.X;
        Y -= center.Y;
        // 設置當前點座標爲旋轉後的點
        set(X*cs - Y*sn, X*sn + Y*cs);
        // 將旋轉後的點平移回去
        X += center.X;
        Y += center.Y;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

這裏寫圖片描述

由上圖可以看出,其實P點繞原點旋轉,如果轉換到三維空間,其實就是三維點P繞座標軸z旋轉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章