Вращающееся тело из сферических координат - PullRequest
4 голосов
/ 12 марта 2011

Можно ли вращать тело, вершины которого определены в сферических координатах.В настоящее время я работаю над проектом коллажа в VHDL и рассказываю о вращающемся додекаэдре и представлении поверх VGA.

Я применил модель камеры-обскуры уравнения, и для этого потребовалось всего два вычисления sin / cos и два умножения на вершину,Я просто думал о вращении вокруг 3-й оси, используя 3 шага по двум углам, но я не могу найти правильные уравнения, и даже если это возможно.

Редактировать

Я думаю, что понял.

Вращение по 3-й оси, которая находится в том же направлении, что и камера, - это просто 2D-преобразование координат камеры, когда вы их вычисляете.Это означает, что для вращения по 3 осям (хорошо, две оси и один наклон) вам необходимо применить всего 4 вычисления sin / cos и 4 умножения.Если кто-то придумал что-нибудь получше, смело отвечайте.

Ответы [ 2 ]

8 голосов
/ 12 марта 2011

Вы можете вращаться вокруг оси y, изменяя θ, и вращаться вокруг оси z, изменяя φ.Однако вращение вокруг оси x немного сложнее.

Один простой способ - преобразовать все в координаты catesian, выполнить вращение и преобразовать обратно.

Уравнения для (x, y, z) (сферически-декартовы) равны

x = r sin θ cos φ
y = r sin θ sin φ
z = r cos θ

Уравнения вращения (x, y, z) к новым точкам (x ', y', z ') вокруг x-оси на угол α равны

x' = x
   = r sin θ cos φ
y' = y cos α - z sin α
   = (r sin θ sin φ) cos α - (r cos θ) sin α
z' = y sin α + z cos α
   = (r sin θ sin φ) sin α + (r cos θ) cos α

Уравнения для (r, θ, φ) (декартово-сферические) равны

r' = sqrt(x'<sup>2</sup> + y'<sup>2</sup> + z'<sup>2</sup>)
   <b>= r</b>
θ' = cos<sup>-1</sup>(z'/r')
   <b>= cos<sup>-1</sup>(sin θ sin φ sin α + cos θ cos α)</b>
φ' = tan<sup>-1</sup>(y'/x')
   <b>= tan<sup>-1</sup>(tan φ cos α - cotan θ sin α sec φ)</b>

Не знаю, есть лиэто способ уменьшить это дальше, но это должно сработать.

5 голосов
/ 08 сентября 2011

Надеюсь, это будет кому-то полезно в будущем, но в приведенном выше ответе есть небольшая ошибка. Должно быть:

φ '= tan-1 (y' / x ') = tan-1 (tan φ cosα - котан θ sinα сек φ)

У меня нет точек репутации, чтобы опубликовать это в комментарии, но я подумал, что это будет полезно.

...