Ich möchte eine Funktion in Python schreiben, um das Kreuzverhältnis von vier projektiven Punkten zu berechnen, und ich frage mich, ob es eine elegante und prägnante Implementierung gibt, mit unendlichen Fällen umzugehen.Berechnen des Querverhält nisses
Eine naive Implementierung des Kreuzverhältnis sieht wie folgt aus:
ratio = lambda a,b,c: (a-c)/(b-c)
cross_ratio = lambda a,b,c,d: ratio(a,b,c)/ratio(a,b,d)
Aber das schlägt fehl, wenn einer der Eingänge Infinity ist. Das sollte nicht passieren, aber wir möchten, dass die Unendlichkeiten sich gegenseitig aufheben und uns ein einfaches Verhältnis geben.
Zum Beispiel sollte das Querverhältnis von Infinity, 0, 1, -1
-1
sein.
Auch würde ich gerne Punkte als ein Verhältnis von zwei Zahlen ausgedrückt behandeln. So würde (1 1)
sein die Zahl 1
, während (1,0)
Infinity
darstellen würde, usw.
konnte mir immer mit ihm zurück zu einer Definition von Fällen und machen tun fallen, aber ich finde, dass das eine gute Gelegenheit sein gutes Design zu lernen.
Ich benutze Python 2.7 und das Sagemath-Modul. Irgendwelche Ratschläge zur Umsetzung?