考虑以下问题及其答案:在3D中给出3点:$ A =(A_x,A_y,A_z); B =(B_x,B_y,B_z); C =(C_x,C_y,C_z)$

查找变换矩阵(在齐次坐标中),该变换矩阵围绕由给定3个点跨越的平面执行反射。 :





任何人都可以解释为什么这个答案是正确的吗? CA | $和$ | BA | $而不是$ | AC | $和$ | AB | $?
我们不是要在$ uv $平面上进行反射(然后-1将在下面一行) ??
我看到了一个类似的问题,您必须绕向量旋转而不是绕表面旋转,然后我们用$ v = u \ times(0,0,1)^ T $(the向量是$ P_1-P_0 $和$ u = \ dfrac {P_1-P_0} {| P_1-P_0 |} $。有什么区别?
通常,找到$ u时的经验法则是什么,给定对象(平面,直线,点等)的v,z $笛卡尔系统?


评论

在我看来,$ | AC | $只是向量A到C的长度的简写,它是$ | C-A | $或$ | A-C | $,这是您的第二个问题。如果是这样,那确实可行。让您了解为什么需要绘制矢量图像,但是我无法在手机上绘制图像。

#1 楼

屏幕快照中的答案有两个方面是错误的。首先,您是正确的,在中间矩阵中,-1应该位于第三行,而不是第二行。另一个错误是$ u,v $基向量被归一化,但是没有正交化,因此$ M $通常不是旋转矩阵。因此,它的逆不仅仅是其转置。 (反射实际上并不需要正交基础,因此您可以通过以下两种方法来解决问题的答案:通过对$ M $使用完全逆,或对$ u $和$ v $进行完全正态化。)

为给定对象设置局部坐标系(我假设为正交)的经验法则是设置一些要与该对象对齐的轴,然后为其余的轴选择任意垂直向量。 >

对于一个点,没有东西可以对齐,因此您可以使用任意轴。
对于一条线,您可以将$ u $轴与该直线对齐,无需约束$ v $轴,因此可以选择垂直于$ u $的任意矢量。这就是$ v = u \ times(0,0,1)^ T $的含义:如果您不关心它的方向,这是获取与u垂直的向量的便捷公式。除非如果$ u $恰好平行于z轴(叉积返回零),否则将不起作用,因此您实际上需要检测到该值并切换到其他公式,例如$ v = u \在这种情况下,为次(1,0,0)^ T $。
对于飞机,将$ u $和$ v $轴与飞机对齐。因此,您可以选择位于平面中的任意$ u $,然后找到位于平面中且与$ u $垂直的$ v $。

正交规范化附录

假设您有几个3D向量$ u,v $是非平行的(线性独立),但又是任意的,并且您想从中生成3D正交基$ u',v',w'$他们。有两种等效的实现方法。



使用Gram–Schmidt过程。它的工作方式如下:首先,标准化$ u $。然后,对于每个其他矢量,减去其在先前矢量上的投影,并对剩余的数据进行归一化。对于3D情况,它看起来像:
$$ \ begin {aligned}
u'&= \ text {normalize}(u)= \ frac {u} {| u |} \\
v'&= \ text {normalize} \ bigl(v-(u'\ cdot v)u'\ bigr)\\
w'&= u'\ times v'
\ end {aligned} $$
请注意,符号$(u'\ cdot v)u'$表示将$ u'$的点积与$ v $(给出一个标量),然后将该标量乘以$你的这给出了与$ u'$平行的$ v $的向量分量。当从$ v $中减去此值时,其余分量垂直于$ u'$。

最后,将$ w'$设置为$ u'$和$ v'$的叉积确保基础是正确的。由于$ u',v'$已经是正交的,因此我们不需要对$ w'$进行归一化,因为它已经归一化了。 (严格来说,这不是Gram–Schmidt过程的一部分。)

Gram–Schmidt过程的工作原理是在任意多个维度上建立正交基础,而不仅仅是两个或三个维度。

另一种仅在3D模式下有效的方法是使用叉积。
$$ \ begin {aligned}
u'&= \ text {normalize}(u )\\
w'&= \ text {normalize}(u'\ times v)\\
v'&= w'\ times u'
\ end {aligned} $$
在这里,必须将$ w'$标准化,因为$ u'$和$ v $不是正交的。但是然后$ u'$和$ w'$是正交的,因此我们可以在不进行归一化的情况下根据它们计算$ v'$。这样产生的结果与之前的过程相同,因此您可以选择使用哪种方法。


评论


$ \ begingroup $
我在考虑镜像行,并且可能看到的是原始问题的格式稍有错误的版本。在这种情况下,它可能是正确的。
$ \ endgroup $
– joojaa
16年8月27日在8:46

$ \ begingroup $
@joojaa为什么您认为问题是格式错误的版本?
$ \ endgroup $
–张
16年8月27日在10:06

$ \ begingroup $
@Nathan,非常感谢。尽管我还有几个问题:1.您能否澄清“您可以用任何一种方法来解决问题……完全对u和v进行正态化”。)如何完全正交化u和v?这也是关于答案的第3点的问题。是否可以保留$ u $不变并设置$ v = u \ times | B-A | $满足要求?如果没有,请您明确告诉我? 2.因此,对于一点我可以使用任何东西,甚至$(1,0,0),(0,1,0),(1,0,0)$? 3.关于用$ | AC | $进行归一化,是否正确?还是应该是$ | C-A | $?因为我不确定第一个是速记。
$ \ endgroup $
–张
16年8月27日在10:16

$ \ begingroup $
@jiang因为它是一个小错误,并且取决于问题的确切措辞,所以很容易构建一个句子,其中两个解决方案的区别仅在于两个字母的介词。在文学中,$ | AC | $是完全正常的简写。
$ \ endgroup $
– joojaa
16年8月27日在11:15



$ \ begingroup $
@Jjang要进行正态化,请看Gram–Schmidt过程。简要地说,您将从$ v = B-A $开始,然后设置$ v'= v-(u \ cdot v)u $。这将减去与$ u $平行的$ v $分量,仅保留垂直分量。然后将$ v'$归一化。并且joojaa是正确的,$ | AC | $是$ A $和$ C $之间距离的常用缩写。
$ \ endgroup $
–内森·里德(Nathan Reed)
16年8月27日在17:45