我正试图在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位于弧的中间。这是正确的方法吗?
答案 0 :(得分:1)
让u
和v
成为您的两个向量。归一化两个向量以分别获得u'
和v'
。计算u'
和v'
的叉积,得到与它们正交的向量w
。规范化w
以获得w'
。
您现在想要创建关于轴R
的轮换w'
,以便R * u' = v'
。只要u
和v
不是共线,只有两个选项,对应于顺时针和逆时针。其中一个将更短,对应于最佳旋转。
维基百科上的这一部分介绍了如何构建R
:http://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。