3D poolcoördinaten converteren naar cartesiaanse coördinaten

Ik heb veel gezocht naar de wiskunde achter deze conversie, en het beste dat ik tot nu toe heb kunnen bedenken is dit:

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

Voor willekeurige hoeken werkt dit prima. Waar ik problemen mee heb, is wanneer een van de rotaties 0 graden is. Bij 0 graden (of 180, of 360, of…) wordt sin() nul, wat betekent dat zowel de x- als de y-coördinaten die ik uit de bovenstaande formules haal nul zullen zijn, ongeacht wat de andere hoek is. was ingesteld op.

Is er een betere formule die onder bepaalde hoeken niet in de war raakt? Mijn zoekopdrachten hebben er tot nu toe geen gevonden, maar er moet een oplossing voor dit probleem zijn.

Bijwerken:
Na wat experimenteren ontdekte ik dat mijn grootste misverstand was dat ik aannam dat de polen van mijn sferische coördinaten verticaal waren (zoals lengte- en breedtegraad op een planeet), terwijl ze in werkelijkheid horizontaal waren (geprojecteerd op het scherm). Dit was te wijten aan het feit dat ik in de schermruimte werk (x/y toegewezen aan het scherm, z geprojecteerd in het scherm), in plaats van een traditionele 3D-omgeving, maar op de een of andere manier dacht ik niet dat dat een factor zou zijn.

De laatste formule die voor mij werkte om de polen correct te oriënteren:

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

Antwoord 1, autoriteit 100%

Uw formule is correct voor alle hoeken. Maar de namen die je de hoeken hebt gegeven, kloppen waarschijnlijk niet helemaal. Wat je “horizontale hoek” hebt genoemd, is de hellingshoek – de hoek tussen de vector en de z-as. Dus als “horizontale hoek” 0 is, dan ligt het punt op de z-as, wat betekent dat het correct is voor x en y om beide 0 te zijn. Wat je “verticale hoek” hebt genoemd, is eigenlijk de hoek in de xy vlak. Als het 0 is, dan ligt het punt in het x-z-vlak, dus y is correct ingesteld op 0.


Antwoord 2, autoriteit 100%

De juiste omrekeningsformules zijn:

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

Waar:

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

xen yzijn correct nul wanneer polarnul is (of 180, 360, enz.) omdat de verticale hoek is uitgelijnd met de verticale Z-as op die waarden. Evenzo, wanneer alphanul is (of 180, 360, enz.), wordt de horizontale hoek uitgelijnd met de X-as, dus ymoet nul zijn. En wanneer alpha90 is (of 270, 450, enz.), wordt deze uitgelijnd met de Y-as, waardoor xnul wordt.

Other episodes