2013-06-04 52 views
2

我不能這樣做:徵:不能使用規範()用於Vector2i

Vector2i vec(0, 1, 2); 
cout << vec.norm() << endl; 

,因爲它給它提到了一個編譯器錯誤:THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES在一些失敗的斷言。

我可以這樣做:

Vector2i i_vec(0, 1, 2); 
Vector2f f_vec; 
f_vec = i_vec.cast<float>(); 
cout << f_vec.norm() << endl; 

其工作效果顯着。

問題:爲什麼norm方法未定義爲VectorXi的任何原因?

也許徵使用Vector的元素類型來確定返回類型norm()(在這種情況下是有意義的norm()不會爲int返回類型中所定義的)?

只是好奇。

+0

我不認爲歐幾里得範數在整數向量空間中存在一個數學意義。你不能歸一化整數向量。 – akalenuk

回答

2

如果我正確記住norm()函數的作用,它將採用某個輸入的平方根。很顯然,平方根在很多情況下都是非整數。另一方面,如果我記得特徵包的邏輯,一旦你聲明瞭特定元素的矩陣(int, double, complex<double>),它就只適用於這種類型的元素。所以你對你的建議絕對正確。

+2

來完成答案,讓我補充一點,你不需要創建一個臨時的:'i_vec.cast ().norm()',你也可以計算平方規範:'i_vec.squaredNorm()'如果需要的話,之後的平方根。 – ggael

+0

沒想到'squaredNorm()'。謝謝。 –