Seite 1 von 1
atan2 mit sympy
Verfasst: Dienstag 14. März 2023, 13:57
von Feedback1000
Hallo.
Meines Erachtens müsste atan2() in sympy doch nur positive rad ausgeben, oder?
Code: Alles auswählen
import sympy as sp
dx, dy = all_symbols = sp.symbols('dx dy')
sub = {
dx: -12,
dy: 42,
}
t = sp.atan2(dx, dy)
print(t)
print(t.subs(sub))
print(sp.N(t.subs(sub)))
Warum macht mein code dann das, was es macht?!
Hoffe, dass jemand von euch meinen mathematischer Knoten im Kopf lösen kann.
Danke
Re: atan2 mit sympy
Verfasst: Dienstag 14. März 2023, 14:10
von Sirius3
Wie kommst Du darauf, dass atan2 von 0 bis 2 pi geht? -pi bis pi wäre richtiger.
Re: atan2 mit sympy
Verfasst: Dienstag 14. März 2023, 14:24
von Feedback1000
Habe mir sagen lassen (und daraus gefährliches Viertelwissen abgeleitet), dass, wenn man tan2 verwendet, die Quadrantenabfrage überflüssig ist.
Re: atan2 mit sympy
Verfasst: Dienstag 14. März 2023, 14:30
von Sirius3
Ist es ja auch. Aber Du hast immer noch die Freiheit, den Range festzulegen.
Re: atan2 mit sympy
Verfasst: Dienstag 14. März 2023, 17:34
von Feedback1000
Was genau meinst du mit Range? Hat atan2 einen Parameter, den ich nicht kenne?
Alternativ müsste ih ja sonst immer eine Abfrage bei Umrechnen machen, oder?
(Quick 'n dirty)
Code: Alles auswählen
import sympy as sp
points = [
{'name': 'NW', 'x': 110, 'y': 210},
{'name': 'NO', 'x': 100, 'y': 205},
{'name': 'SO', 'x': 95, 'y': 195},
{'name': 'SW', 'x': 115, 'y': 190},
]
t_NW_NO = sp.atan2(points[0]['x'] - points[1]['x'], points[0]['y'] - points[1]['y'])
t_NW_NO_rad = sp.N(t_NW_NO)
t_NW_NO_gon = sp.N(t_NW_NO_rad * 200 / sp.pi)
print(f't_NW_NO = {t_NW_NO_rad} rad = {t_NW_NO_gon} gon')
t_NO_NW = sp.atan2(points[1]['x'] - points[0]['x'], points[1]['y'] - points[0]['y'])
t_NO_NW_rad = sp.N(t_NO_NW)
t_NO_NW_gon = sp.N(t_NO_NW_rad * 200 / sp.pi)
print(f't_NO_NW = {t_NO_NW_rad} rad = {t_NO_NW_gon} gon')
angles_gon = [t_NW_NO_gon, t_NO_NW_gon]
for angle in angles_gon:
if angle < 0:
print(f'SOLL: {angle + 400}')
else:
print(f'SOLL: {angle}')
Re: atan2 mit sympy
Verfasst: Dienstag 14. März 2023, 18:30
von __deets__
Das meint, dass es eine Festlegungssache ist. atan2 kann auf verschiedene Arten implementiert werden, inklusive der Richtung, die als 0 interpretiert wird - east counter-clockwise, north-clockwise etc. Das ist also Implementierungssache, und dein Wunsch, und die Implementierung von sympy stimmen eben nicht ueberein. Entweder rechnest du das trivial um ( if v < 0: v += 2pi, wenn ich mich gerade nicht vertue), oder du definierst die eben selbst, wie du sie brauchst. Ist ja kein Hexenwerk.
Re: atan2 mit sympy
Verfasst: Dienstag 14. März 2023, 18:37
von Feedback1000
Ok. also kann es in numpy, oder math schon wieder ganz anders definiert sein?
Re: atan2 mit sympy
Verfasst: Dienstag 14. März 2023, 18:50
von __deets__
So weit ich gesehen habe, ist es da ueberall +/- pi. Also kongruent. Was in meinen Augen sinnvoll ist, weil das Vorzeichen sofort die Richtung klar macht. Aber theoretisch ja.