生成包含2个向量的坐标系

时间:2015-02-02 14:28:12

标签: python math vector linear-algebra

我在3D空间(世界空间)中有2个向量。我需要找到一个相对坐标系,它将两个矢量放在同一个平面上。

我的想法是首先取两个向量的叉积来得到相对于两个向量的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";

更新 提供一些关于我为什么要这样做的信息: 最后,我想通过一次旋转将一个矢量旋转到另一个矢量上。为了做到这一点,我通过取两个向量的叉积来得到旋转轴。但是,我需要从旋转轴和其他矢量生成相对坐标系。

2 个答案:

答案 0 :(得分:1)

在我看来,你的方法是部分正确的。每两个矢量线性独立地定义一个平面。这些矢量的交叉乘积给出了该平面的法向矢量,即' z'如你所说的偏移。现在IMO你应该使用这两个向量之一来定义例如' X'轴。如果你有' x'和' z'您实现的轴' y'这两者的交叉乘积轴。

当然,根据矢量选择和计算顺序,您可以接收不同的结果矢量。此外,通过相对的坐标系在主坐标系中操作需要额外的计算来映射值。

我希望我没有搞砸任何东西。

PS。当我再次阅读你的代码时,它似乎就是你正在做的事情。也许你想要实现别的目标。

你是什么意思:

  

我感觉两个向量之间不共享x和y轴。

答案 1 :(得分:0)

您的方法是正确的,但您可以保存一个交叉产品,因为yaxis与normA相同。

xy平面应包含normA和normB