Как вращаться вокруг оси Z в 3D - PullRequest
4 голосов
/ 16 января 2010

Я в основном разработчик 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?
}

Помощь очень ценится.

Ответы [ 4 ]

5 голосов
/ 26 января 2010

Если вы вращаетесь вокруг оси z, вы оставляете свою координату z фиксированной и меняете свои координаты x и y. Ваш первый пример кода - это то, что вы ищете .

Чтобы вращаться вокруг оси x (или осей y), просто замените x (или y) на z. Используйте Cos на любой оси, которую хотите установить на 0 градусов; выбор произвольный.

Если то, что вы на самом деле хотите, - это орбита объекта вокруг точки в трехмерном пространстве, вам потребуется два угла для описания орбиты: ее угол места и его угол наклона . См. здесь и здесь .
Для справки, эти уравнения (где θ и φ - ваши углы)

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

1 голос
/ 16 января 2010

Если вы вращаетесь вокруг оси Z, то вы просто делаете свой первый код и оставляете координату Z как есть.

1 голос
/ 16 января 2010

Я бы выбрал два единичных перпендикулярных вектора v, w, которые определяют плоскость, в которой нужно вращаться, а затем перебрал угол и выбрал правильное соотношение этих векторов v и w, чтобы построить ваш вектор p = av + bw.

Более подробная информация идет.

EDIT:

Это может помочь

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

РЕДАКТИРОВАТЬ: Я думаю, что это на самом деле

центр + грех (угол) * v * радиус1 + cos (угол) * ш * радиус2

Здесь v и w - ваши единичные векторы для круга.

В 2D они были (1,0) и (0,1).

В 3D вам нужно будет их вычислить - зависит от ориентации плоскости.

Если вы установите радиус 1 = радиус 2, вы получите круг. В противном случае вы должны получить эллипс.

0 голосов
/ 20 января 2010

Если вы просто хотите, чтобы орбита происходила в наклонной плоскости, и не возражали против того, чтобы она была эллиптической, вы можете просто сделать что-то вроде z = 0.2*x + 0.2*y или любую понравившуюся вам комбинацию после того, как вы определили координаты x и y.

...