Language agnostic 这个张量的正确解

Language agnostic 这个张量的正确解,language-agnostic,math,Language Agnostic,Math,我在中实现了这个系统,我在正确实现径向张量场时有点不顺利 该系统中的所有张量的形式见第3页第4节 R [ cos(2t), sin(2t); sin(2t), -cos(2t) ] 径向张量场定义为: R [ yy - xx, -2xy; -2xy, -(yy-xx) ] 在我的系统中,我只存储R和θ,因为我可以根据这些信息计算张量。这意味着我需要计算径向张量的R和θ。不幸的是,我的尝试失败了。虽然看起来是正确的,但我的解决方案在左上角和右下角象限失败 附录:根据评论中关于系统不工作的图像的

我在中实现了这个系统,我在正确实现径向张量场时有点不顺利

该系统中的所有张量的形式见第3页第4节

R [ cos(2t), sin(2t); sin(2t), -cos(2t) ]
径向张量场定义为:

R [ yy - xx, -2xy; -2xy, -(yy-xx) ]
在我的系统中,我只存储R和θ,因为我可以根据这些信息计算张量。这意味着我需要计算径向张量的R和θ。不幸的是,我的尝试失败了。虽然看起来是正确的,但我的解决方案在左上角和右下角象限失败

附录:根据评论中关于系统不工作的图像的讨论,我也将在这里列出一些硬数字。 整个张量场是800x480,中心点在{400240},我们使用的是带有负y轴的标准图形坐标系(即左上角的原点)

在{400240}处,张量为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;
float x=i-center.x;
浮点数xSqr=x*x;
浮动y=j-中心y;
浮动ySqr=y*y;
浮点r=(浮点)数学功率(xSqr+ySqr,2);
浮点θ=(浮点)数学Atan2(-2*x*y),(ySqr-xSqr))/2;
if(θ<0)
θ+=MathHelper.Pi;

显然,您正在比较本文的公式(1)和(2)。注意公式(1)中的标量倍数l=| |(u_x,u_y)|,并在本节前面用R表示。这个因子在公式(2)中是隐含的,所以为了使它们匹配,我们必须把R因子去掉

公式(2)适用于从径向贴图的“中心”
(x0,y0)
的偏移:

x = xp - x0
y = yp - y0
要形成给定的2x2矩阵:

y^2 - x^2       -2xy

  -2xy      -(y^2 - x^2)
    C           S

    S          -C
我们需要从这个矩阵中算出一个标量R,得到一个无迹正交2x2矩阵,如公式(1)所示:

由于cos^2(2t)+sin^2(2t)=1系数R可确定为:

 R = (y^2 - x^2)^2 + (-2xy)^2 = (x^2 + y^2)^2
留下一个无迹正交2x2矩阵:

y^2 - x^2       -2xy

  -2xy      -(y^2 - x^2)
    C           S

    S          -C
从中可以通过反触发函数提取角度“tan(2t)=S/C”

嗯,差不多了。正如belisarius警告的那样,我们需要检查角度t是否在正确的象限内。这篇论文的作者写在第二节的开头。根据公式
R[cos(2t),sin(2t);sin(2t)-cos(2t)]
,它们的“t”(指张量)取决于
R>=0和θ(你的t)位于[0,2pi]


由于正弦和余弦的周期为2pi,t(θ)仅在长度为pi的区间内唯一确定。我怀疑作者的意思是,2t位于[0,2pi],或者更简单地说,t位于[0,pi]。贝里萨利斯建议使用“atan2等价物”将避免任何被零除的情况。我们可以(如果函数返回负值)需要添加pi,以便
t>=0
。这相当于将2pi添加到2t,因此不会影响无迹正交矩阵中条目的符号(因为'R>=0',符号模式应在公式(1)和(2)中一致)。

特征向量有Tan[]和Cotg[]函数。您是否检查过您是否使用了atan2等价物(在您首选的prog语言中)而不是阿坦?好的,我终于开始实施了,它在左象限和右象限工作,但中间有一条线,它不会过渡。@Martin:我看了这张图片,它很引人注目,但我不知道它告诉我们什么。你有没有办法发布一些数字,例如点
(x0,y0)
(xp,yp)
,这样我们就可以浏览一个例子了?完成。我已经在左上角和右上角的象限中为点添加了值。如果你愿意,我可以轻松添加更多值。@Martin:谢谢,我会将这些值作为例子添加到我的答案中。但是如果可以,请解释一下图片显示的内容……是θ(你的t)的大小吗用洋红色表示?对不起,我应该解释一下。纹理是矢量2纹理,其中X坐标包含R,Y坐标包含θ。如果我没记错(otoh),那么X是图像的红色分量,Y是图像的蓝色分量。