3D數學基礎 3D中的方位與角位移 3

2021-07-03 14:49:09 字數 1837 閱讀 4856

先來看下下面的總結表:

不同的方位表示方法適用於不同的情況,下面是一些選擇的建議:

//設矩陣儲存在下面這些變數中

float m11, m12, m13;

float m21, m22, m23;

float m31, m32, m33;

//以弧度形式計算尤拉角並儲存在以下變數中(360° == 2π弧度)

float h, p, b;

//從m23計算pitch

float sp = -m23;

if(sp <= -1.0f)

else

if(sp >= 1.0f)

else

//檢查萬向鎖情況並計算heading,bank

if(sp > 0.9999f)

else

//輸入矩陣

float m11, m12, m13;

float m21, m22, m23;

float m31, m32, m33;

//輸入四元數

float w, x, y, z;

//檢測w, x, y, z中的最大絕對值

float fourwsquaredminus1 = m11 + m22 + m33;

float fourxsquaredminus1 = m11 - m22 - m33;

float fourysquaredminus1 = m22 - m11 - m33;

float fourzsquaredminus1 = m33 - m11 - m22;

int biggestindex = 0;

float fourbiggestsquaredminus1 = fourwsquaredminus1;

if(fourxsquaredminus1 > fourbiggestsquaredminus1)

if(fourysquaredminus1 > fourbiggestsquaredminus1)

if(fourzsquaredminus1 > fourbiggestsquaredminus1)

//計算平方根和除數

float biggestval = sqrt(fourbiggestsquaredminus1 + 1.0f) * 0.5f;

float mult = 0.25f / biggestval;

//計算四元數的四個分量

switch (biggestindex)

//用全域性變數儲存輸入輸出

float w, x, y, z;

float h, p, b;

//計算sin(pitch)

float sp = -2.0f * (y * z + w * x);

//檢查萬向鎖並計算出尤拉角

if(fabs(sp) > 0.9999f)

else

從物體–慣性四元數轉換到尤拉角**例項(只是將x,y,z值變負,因為共軛):

//用全域性變數儲存輸入輸出

float w, x, y, z;

float h, p, b;

//計算sin(pitch)

float sp = -2.0f * (y * z - w * x);

//檢查萬向鎖並計算出尤拉角

if(fabs(sp) > 0.9999f)

else

3D數學基礎

vector是向量,向量的意思,向量既有大小,又有方向,verctor3 就是三維向量,乙個三維向量會有三個分量,分別是 x,y,z,在 unity 中每乙個遊戲物件都至少會有乙個元件叫 transform,transform 主要用來控制遊戲物件的位置,旋轉和縮放。vector3.distance...

3D數學讀書筆記 3D中的方位與角位移

方位和角位移的基本概念 什麼是方位 角位移?直觀的說,我們知道,物體的 方位 主要描述物體的朝向,然而,方向 和 方位 並不完全一樣。向量有 方向 但沒有 方位 區別在於,當乙個向量指向特定方向時,可以讓向量自轉,但向量卻不會發生任何變化,因為向量的屬性只有大小,而沒有厚度和寬度。然而,當乙個物體朝...

3D數學基礎 向量

vector3.h hello 注釋 是否需要const修飾就是分析其資料是否需要修改,不需要修改就加const,安全性 一般有兩個地方需要考慮是否加const 1,成員函式引數處 2,成員函式本身,即類本身資料不允許修改 修飾的是this ifndef hello vector3 h define...