两个矩阵之间的半圆运动

时间:2013-11-13 00:37:13

标签: python math matrix

我正试图在3D空间中以弧形运动将对象从a点移动到b点。我最近一直在阅读矩阵,并试图绕过他们,但无济于事。 让我们说:

a = (x.100.0,y.200.0,z.300.0)
b = (x.-300.0,y.-100.0,z.0.0)
c = finding the middle of a,b matrices
d = start at a, do something with math.pi and multiplying the c matrices to give you and arc motion over to b. 

然后计算弧位置,其中c位于弧的中间。这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

uv成为您的两个向量。归一化两个向量以分别获得u'v'。计算u'v'的叉积,得到与它们正交的向量w。规范化w以获得w'

您现在想要创建关于轴R的轮换w',以便R * u' = v'。只要uv不是共线,只有两个选项,对应于顺时针和逆时针。其中一个将更短,对应于最佳旋转。

维基百科上的这一部分介绍了如何构建Rhttp://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle

你有轴w',角度是arccos(dot(u', v')),因为单位矢量的点积是它们之间角度的余弦。

答案 1 :(得分:0)

圆的中心是M =(a + b)/ 2,其半径r = | a-b | / 2。当您从垂直于(b-a)的方向离开M时,您会发现c点:

c = M + r * v/abs(v)

v是垂直于(b-a)的任何向量。找到这种垂直向量v的一种方法是将(b-a)的叉积与任何不平行于(b-a)的任意向量相乘,例如

v = (b-a) <crossproduct> (x.0, y.0, z.1)

如前所述,该问题有很多解决方案,具体取决于v。