旋转相机与旋转场景点(只有点,而不是整个场景)之间有什么不同?

时间:2016-10-25 07:08:08

标签: graphics linear-algebra matrix-multiplication rotational-matrices

我认为旋转相机并拍摄场景照片会产生相同的效果,同时保持相机稳定并以相反的方式旋转场景。

假设原始相机旋转矩阵为R1。旋转相机意味着我们应用另一个旋转矩阵R12(因此R2 = R12 * R1是新的旋转矩阵)。假设X是场景点的真实世界坐标。以相反的方式旋转场景点意味着我们将反向旋转矩阵R12 ^ -1应用于X(这可能是错误的)。

为什么(R12 * R1) X != R1 (R12 ^ -1 * X)?

任何人都能解释一下我的错吗?

P.S。我不是在询问编程以及两种方法的复杂性。我只是想知道

(1)动作的数学等式"旋转场景"

(2)如果我假设等式为"旋转场景"这是正确的,为什么数学方程式并不像我所描述的那样反映现实世界中的现象。

编辑1 :根据 Spektre 的回答,当我使用旋转矩阵R旋转整个场景时,新的相机旋转矩阵< / p>

R^-1*R1

在这种情况下,我用旋转矩阵R12 ^ -1旋转整个场景,然后新的摄像机旋转矩阵

(R12^-1)^-1*R1=R12*R1

然而,如果我认为旋转相机相当于旋转场景点X(场景点X,而不是整个场景),该怎么办?那时,相机的旋转矩阵仍然是R1。但现场点X现在变成了X&#39;。并且X&#39;的图像坐标是R1 * X&#39;。 X&#39;的等式是什么? ?请注意

R1*X' = R12*R1*X

当然,你可以回答那个

X'=R1^-1*R12*R1*X

但我认为X&#39;应仅由R12和X定义(R1不需要知道形成X&#39;)。这就是为什么我要问&#34;什么是旋转场景点的数学方程式?#34;。 X&#39;是行动的结果&#34;旋转X&#34;通过一些与R12相关的旋转矩阵。

我有另一个例子,当相机不旋转但移动时。假设我正在拍摄一张站在我面前的模特的照片。她的位置是X.我的位置是C.在第一种情况下,我向右(我)移动并拍摄第一张照片。在第二种情况下,我不会移动,但是模型会以相同的步骤移动左边(我),然后拍摄第二张照片。两个图像中模型的位置必须相同。这由数学方程

表示
[R1 -R1*(C+d)]*X = [R1 -R1*C]*(X-d)

在上面的等式中(我检查为真),-R1 * C是平移向量,-R1 *(C + d)是当我向右移动时的平移向量,(Xd)是模特移动到我左边时的位置。

在上面的例子中,X&#39; = X-d(所以X&#39;是通过X和我的运动d定义的)。在旋转相机的情况下,什么是X&#39;?

编辑2 :由于 Spektre 仍然不理解我的问题。需要强调的是,在第二种情况下,我不旋转整个世界,我只旋转X点。(如果我旋转整个世界,X的世界坐标在世界旋转后保持不变。但是如果我只旋转X,它的世界坐标将变为X&#39;)。

想象一下拍摄模特照片的例子。在第一种情况下,我旋转相机拍摄她的第一张照片(和她的男朋友站在她旁边)。

在第二种情况下,我只反向旋转模型(她的男朋友是稳定的),然后我拍了第二张照片。当我比较两张照片时,模特的位置是相同的(她男朋友的位置会有所不同)。

在这两种情况下,她男朋友的真实世界位置都是一样的。但是自从我旋转她之后,模型的真实世界位置在第二种情况下发生了变化。我的问题是,在旋转她之后女孩的真实世界位置是什么?

1 个答案:

答案 0 :(得分:1)

标题的答案是:在数学上它们几乎相同(除了所有操作的反转)但物理旋转相机意味着改变单个矩阵但旋转场景你必须旋转所有对象你的世界(可能是数千甚至更多),这要慢得多......

但我认为标题和文字误导为关于线性代数矩阵方程的真正问题

R1,R2,R12为大小为N x N的方形矩阵,X为大小为N的向量。如果我们忽略了向量方向(1 x N vs N x 1),那么对于您的约定:

R2 = R12.R1
R1 = Inverse(R12).R2

这样:

R12.R1.X == R12.Inverse(R12).R2.X == R2.X

正如您所看到的,您的问题中的等式是错误的,因为您更改了错误的矩阵乘法顺序,因为:

R1.R12 != R12.R1

如果你想更清楚地了解为什么然后研究线性代数。

[Edit1]简单1x1示例

令:

R1 = 1
R12= 2
R2 = R12.R1 = 2

所以重写错误的等式:

R12*R1*X != R1*Inverse(R12)*X
  2* 1*X !=  1*         0.5*X
     2*X != 0.5*X

并使用正确的

R12*R1*X == R12*Inverse(R12)*R2*X == R2*X
  2* 1*X ==   2*         0.5* 2*X ==  2*X
     2*X == 2*X == 2*X

[Edit2]简单的2D示例

我发现你仍然感到困惑,所以这里有一个 2D 问题的例子:

2D exmaple

在左侧,您按R1旋转了相机,以便将变换世界点(x,y)渲染到其本地坐标(x1,y1)。在右侧是相反的情况,因此摄像机坐标系是轴对齐(单位矩阵),场景反向旋转Inverse(R1)。这就是它的工作原理(在这种情况下R1是相对矩阵)。

现在,如果我尝试将其移植到您的矩阵名称和约定中,那么相对矩阵为R12R1是相机:

(R1.R12).(x,y) = (x1,y1)
Inverse(R1.R12).(x1,y1) = (x,y)