向量向量平方和
矩陣動態矩陣
在使用動態矩陣的時候發現乙個問題,在無法知道大小的時候直接初始化
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 光線的 偏折 現象實際上和光的粒子性有關,這裡我...