4

我主要是 Flash AS3 开发人员,但我正在跳入 openframeworks 并且在使用 3D 时遇到了麻烦(这些示例在 AS 中)

Math.Sin()在 2D 中,您可以使用和来模拟围绕某个点的物体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;
}

我想知道如何将其转换为 3D 轨道,如果我还想在三维中进行轨道运行。

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

非常感谢您的帮助。

4

4 回答 4

5

如果您绕 z 轴运行,则您的 z 坐标将保持固定并更改您的 x 和 y 坐标。因此,您的第一个代码示例就是您要寻找的

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

如果您真正想要的是围绕 3d 空间中的一个点环绕一个物体,您将需要两个角度来描述轨道:它的仰角倾角。见这里这里
作为参考,这些方程是(其中 θ 和 φ 是你的角度)

x = x 0 + r sin(θ) cos(φ)
y = y 0 + r sin(θ) sin(φ)
z = z 0 + r cos(θ)

于 2010-01-26T19:06:04.753 回答
1

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

更多细节即将到来。

编辑:

这可能会有所帮助

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

编辑:我认为实际上是

中心 + sin(角度) * v * radius1 + cos(角度) * w * radius2

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

在 2D 中,它们是 (1,0) 和 (0,1)。

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

如果你设置radius1 = radius 2,你会得到一个圆。否则,你应该得到一个椭圆。

于 2010-01-16T16:15:35.963 回答
1

如果您绕 Z 轴旋转,那么您只需执行第一个代码,并保持 Z 坐标不变。

于 2010-01-16T16:17:05.157 回答
0

如果您只是希望轨道发生在一个有角度的平面上并且不介意它是椭圆的,那么您可以z = 0.2*x + 0.2*y在确定 x 和 y 坐标后执行类似 或任何您喜欢的组合的操作。

于 2010-01-20T09:05:53.233 回答