C++ 如何在3D中绕Z轴动态观察

C++ 如何在3D中绕Z轴动态观察,c++,math,geometry,openframeworks,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

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

非常感谢您的帮助。

我将选取两个单位垂直向量v,w,它们定义了要环绕的平面,然后在角度上循环,并选取这些向量v和w的适当比率来构建向量p=av+bw

更多的细节即将公布

编辑:

这可能会有所帮助

编辑:我想是的

中心+sin(角度)*v*半径1+cos(角度)*w*半径2

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

在2D中,它们分别为(1,0)和(0,1)

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


如果设置半径1=半径2,将得到一个圆。否则,你应该得到一个椭圆。

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

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

如果绕z轴旋转,则z坐标保持不变并更改x和y坐标。因此,您的第一个代码示例就是您要寻找的

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

如果实际需要的是围绕三维空间中的某个点环绕对象,则需要两个角度来描述环绕:其仰角和倾斜角。请参阅和。
作为参考,这些方程是(其中θ和φ是角度)

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


轨道平面平行于x-y平面吗?如果没有,则需要知道平面的方向。如果是,则
z
不会改变。也许可以从在轨道平面上但不在同一直线上的3个点开始。您拥有的代码不会绕z轴轨道运行。你的意思可能是你想要一个不在x-y平面上的轨道或类似的东西。非常感谢,我将插入这个,看看我得到了什么,然后我会标记它