0

我试图在 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 位于圆弧的中间。这是正确的方法吗?

4

2 回答 2

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'))因为单位向量的点积是它们之间角度的余弦。

于 2013-11-13T05:11:53.640 回答
0

你的圆心是 M=(a+b)/2,它的半径 r= |ab|/2 。当您从 M 沿垂直于 (ba) 的方向移动时,您会发现点 c:

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

其中 v 是垂直于 (ba) 的任何向量。找到这样一个垂直向量 v 的一种方法是将 (ba) 与不平行于 (ba) 的任意向量取叉积,例如

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

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

于 2013-11-19T12:30:37.010 回答