Allerdings, wenn ich die direkt so benutze, und dann eine Kugelkoordinate -> Kartesische Koordinate -> Kugelkoordinate umrechne, ist das endergebnis oft anders als die ursprünglichen koordinaten.. (manchmal nur z.B. -11 statt 349, manchmal aber auch was komplett verkehrtes)
Code:
function SphereCoordinateToVector(X, Y:Single): TVertex;
begin
X:=X * PIdiv180;
Y:=Y * PIdiv180;
Result.X:=sin(X)*cos(Y);
Result.Y:=sin(X)*sin(Y);
Result.Z:=cos(X);
end;
function VectorToSphereCoordinate(V: TVertex; ConverToDeg:Boolean=true): TVector2D;
var
sRoot:Single;
begin
sRoot:=Sqrt(Sqr(V.X)+Sqr(V.Y));
if sRoot =0then
sRoot:=0.000000001;
if V.Y >=0then
Result.Y:=Arccos(V.X/ sRoot)
else
Result.Y:=PImul2 -Arccos(V.X/ sRoot);
Result.X:=PIdiv2 -ArcTan(V.Z/ sRoot);
if ConverToDeg thenbegin
Result.X:=Result.X* AngdivPI;
Result.Y:=Result.Y* AngdivPI;
end;
end;
Wenn man nun hier:
Code:
X:=[..];
Y:=[..];
V:=SphereCoordinateToVector(X, Y);
K:=VectorToSphereCoordinate(V);
für X = 257 und Y = 125 einsetzt, kommt bei K raus: X = 103, Y = 305.
Also wäre X eigentlich X = 360 - K.X und Y = Y - 180.
Und da gibt es ganz viele fälle... weiß jemand wie da die regel ist? So vonwegen If X > 0 then...
Tja das liegt daran, dass die Koordinaten in Rad von -Pi bis +Pi gehen (also -180° bis +180°), bei Dir von 0 bis 2Pi. -11 entspricht gradmäßig der 349, auch die anderen Koordinaten sind korrekt (257+103=360). Du musst also hinterher noch 'normieren'. Du musst also entscheiden, in welchem Quadrant die ursprüngliche Koordinate liegt und dann 360 addieren/subrtrahieren, bis es passt.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Tja das liegt daran, dass die Koordinaten in Rad von -Pi bis +Pi gehen (also -180° bis +180°), bei Dir von 0 bis 2Pi. -11 entspricht gradmäßig der 349, auch die anderen Koordinaten sind korrekt (257+103=360). Du musst also hinterher noch 'normieren'. Du musst also entscheiden, in welchem Quadrant die ursprüngliche Koordinate liegt und dann 360 addieren/subrtrahieren, bis es passt.
Jep, genau... nur, das "bis es passt" ist das was noch probleme macht... ich hab bisher nich wirklich ne regel gefunden nach der ich was addieren/subtrahieren muß.. immer wenn ich dachte ich hab es, kam wieder nen fall wo es nich zutraf etc..
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Aya hat geschrieben:
für X = 257 und Y = 125 einsetzt, kommt bei K raus: X = 103, Y = 305. Also wäre X eigentlich X = 360 - K.X und Y = Y - 180.
Wenn ich das richtig sehe, ist X bei dir der
Zitat:
θ (Polarwinkel) ist der Winkel zwischen der positiven z-Achse und r, gezählt von 0 bis π (0° bis 180°)
Eigentlich normiert deine Funktion also (zumindest bei diesem Beispiel) nur den Wert, weil ein Polarwinkel > 180° führt zu einer Operation, die auch mit 360° minus Polarwinkel als Polarwinkel (praktisch eine Spiegelung des Polarwinkels θ an der Y-Achse) und dafür einer größeren Drehung um die Y-Achse mit dem Azimutwinkel durchgeführt werden könnte. Dabei muss der Azimutwinkel φ dann natürlich eine 180°-Drehung vollführen. Wenn er dann größer als 360° ist, muss man diese wieder von ihm subtrahieren, um ihn ins Intervall [0°..360°) zu bekommen und es entsteht die Formel Y = Y + 180° - 360° = Y - 180°.
Dh. eigentlich beschreiben Eingabe und Ausgabe den gleichen Punkt, nur die Ausgabe ist konform zur Aussage in WP, dass der Polarwinkel auf [0°..180°) definiert ist. Folglich würde es wahrscheinlich Sinn machen, alle Koordinaten vor Verwendung einmal durchlaufen zu lassen, um sie so zu normieren.
Hoffe, dass war nicht ganz unverständlich und ein bisschen hilfreich
mhh... aber wenn ich z.B. 305, statt 125 bekomme, ist es zwar nur um 180° verdreht, zeigt aber dadurch nicht auf den selben punkt der kugel, sondern doch genau auf den auf der gegenüberliegenden seite..
Ich hab es eben auch mal probiert die werte erst einmal durchzujagen um sie zu normieren, aber selbst dann gab es noch unterschiede (z.B. bei X = 180, Y = 36 wurde zu X = 180, Y = 216 -> 180 verschoben).
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Aya hat geschrieben:
mhh... aber wenn ich z.B. 305, statt 125 bekomme, ist es zwar nur um 180° verdreht, zeigt aber dadurch nicht auf den selben punkt der kugel, sondern doch genau auf den auf der gegenüberliegenden seite..
Du musst überlegen, dass ja nicht nur der Azimutwinkel sich verändert hat, sondern auch der Polarwinkel. und du kannst mit einem Polarwinkel 0 bis 180° alle Kugelkoordinaten darstellen, wenn der Azimutwinkel 0 bis 360° umfasst. Hier ist der Polarwinkel die Drehung um die Z-Achse. Wenn du dir mal vorstellst, dass du 360° um Y rotieren kannst, siehst du vielleicht, dass dir 180° um Z langt, um alle Punkte beschreiben zu können.
Zitat:
Ich hab es eben auch mal probiert die werte erst einmal durchzujagen um sie zu normieren, aber selbst dann gab es noch unterschiede (z.B. bei X = 180, Y = 36 wurde zu X = 180, Y = 216 -> 180 verschoben).
Das sieht auf den ersten Blick natürlich unlogisch aus, ist aber genau was ich gesagt habe, wenn die 180° beim Ergebnis in Wirklichkeit 0° sind. Das Problem hier ist, dass der Polareingabewinkel θ auch nicht auf [0..180°] definiert ist, sondern auf [0..180°), sprich die 180° sind nicht mehr in der Definitionsmenge.
Mal generell gesagt, müssten daher alle Kugelkoordinaten so normiert werden (egal ob manuell oder durch die Transformationen):
Code:
if Eingabe.X >=180then// liegt außerhalb der Definition
begin
Eingabe.X=360-Eingabe.X;// spiegelt den Polarwinkel an 360°=0°
Eingabe.Y:= Eingabe.Y+180;// dreht den Azimutwinkel passend dazu
if Eingabe.Y > 360then// falls er die Definitionsmenge verlässt
Eingabe.Y:= Eingabe.Y-360;// holen wir ihn "zurück"
end;
MfG
Zuletzt geändert von WhiteHunter am Di Jan 16, 2007 16:16, insgesamt 1-mal geändert.
man könnte auch die arccos2 aus math verwenden, die rechnet y,x koords in einen winkel um (richtiger Quadrant). Also Polar->Karth, kann aber auch bei der implementierung von Kugelkoords praktisch sein. Achtung y muss <>0 sein, und die Paramreihenfolge war afair y,x
Mitglieder in diesem Forum: Google [Bot] und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.