移动球体使其Z轴面向一个方向

时间:2011-06-12 12:57:41

标签: math vector 3d rotation geometry

首先 - 在这个问题上Z出现了。

背景:使用3D对象自上而下2D游戏。

玩家和所有敌人都是可以在2D平面(XY)上向任何方向移动的球体。它们随着移动时的旋转而旋转。它们的速度是世界空间中的3D矢量,这就是我对它们的影响。它们不允许当场旋转。

我需要找到一个公式来确定其中一个球体应该移动的方向,以使其Z轴(或任何轴确实)指向世界空间中的指定方向。

一些例子可能是有序的:

X
|
Z--Y

这个很简单:球体局部轴与世界相匹配所以如果我想要球体Z轴指向1,0,0那么我可以沿着1,0,0移动球体。

给我带来麻烦的是:

X
|
Y--Z

现在我知道要让Z轴指向世界空间的1,0,0,我必须告诉球体沿着1,1,0移动,但我不知道/理解为什么这是情况下。

我已经编程了十年但是我绝对不喜欢矢量数学所以假设我在尝试解释时是个白痴:)

1 个答案:

答案 0 :(得分:0)

好吧,我想我明白你的意思了。

拿一个球 - 你必须躺着一个人。在其上标记一个点以指示感兴趣的轴。现在选择您想要轴指向的方向。诀窍是将球旋转到位以使轴向正确方向移动 - 我们将在一分钟内完成滚动。

显而易见的方法是“直接”移动,如果你这样做几次,你会注意到你旋转球的轴 垂直于你的轴试图移动。这就好像斑点在赤道上而你正在绕南北轴旋转。每次选择新方向时,该方向和标记的轴都会确定新的赤道。还要注意(这可能很棘手)你可以在标记和目的地之间绘制一个大圆圈(这是一个围绕球体的圆圈并将其分成相等的一半),这样它们就在相对的半球上,像镜像一样。 极点总是在那个圆圈上。

现在假设你不能自由选择这样的两极。你有一个标记,你有一个理想的方向,所以你有一个大圆圈,北极将在圆圈的某个地方,但它可能在任何地方。想象一下,其他人可以选择它。标记仍将旋转到目的地,但它们不会再出现在赤道上,它们将处于其他纬度。

现在将球放在地板上滚动 - 现在不要担心标记。请注意,它围绕水平轴,极点旋转,并沿着圆形接触地板,即赤道(现在是垂直的)。两极必须位于球体“腰部”的某个位置,距地面一半(称之为赤道)。如果您选择该圆上的极点,则选择滚动方向。

现在看看标记,画出划分它们的大圆圈。两极必须在那个圆上。看看那个圆圈穿过“腰部”的地方;这就是你的两极必须的地方。

告诉我这是否有意义,我们可以加入数学。