C++ 如何在3D中绕Z轴动态观察
我主要是一个Flash AS3开发人员,但我跳进了openframeworks,在使用3D时遇到了困难(这些示例在AS中) 在2D中,您可以通过使用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
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平面上的轨道或类似的东西。非常感谢,我将插入这个,看看我得到了什么,然后我会标记它