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;
}

3 次元でも周回したい場合、これをどのように 3D 周回軌道に変換するか考えています。

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

助けていただければ幸いです。

4

4 に答える 4

5

If you are orbiting around the z-axis, you are leaving your z-coordinate fixed and changing your x- and y-coordinates. So your first code sample is what you are looking for.

To rotate around the x-axis (or y-axes), just replace x (or y) with z. Use Cos on whichever axis you want to be 0-degrees; the choice is arbitrary.

If what you actually want is to orbit an object around a point in 3d-space, you'll need two angles to describe the orbit: its elevation angle and its inclination angle. See here and here.
For reference, those equations are (where θ and φ are your angles)

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

于 2010-01-26T19:06:04.753 に答える
1

周回する平面を定義する 2 つの単位垂直ベクトル v、w を選択し、角度をループして、これらのベクトル v と w の適切な比率を選択して、ベクトル p = av + bw を作成します。

詳細は追ってお知らせいたします。

編集:

これは役立つかもしれません

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

編集:私はそれが実際にあると思います

center + 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 に答える