我在this paper中實現了系統,我已經正確實現了徑向張量場的實現。這個張量的正確解決方案
在這個系統中的所有張量是3頁上給出的形式,部分4
R [ cos(2t), sin(2t); sin(2t), -cos(2t) ]
徑向張量場被定義爲:
R [ yy - xx, -2xy; -2xy, -(yy-xx) ]
在我的系統我只存儲R和Theta,因爲我可以根據這些信息計算張量。這意味着我需要計算徑向張量的R和Theta。不幸的是,我在這方面的嘗試失敗了。雖然看起來是正確的,但我的解決方案在左上角和右下角象限中失敗。
附錄:繼評論中關於系統映像無法正常工作的討論後,我也會在這裏寫一些硬編碼。 整個張量場是800x480,中心點位於{400,240},我們使用y軸爲負的標準圖形座標系(即左上角的原點)。
在{400,240},該張量爲R = 0,T = 0 在{200,120},該張量是R = 2.95936E + 9,T = 2.111216 在{600,120},張量是R = 2.95936E + 9,T = 1.03037679
我可以輕鬆地採樣任何更多的點,你認爲可能有所幫助。
我使用計算值的代碼是:
float x = i - center.X;
float xSqr = x * x;
float y = j - center.Y;
float ySqr = y * y;
float r = (float)Math.Pow(xSqr + ySqr, 2);
float theta = (float)Math.Atan2((-2 * x * y), (ySqr - xSqr))/2;
if (theta < 0)
theta += MathHelper.Pi;
特徵向量具有Tan []和Cotg []函數。你有沒有檢查你是否使用atan2等價物(以你的編程語言爲準)而不是atan? – 2011-03-17 22:59:21