如何在3D中绕Z轴旋转

4

我主要是一名Flash AS3开发人员,但我正在尝试使用openframeworks并且在使用3D方面遇到了问题(这些示例是在AS中)。

在2D中,您可以通过使用Math.Sin()Math.cos()来模拟物体绕点轨道,如下所示:

function update(event:Event):void
{
    dot.x = xCenter + Math.cos(angle*Math.PI/180) * range;
    dot.y = yCenter + Math.sin(angle*Math.PI/180) * range;
    angle+=speed;
}

我想知道如何将这个转化为三维轨道,如果我也想在第三维度上旋转。

function update(event:Event):void
{
    ...
    dot.z = zCenter + Math.sin(angle*Math.PI/180) * range;
    // is this valid?
}

一份帮助将不胜感激。

1
轨道平面是否与x-y平面平行?如果不是,则需要了解平面的方向。如果是,则 z 不会改变。 - Alok Singhal
也许可以先列出三个在轨道平面上但不在同一条直线上的点。 - Hamish Grubijan
你的代码确实是围绕着z轴旋转的。你可能是想要一个不在x-y平面上的轨道或类似的东西。 - dmckee --- ex-moderator kitten
4个回答

5

如果您绕z轴旋转,那么您将固定z坐标,同时改变x和y坐标。因此,第一个代码示例就是您要寻找的

要绕x轴(或y轴)旋转,只需用z替换x(或y)。在您想要成为0度的任一轴上使用Cos;选择是任意的。

如果您实际上想要围绕三维空间中的一个点旋转物体,则需要两个角来描述轨道:其仰角方位角。请参见这里这里
对于参考,这些方程式如下(其中θ和φ是您的角度)

x = x0 + r sin(θ) cos(φ)
y = y0 + r sin(θ) sin(φ)
z = z0 + r cos(θ)


1

我会选择两个垂直的单位向量v和w来定义轨道所在的平面,然后循环遍历角度并选择这些向量v和w的适当比例来构建您的向量p = av + bw。

更多细节即将到来。

编辑:

这可能会有所帮助。

http://en.wikipedia.org/wiki/Orbit_equation

编辑:我认为实际上是

center + sin(angle) * v * radius1 + cos(angle) * w * radius2

这里的v和w是圆的单位向量。

在二维中,它们是(1,0)和(0,1)。

在三维中,您需要计算它们-取决于平面的方向。

如果您将radius1 = radius2,则会得到一个圆。否则,您应该得到一个椭圆。


非常感谢,我会将其插入并查看结果,然后进行标记。 - enzuguri

1

如果您正在绕Z轴旋转,则只需编写第一行代码,将Z坐标保持不变。


0
如果你只想让轨道在一个倾斜的平面上运行,并且不介意它是椭圆形的,那么你可以在确定了x和y坐标之后,做类似于z = 0.2*x + 0.2*y或者其他你喜欢的组合。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接