Graphics 旋转摄影机与旋转场景点(仅旋转点,而不是整个场景)之间的区别?

Graphics 旋转摄影机与旋转场景点(仅旋转点,而不是整个场景)之间的区别?,graphics,linear-algebra,matrix-multiplication,rotational-matrices,Graphics,Linear Algebra,Matrix Multiplication,Rotational Matrices,我认为旋转相机和拍摄场景会产生相同的效果,保持相机稳定并以相反的方式旋转场景 假设原始摄影机旋转矩阵为R1。旋转摄影机意味着应用另一个旋转矩阵R12(因此R2=R12*R1是新的旋转矩阵)。假设X是场景点的真实世界坐标。以反向方式旋转场景点意味着我们将反向旋转矩阵R12^-1应用于X(这可能是错误的) 那么为什么(R12*R1)X=R1(R12^-1*X) 谁能解释一下我错了什么 p、 我不是在问编程以及这两种方法的复杂性。我只是想知道 (1) “旋转场景”动作的数学方程 (2) 如果我假设的“

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

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

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

谁能解释一下我错了什么

p、 我不是在问编程以及这两种方法的复杂性。我只是想知道

(1) “旋转场景”动作的数学方程

(2) 如果我假设的“旋转场景”的方程是正确的,为什么数学方程不能反映我描述的真实世界中的现象

编辑1:根据Spektre的回答,当我使用旋转矩阵R旋转整个场景时,新的摄影机旋转矩阵为

R^-1*R1
在本例中,我使用旋转矩阵R12^-1旋转整个场景,然后创建新的摄影机旋转矩阵

(R12^-1)^-1*R1=R12*R1
但是,如果我认为旋转摄像机等同于旋转场景点X(<强>仅< /强>场景点X,而不是整个场景)。此时,相机的旋转矩阵仍然是R1。但是场景点X现在变成了X’。X'的图像坐标为R1*X'X'的方程式是什么?注意

R1*X' = R12*R1*X
当然,你可以回答这个问题

X'=R1^-1*R12*R1*X
但是我认为X'应该只由R12和X来定义(R1不需要已知就可以形成X')。这就是为什么我问“旋转场景点的数学方程是什么”。X'是与R12相关的旋转矩阵“旋转X”的结果

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

[R1 -R1*(C+d)]*X = [R1 -R1*C]*(X-d)
在上面的等式中(我检查为真),-R1*C是平移向量,-R1*(C+d)是我向右移动时的平移向量,(X-d)是模型向左移动时的位置

在上面的示例中,X'=X-d(因此X'是通过X和我的移动d定义的)。在旋转相机的情况下,X'是什么

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

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

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


在这两种情况下,她的男朋友在现实世界中的地位是相同的。但在第二种情况下,模型的真实世界位置发生了变化,因为我旋转了她。我的问题是,在我旋转女孩后,她在现实世界中的位置是什么?

标题的答案是:从数学上讲,他们几乎是一样的(除了所有操作的反转),但物理旋转摄影机意味着改变单个矩阵,但要旋转场景,必须旋转世界中的所有对象(可以是数千或更多)这要慢得多

但我认为标题和文本具有误导性,因为真正的问题是关于线性代数矩阵方程

假设
R1、R2、R12
是大小为
nxn
的方阵,
x
是大小为
N
的向量。如果我们忽略向量方向(
1xn
vs
nx1
),那么按照您的惯例:

R2 = R12.R1
R1 = Inverse(R12).R2
因此:

正如你们所看到的,你们问题中的方程是错误的,因为你们改变了矩阵的乘法顺序,这是错误的,因为:

R1.R12 != R12.R1
如果你想更深入地了解原因,那就学习线性代数吧

[Edit1]简单
1x1
示例

让我们:

所以重写你的错误等式:

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示例:

在左侧,您将摄影机旋转了
R1
,以便渲染将世界点
(x,y)
转换为其局部坐标
(x1,y1)
。在右侧,情况相反,因此摄影机坐标系与轴对齐(单位矩阵),场景反向旋转
逆(R1)
。这就是它的工作原理(在本例中,
R1
是相对矩阵)

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

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

谢谢你的回答。但我所问的与你的回答完全不同。我不是问编程以及复杂性。我的问题是为什么数学方程式不能反映现实世界的情况。在
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
(R1.R12).(x,y) = (x1,y1)
Inverse(R1.R12).(x1,y1) = (x,y)