其实就是坐标空间之间的变换。
好的,您知道您可以拥有一个执行平移或旋转的矩阵。 (或缩放。或倾斜。等)您可以将这样的矩阵乘以一个点(V)以获得新的(平移/旋转/等)点。例如:
Mtranlate = [ 1 0 0 Tx ] * V = [ Vx ] = [ Vx + Tx ]
[ 0 1 0 Ty ] [ Vy ] [ Vy + Ty ]
[ 0 0 1 Tz ] [ Vz ] [ Vz + Tz ]
[ 0 0 0 1 ] [ 1 ] [ 1 ]
或者绕X/Y/Z轴旋转:
Mrotate_x = [ 1 0 0 0 ] * V = [ Vx ] = [ Vx ]
[ 0 cos -sin 0 ] [ Vy ] [ Vy*cos - Vz*sin ]
[ 0 sin cos 0 ] [ Vz ] [ Vy*sin + Vz*cos ]
[ 0 0 0 1 ] [ 1 ] [ 1 ]
您可以通过将矩阵相乘来组合多个操作。
例如:Mnew = Mtranslate * Mrotate_x。
(是的,顺序很重要!)
因此,给定一个真实世界的基地原点,您可以转换为您(已知/提供的)兽人的 xy 位置,从该点的地形推断出您的兽人脚的 z 位置并转换为该位置。现在你的兽人的“脚”在全局坐标中。从那里,你可能想要旋转你的兽人,让他面向一个特定的方向。
然后向上平移(根据你的兽人模型)找到它的脖子。从颈部,我们可以向上平移(也可能旋转)以找到它的头部或向上平移以找到它的肩膀。从肩部,我们可以旋转和平移来找到肘部。从肘部我们可以旋转和平移来找到手。
你的兽人模型的每个组件都有一个本地参考框架。每个都与通过一个或多个变换(矩阵)附加的参考帧相关。通过乘以所有局部矩阵(变换),我们最终可以看到如何从兽人的脚到他的手。
(请注意,我会为兽人制作动画,然后只使用他的脚 x、y、z 位置。否则工作量太大。)
您会在机器人技术中看到很多这类东西,它们可以很好地介绍正向运动学。在机器人技术中,至少对于更简单的机器人,你有一个旋转的电机,以及一个可以平移的肢体长度。然后还有另一个电机。 (相比之下,人的肩关节可以同时围绕所有三个轴旋转。)
你可以look over the course HANDOUTS for CMU's Robotic Manipulation class (15-384).
可能类似于他们的Forward Kinematics Intro。