如果这是一个愚蠢的问题,我很抱歉,因为我非常新手在3D工作中。
我有许多针孔相机,具有围绕原点(0,0,0)的3x3旋转矩阵和平移向量。
我正在使用的系统可以移动原点并旋转相机(但所有相机之间保持相对),从而导致每个相机的新旋转矩阵和平移向量,我可以访问。
那么,我的问题是:给定原始空间中具有3D位置的点,如何使用相同相机(或相机)的新旋转/平移计算出该点在新空间中的3D位置?
还有,当我提问时,是否有更有效的方法?
如果这是一个愚蠢的问题,我很抱歉,因为我非常新手在3D工作中。
我有许多针孔相机,具有围绕原点(0,0,0)的3x3旋转矩阵和平移向量。
我正在使用的系统可以移动原点并旋转相机(但所有相机之间保持相对),从而导致每个相机的新旋转矩阵和平移向量,我可以访问。
那么,我的问题是:给定原始空间中具有3D位置的点,如何使用相同相机(或相机)的新旋转/平移计算出该点在新空间中的3D位置?
还有,当我提问时,是否有更有效的方法?
我假设你的点的位置是相对于原始矩阵的,而你说这个矩阵可以进行平移/旋转。
假设所有这些都是必要的,那么你的点的新位置如下:
pos_newCoord = R^-1 * T^-1 * pos_oldCoord
newOrigin = myTranslation(myRotation(oldOrigin))
def newCoordinates(point):
return inverse(myRotation)(inverse(myTranslation)(point))
如果你正在使用4D矩阵,你可以预先计算逆操作。
"如何确定基于相机旋转和平移的变化来确定原点的旋转和平移的变化?" - OP
如果您没有得到这些信息,可以按照以下步骤恢复。我们将使用4D点和4v4仿射变换矩阵(en.wikipedia.org/wiki/Affine_transformation)。
我建议使用齐次坐标来跟踪矩阵和变换。我想你的问题是如何在不同的相机视图之间来回转换点。
如果您将相机变换表示为单个矩阵操作M
,那么向后走就是inverse(M)
。更好的是,如果您的相机矩阵是几个步骤的组合,您可以反转这些步骤。例如,如果M=rotatex(theta) * scale(sx, sy, sz) * translate(x, y, z)
,那么inverse(M) = translate(-x, -y, -z) * scale(1/sx, 1/sy, 1/sz) * rotatex(-theta)
。请注意,您还必须颠倒顺序。这是“穿袜子/鞋子”的属性。您先穿上袜子,然后穿上鞋子。要反转,您需要先脱掉鞋子,然后脱掉袜子。
一旦您能够从每个相机向前和向后移动,您就可以轻松地在任何相机视图之间交换点。