eigen向量計算 EIgen基本運算學習

2021-10-19 15:47:26 字數 1517 閱讀 4778

向量向量平方和

矩陣動態矩陣

在使用動態矩陣的時候發現乙個問題,在無法知道大小的時候直接初始化

int rows,cols;//從其他地方獲取的尺寸行列數

eigen::matrixxf tmp_mat;

tmp_mat=eigen::matrix::zero();

會報錯提示,初始化的時候必須使用const常量

這裡的rows,cols必須使用常量,不能使用變數。

但是這個時候不知道應該是多少數值。所以可以如下使用:

int rows,cols;//從其他地方獲取的尺寸行列數

eigen::matrixxf tmp_mat;

tmp_mat=eigen::matrix();

tmp_mat.resize(rows,cols);

對於大型矩陣 (一般行列超過32),考慮使用 dynamic,

定義方式如下:

matrix matrix_name (row_num,col_num);

如果沒有 (row_num,col_num)

會報錯:

assertion `row >= 0 && row < rows() … failed.

如果矩陣的尺寸在編譯的時候是不確定的,而在執行的時候才能確定,eigen提供了定義動態大小的方法。比如非常好用的:

typedef matrix matrixxd;

matrixxd定義了任意行數和列數的矩陣,可以在執行時確定。

類似地,對於向量有:

typedef matrix vectorxi ;

也可以對於乙個維度確定,而指定另外乙個維度是動態大小的。

matrix 矩陣的行數是 3,列數不確定。

隨機矩陣

使用eigen庫和c++隨機數機制,產生正態分佈的隨機矩陣

eigen中只有產生均勻分布隨機矩陣的random(),沒有其他分布型別的隨機矩陣函式。

借助eigen提供的unaryexpr函式,可以對矩陣的每乙個元素進行同乙個操作。unaryexpr接受乙個函式物件作為引數,該函式物件定義了所要對元素進行的運算。因此,我們只需要定乙個產生隨機數的函式物件,將其作為引數傳給unaryexpr,即可對矩陣每乙個元素產生隨機數。可以用lambda表示式作為函式物件,也可以定義乙個函式,並用ptr_fun()函式將函式指標轉成函式物件。下面給出這兩種方式的實現。

qr分解

eigen::matrix x_qr(rows,1);

x_qr = a.colpivhouseholderqr().solve(b);

cout<

cholesky分解

四元數eigen中quaternion的建構函式為

quaternion (const scalar &w, const scalar &x, const scalar &y, const scalar &z)

注意w在前。然而在內部儲存時eigen將四元數的w放在最後.

例如通過eigen::vector4d q = q_ab.coeffs();訪問時,q中的最後乙個元素才是w。

Tangent Space的基向量計算方法

對於乙個normal texture的圖示,他裡面所有畫素上的normal vector都在u,v,n座標系上的,這也就是tangent space 當將乙個normal texture貼到mesh上後,單考慮乙個vertex,他對應於normal texture上的乙個點 具體在哪由這個verte...

稀疏向量計算優化小結

在各種演算法中,向量計算是最經常使用的一種操作之中的乙個。傳統的向量計算,學過中學數學的同學也能明確怎麼做。但在如今的大資料環境下。資料一般都會比較稀疏,因此稀疏向量的計算,跟普通向量計算。還是存在一些不同。首先,我們定義兩個向量 a x1,x2,xn b y1,y 2,yn 定義a b的點積為a ...

幾何向量 計算光線折射refract向量

其實光線除了反射現象外,還有折射現象,打個比方,你看水塘中魚兒游動,表面上看起來魚兒很貼近水面,同時也感覺水底很淺,結果一腳捅下去,直接沒到大腿了,這就是光的折射產生的一種視覺欺騙。光線折射的產生,其實是因為光線通過不同介質所產生的 偏折 現象。ps 光線的 偏折 現象實際上和光的粒子性有關,這裡我...