如何围绕Z轴绕3D运行

时间:2010-01-16 16:09:47

标签: c++ math geometry openframeworks

我主要是一个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;
}

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

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

非常感谢帮助。

4 个答案:

答案 0 :(得分:5)

如果围绕z轴旋转,则会使z坐标固定并改变x坐标和y坐标。所以您的第一个代码示例是您正在寻找的

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

如果实际想要的是围绕3d空间中的点绕物体运行,则需要两个角度来描述轨道:它的仰角和其倾角。请参阅herehere 作为参考,这些方程是(其中θ和φ是你的角度)

  

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

答案 1 :(得分: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是圆的单位向量。

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

在3D中你需要计算它们 - 取决于飞机的方向。

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

答案 2 :(得分:1)

如果您绕Z轴旋转,那么您只需执行第一个代码,并按原样保留Z坐标。

答案 3 :(得分:0)

如果你只是想让轨道发生在一个有角度的平面上并且不介意它是椭圆形的,你可以在确定x和y坐标之后做一些类似z = 0.2*x + 0.2*y或你想要的任何组合的事情