2013-12-25 3 views
1

Я делал много искать по математике за это преобразование, и лучшее, что я смог придумать до сих пор это:Преобразование 3D полярных координат в декартовой координаты

x = sin(horizontal_angle) * cos(vertical_angle) 
y = sin(horizontal_angle) * sin(vertical_angle) 
z = cos(horizontal_angle) 

Для произвольных углов это прекрасно работает. Там, где у меня проблемы, когда один из вращений равен 0 градусам. При 0 градусах (или 180, или 360, или ...) sin() будет равен нулю, что означает, что координаты x и y, которые я получаю из приведенных выше формул, будут равны нулю, независимо от того, какой другой угол был установлен.

Есть ли лучшая формула, которая не испортит определенные углы? Мои поиски до сих пор не нашли одного, но решение этой проблемы должно быть решено.

Обновление: После нескольких экспериментов, я обнаружил, что мое главное недоразумение было то, что я предполагал полюса моих сферических координатах, чтобы быть вертикальными (например, широты и долготы на планете), в то время как они были фактически горизонтально (проецируется в экран). Это было связано с тем, что я работаю в пространстве экрана (x/y отображается на экране, z проецируется на экран), а не в традиционную трехмерную среду, но почему-то не думал, что это будет фактором.

Окончательная формула, которая работала для меня, чтобы полюса расположены правильно:

x = cos(horizontal_angle) * sin(vertical_angle) 
y = cos(vertical_angle) 
z = sin(horizontal_angle) * sin(vertical_angle) 
+0

Ваш 'z' должен зависеть только от вертикального угла, а не от горизонтали. – RBarryYoung

ответ

3

Ваша формула верна для всех углов. Но имена, которые вы указали на углы, вероятно, не совсем правильные. То, что вы назвали «горизонтальным углом», - угол наклона - угол между вектором и осью z. Так что, если «горизонтальный угол» равен 0, то точка лежит на оси z, что означает, что она правильна для x и y как 0. То, что вы назвали «вертикальным углом», на самом деле является углом в xy самолет. Если 0, то точка лежит в плоскости х, так что у правильно установлен на 0.

1

правильные формулы преобразования являются:

x = r * sin(polar) * cos(alpha) 
y = r * sin(polar) * sin(alpha) 
z = r * cos(polar) 

Где:

r  is the Radius 
alpha is the horizontal angle from the X axis 
polar is the vertical angle from the Z axis 

x и y являются нулевыми, когда polar равно нулю (или 180, 360 и т. Д.), Поскольку вертикальный угол выравнивается по вертикальной оси Z по этим значениям. Аналогично, когда alpha равен нулю (или 180, 360 и т. Д.), Горизонтальный угол выравнивается с осью X, поэтому y должен быть равен нулю. И когда alpha составляет 90 (или 270, 450 и т. Д.), Он выравнивается с осью Y, делая x ноль.