生成包含 2 个向量的坐标系
Generating a Coordinate System Which Contains 2 Vectors
我有 2 个 3D 向量 space(世界 space)。我需要找到一个将两个向量放在同一平面上的相对坐标系。
我的想法是首先取两个向量的叉积以获得相对于两个向量的 Z 轴。然后制作新的 X 轴,取新的 Z 轴和原始向量之一的叉积。然后要获得新的 Y 轴,只需取新 Z 和新 X 的叉积即可。但我认为这无法实现我想要的。我感觉这两个向量之间没有共享 x 和 y 轴。
这是我使用的代码:
normA = TriangleA.forward.normalize();
normB = TriangleB.forward.normalize();
zaxis = normA.cross(normB);
xaxis = zaxis.cross(normA);
yaxis = xaxis.cross(zaxis);
zaxis = zaxis.normalize();
xaxis = xaxis.normalize();
yaxis = yaxis.normalize();
originx = str(TriangleB.verts[0][0]) + "mm";
originy = str(TriangleB.verts[0][1]) + "mm";
originz = str(TriangleB.verts[0][2]) + "mm";
更新
提供一些关于我为什么要这样做的信息:
最后,我想通过一次旋转将一个向量旋转到另一个向量上。为此,我通过取两个向量的叉积来获得旋转轴。但是,我需要从旋转轴和其他向量生成相对坐标系。
我认为您的方法部分正确。每两个线性独立的向量定义一个平面。这些向量的叉积给出了该平面的法向量,如您所说,它是 'z' 偏移量。现在 IMO 你应该使用这两个向量之一来定义例如'x' 轴。如果你得到 'x' 和 'z' 轴,你可以通过这两个的叉积获得 'y' 轴。
当然,根据向量的选择和计算顺序,您可以获得不同的结果向量。另外,通过相对坐标在主坐标系中操作需要额外的计算来映射值。
我希望我没有搞砸任何事情。
PS。当我再次阅读您的代码时,似乎这就是您正在做的事情。也许你想实现其他目标。
你是什么意思:
I have feeling that the x and y axis are not shared between the two vectors.
你的方法是正确的,但你可以保存一个叉积,因为 yaxis 与 norma 相同。
xy 平面应同时包含 normA 和 normB
我有 2 个 3D 向量 space(世界 space)。我需要找到一个将两个向量放在同一平面上的相对坐标系。
我的想法是首先取两个向量的叉积以获得相对于两个向量的 Z 轴。然后制作新的 X 轴,取新的 Z 轴和原始向量之一的叉积。然后要获得新的 Y 轴,只需取新 Z 和新 X 的叉积即可。但我认为这无法实现我想要的。我感觉这两个向量之间没有共享 x 和 y 轴。
这是我使用的代码:
normA = TriangleA.forward.normalize();
normB = TriangleB.forward.normalize();
zaxis = normA.cross(normB);
xaxis = zaxis.cross(normA);
yaxis = xaxis.cross(zaxis);
zaxis = zaxis.normalize();
xaxis = xaxis.normalize();
yaxis = yaxis.normalize();
originx = str(TriangleB.verts[0][0]) + "mm";
originy = str(TriangleB.verts[0][1]) + "mm";
originz = str(TriangleB.verts[0][2]) + "mm";
更新 提供一些关于我为什么要这样做的信息: 最后,我想通过一次旋转将一个向量旋转到另一个向量上。为此,我通过取两个向量的叉积来获得旋转轴。但是,我需要从旋转轴和其他向量生成相对坐标系。
我认为您的方法部分正确。每两个线性独立的向量定义一个平面。这些向量的叉积给出了该平面的法向量,如您所说,它是 'z' 偏移量。现在 IMO 你应该使用这两个向量之一来定义例如'x' 轴。如果你得到 'x' 和 'z' 轴,你可以通过这两个的叉积获得 'y' 轴。
当然,根据向量的选择和计算顺序,您可以获得不同的结果向量。另外,通过相对坐标在主坐标系中操作需要额外的计算来映射值。
我希望我没有搞砸任何事情。
PS。当我再次阅读您的代码时,似乎这就是您正在做的事情。也许你想实现其他目标。
你是什么意思:
I have feeling that the x and y axis are not shared between the two vectors.
你的方法是正确的,但你可以保存一个叉积,因为 yaxis 与 norma 相同。
xy 平面应同时包含 normA 和 normB