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

问题描述

| 首先-Z在这个问题上是Up。 上下文:使用3D对象自上而下的2D游戏。 玩家和所有敌人都是可以在2D平面(XY)上向任何方向移动的球体。它们旋转时会如您所愿地旋转。它们的速度是世界空间中的3D向量,这就是我影响它们的方式。他们不允许当场旋转。 我需要找到一个公式来确定这些球体之一应移动的方向,以使其Z轴(或实际上的任何轴)指向世界空间中的指定方向。 可能有一些示例:
X
|
Z--Y
这很简单:“球体”局部轴与世界匹配,因此,如果我希望“球体” Z轴沿1,0指向,则可以沿1,0移动球体。 给我麻烦的是:
X
|
Y--Z
现在,我知道要使Z轴沿世界空间沿1,0指向,我必须告诉球体沿1,1,0移动,但我不知道/不知道为什么。 我已经编程十年了,但是我绝对喜欢矢量数学,所以假设我在解释时是个白痴。     

解决方法

        好吧,我想我明白你的意思了。 拿一个球-您必须有一个躺在附近的球。在其上标记一个点以指示感兴趣的轴。现在,选择您要轴指向的方向。诀窍是将球旋转到位,以使轴指向正确的方向,我们将在一分钟内开始滚动。 显而易见的方法是直接“直接”移动,如果多次执行此操作,您会注意到旋转球的轴垂直于您要移动的轴。好像光斑在赤道上,而您正在绕着南北轴旋转。每次选择新方向时,该方向和标记的轴都会确定新的赤道。还要注意(这可能很棘手),您可以画一个大圆(在球体上绕着一个圆,将其分成相等的两半),该圆位于标记和终点之间,以便它们位于对面的半球,像镜像。极点始终在该圆上。 现在,假设您没有自由选择这样的两极。您有一个标记,您有一个想要的方向,所以您有了一个大圆圈,北极将在圆圈上的某个位置,但可以在任何地方。想象其他人可以选择它。标记仍会旋转到目的地,但它们将不再位于赤道上,而是处于其他纬度。 现在,将球放在地板上并滚动-暂时不要担心标记。请注意,它绕着水平轴(两极)旋转,并沿圆圈(赤道(现在是垂直))接触地板。极点必须位于球体“腰部”的某个位置,距离地面一半(不要称其为赤道)。如果您选择该圆上的极点,则可以选择滚动方向。 现在查看标记,并画出一个大圆圈将它们分开。极点必须在该圆上。看那个圆圈穿过\“腰\”的地方;那是你的极点所在。 告诉我这是否有意义,我们可以进行数学计算。