Mathe Problem: karthesisch zu polar O_o

cycovery

Erfahrenes Mitglied
schon wieder n Matheproblem o_O Herausforderung fuer alle Peiler in dem Gebiet . . . ich such naemlich schon die ganze Zeit nach dem Fehler . . .

Ich programmier grad nen Shader der spherical reflectionamapping koennen soll . . . Jedenfalls muss ich da karthesische koordinaten in Polare umwandeln - oder besser gesagt ich brauche eigentlich lediglich den Winkel der polarkoordinaten.

Meine Formel sieht so aus:

(atan((-ray.z)/(ray.x))+PI*(1-step(ray.x,0))*sign(-ray.z))/(2*PI)

Die formel hab ich von hier:

http://de.wikipedia.org/wiki/Polarkoordinaten#Umrechnung_zwischen_den_Koordinatensystemen

die funktion step(a,x) gibt (x>=a)? 1:0 zurueck
die funktion sign(x) gibt -1 fuer x<0 , 1 fuer x>0 und 0 fuer x=0 zurueck


in meiner formel benutze ich -ray.z weil mein koordinatensystem aus xz besteht und die z Achse, verglichen mit dem koordinatensystem bei wikipedia, gegengesetzt zur (wiki-) y Achse steht. Die X achsen sind gleich . . .




Ich hab echt langsam kopfschmerzen . . . bin echt fuer jede Hilfe dankbar!!


//edit: das /2*PI am schluss ist einfach um das ergebnis durch 360 grad zu teilen um einen Wert zwischen 0 und 1 zu bekommen
 
Zuletzt bearbeitet:
... und wo genau ist das Problem?
Code:
Math.atan(-ray.z / ray.x); // im ersten Quadranten
Math.atan(-ray.z / ray.x) + Math.PI; // im zweiten und dritten Quadranten und
Math.atan(-ray.z / ray.x) + Math.PI * 2; // im vierten
Die Quadranten findest Du auch recht einfach heraus:
Code:
x > 0 && z < 0  --> erster
x < 0           --> zweiter, dritter
x < 0 && z > 0  --> vierter

Wenn Du das Ergebnis im Gradmaß brauchst, kannst Du es hinterher mit a * 180 / PI umwandeln.

Gruß

EDIT: Soweit ich das sehen kann, macht Deine Formel genau das selbe. Was genau funktioniert nun daran nicht?
.
 
Zuletzt bearbeitet:
Dachte ich eigentlich auch . . .

hab jetzt per zufall das (1-step(ray.x,0)) aus der Formel rausgeloescht und nun funktioniert es . . . ich hab aber nicht die geringste ahnung wieso o_O


Naja - Danke dir trotzdem vielmals!
 
Bist du dir sicher, dass das funktioniert.

Wenn ich z.B.
ray.x = 1 und
-ray.z = 1
in die Formel (ohne step) einsetzte kommt da raus: 5/4 Pi statt 1/4 Pi (was 45 Grad wäre). Oder ist bei dir 45 Grad woanders als bei mir? Ich hätte vorgeschlagen, die Ausgangsformel zu nehmen und falls diese bei einen Wert kleiner 0 liefert, 1 dazuaddieren.
 

Neue Beiträge

Zurück