歐拉角的定義與計算

       項目需要歐拉角的相關計算,最近告一段落,在此總結一下。

       百度了一下歐拉角的定義,用來確定定點轉動剛體位置的3個一組獨立角參量,由章動角θ、旋進角(即進動角)ψ和自轉角j組成,爲歐拉首先提出而得名。後面一串冗雜的公式計算,第一眼看到我是拒絕的,這什麼玩意啊,怎麼算啊,不要慌,其實歐拉角的計算主要分成三個軸上的旋轉,分別是x軸的pitch,y軸的yaw,z軸的roll。下面借一下飛機的圖片,這三張動圖形象的表示了歐拉角的旋轉方式。第一張是繞x軸旋轉pitch,第二張繞y軸旋轉yaw,第三張是繞z軸旋轉roll。    

                                                                                                                               

                                    

       其實就相當於飛機是一個座標系,地面也是一個座標系,飛機的座標系是局部座標系,也可以叫做機體座標系,地面的座標系是世界座標系,兩者都是右手座標系,歐拉角的pitch就是局部座標系的X軸與世界座標系的Y軸的夾角,yaw就是世界座標系的X軸與局部座標系鉛垂面的法向量的夾角,其中局部座標系鉛垂面就是下圖的陰影面,roll就是局部座標系的Z軸與局部鉛垂面法向量的夾角。其中pitch值不能超過90度,這裏牽扯到了萬向鎖的知識,有興趣的可以去搜索一下四元數和歐拉角的關係,在此就不多做介紹了。

       最後貼一下計算角度的代碼:

 private float ComputeEulerAngle(Vector3 from, Vector3 to)
 {      
     float x = Vector3.Angle(from, to);
     if (x >= 90)
     {
         if (x == 90) return x;
         float temp = 180 - x;
         x = 90 - temp;
     }
     else
     {
         float temp = 90 - x;
         x = temp;
     }
     return x;
 }

 

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