四元數,四叉樹的理解

2021-09-17 18:47:55 字數 1549 閱讀 8476

四元數是複數向三維的擴充擴充套件,使用複數乘法來實現旋轉。具體參考如下:

understanding quaternions

understanding quaternions 中文翻譯

其實就是將二維空間使用矩形大小來表示,每個結點分為0:leftup, 1:leftdown, 2:rightup, 3:rightdown,然後遞迴儲存資料,一般資料儲存在葉子節點,也可以進行改進,可參考如下:

#include using std::list;

#define tree_depth 3

#define min_node_size 0.1

#define safe_delete(p) do while (false)

templateclass quadnode

; //0:leftup, 1:leftdown, 2:rightup, 3:rightdown

public:

quadnode(float left, float right, float up, float down) :

m_left(left), m_right(right), m_up(up), m_down(down) {}

~quadnode()

void setdatalist(listdata)

//遞迴生成四叉樹節點

void generatenode()

; for (list::iterator iter = m_datalist.begin(); iter != m_datalist.end();)

else

iter++;

}if (child_list.empty())

else

}} }

float calclinefx(point p, vector d, point s)

//判斷射線與四叉樹節點本身包圍盒是否相交,用於剪枝

bool intersectbound(point p, vector d)

//剪枝2

if (calclinefx(p, d, )*calclinefx(p, d, ) < 0) return true;

if (calclinefx(p, d, )*calclinefx(p, d, ) < 0) return true;

return false;

} //返回該射線相交的最近entity和距離

bool intersect(point p, vector d, t* &ent_near, point& inter, float& dist)

}} for (int i = 0; i < 4; i++) //再遞迴比較子節點中的最近交點

}} if (ent_near) return true;

else return false;

}};templateclass quadtree

void intersect(point p, vector d, t* &ent, point &inter)

};

四元數的理解和應用

四元數是簡單的 超複數。複數是由 實數加上虛數單位 i 組成,其中i 2 1。相似地,四元數都是由實數加上三個虛數單位 i j k 組成,而且它們有如下的關係 i 2 j 2 k 2 1,i 0 j 0 k 0 1 每個四元數都是 1 i j 和 k 的線性組合,即是四元數一般可表示為a bk cj...

四元數和尤拉角的個人理解

歐垃角可以表示兩個座標之間的轉換,但是存在一些弊端,比如永珍鎖,四元數也可以表述 問題分析 比如,乙個座標系繞y軸旋轉pi 2,那麼我們就可以用尤拉角roll,pitch,yaw和四元數x,y,z,w進行表述,w cos theta 2 x ax sin theta 2 y ay sin theta...

四元數乘法 剛體旋轉中的四元數

四元數博大精深,用途之一圖形學中的三維旋轉。單純從應用角度考慮,四元數可以以如下方式應用於旋轉。旋轉示意圖 假定我們有乙個經過原點的旋轉軸 其中 則,3d旋轉可以通過四元數乘法來表示 1 其中,為單位四元數,等價於 和 分別為 的共軛和逆。對於單位四元數而言 根據式 1 結合四元數的乘法,可以完成一...