Ich hab ein Programm geschrieben um in n-Dimensionen vom Kartesischen Koordinatensystem ins Kugelkoordinatensystem um zu rechnen
Code: Alles auswählen
import math
def toSpherical(kart, orig=None):
if orig is not None:
n = []
for p in xrange(len(kart)):
n.append(kart[p]-orig[p])
kart = n
rad = 0
for i in xrange(len(kart)):
rad += (kart[i])**2
rad = rad**0.5
angles = []
for i in xrange(len(kart)-1):
denominator = kart[i]
numerator = 0.0
for p in kart[i+1:]:
numerator += p**2
numerator = numerator**0.5
omega = math.atan(numerator/denominator)
angles.append(omega)
return [rad]+angles
def toKartesian(spherical, orig=None):
r = spherical[0]
angles = spherical[1:]
pos = []
for i in xrange(len(angles)):
angle = angles[i]
x = r * math.cos(angle)
for p in angles[:i]:
x *= math.sin(p)
pos.append(x)
last = r
for p in angles:
last *= math.sin(p)
pos.append(last)
if orig is not None:
n = []
for i in xrange(len(pos)):
n.append(pos[i] + orig[i])
pos = n
return pos
Code: Alles auswählen
>>> for i in [(1,1),(1,-1),(-1,1),(-1,-1)]:
print toKartesian(toSpherical(i))
[1.0000000000000002, 1.0]
[1.0000000000000002, 1.0]
[1.0000000000000002, -1.0]
[1.0000000000000002, -1.0]
Ich glaube das Problem liegt daran, dass das Programm immer nur einen Winkel zwischen -Pi/2 und pi/2 ausgibt.
Wenn also der Punkt rechts vom Ursprung liegt müsste man zu dem Winkel pi addieren, glaube ich.
Wenn das richtig ist wüsste ich aber nicht wie ich das in n-Dimensionen machen sollte.
Kann mir da jemand helfen?