Verfasst: Donnerstag 9. Juli 2009, 22:19
Ja; was denn auch sonst 

Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Die Idee ist, anders zu zählen. Nicht die Anzahl der Schnittpunkte der Kanten mit dem Strahl ist interessant, sondern es wird gezählt, wie oft der Polygonzug die Seite des Strahls wechselt.
Du musst schon genau schreiben, was Dir nicht gefällt. Abgesehen davon ist dies nur ein Modul welches wo anders benutzt werden soll, dann wird daraus auch OOP.hendrikS hat geschrieben:Dein Code macht aber immer noch den Eindruck als hättest Du das Prinzip von OOP nicht wirklich verstanden. Auch die __ ändern da nichts. Hat auch so kleines bisschen Javasmell.
Das stimmt so nicht. Der Klassenname ist aussagekräftig und fängt mit einem großen Buchstaben an alles andere fängt mit einem kleinen Buchstaben an. Die Namen habe ich aus dem Algorithmus hergeleitet(Siehe Link) und sind auch aussagekräftig gewählt. Gearbeitet wird mit Übergabe von Argumenten und Rückgabewerten, was ja die Kapselung, die OOP mitunter ausmacht unterstreicht.Leonidas hat geschrieben:Das sind alles zusammengewürfelte Funktionen mit hässlichen, nicht PEP8-konformen Namen die aus keinem sinnvollen Grund in einer Klasse sind. So eine Struktur zum aufsammeln von Funktionen gibt es in Python auch, nennt sich Modul.
Die Indexerei ist unschön, aber leider fällt mir da zur Zeit nix besseres ein. Ich habe mal auf Kosten der Performance den Code lesbarer gemacht.Leonidas hat geschrieben:Auch der restliche Code mit der rumindexerei sieht auch nicht sonderlich klar aus. Ein erster Blick auf den Code sagt "Hä?" und das ist genau das was nicht passieren sollte.
Code: Alles auswählen
def is_point_in_polygon(point, polygon):
def helper_fast(...):
...
def helper_slow(...):
...
return helper_fast(...) and helper_slow(...)
def test_polygon():
point1 = np.array([[4], [4]])
poly1 = np. array([[3, 5, 5, 3, 3], [3, 3, 5, 5, 3]])
...
print "Is the point ... within polygon ... ?"
if is_point_in_polygon(point1, poly1):
print "Yes"
else:
print "No"
Der Klassenname ist Blödsinn: erklär mir mal was eine Instanz von "Pointtests" darstellen soll? Es hat keinen *semantischen* Wert (davon abgesehen würde man Klassen im Singular benennen, denn Klassen gibt es eine, aber mehrere Objekte einer Klasse. PEP8 sagt auch, dass man da für Namen CamelCase verwendet). Alles andere fängt mit Kleinbuchstaben an, aber ist camelCase, wo PEP8 doch gerade names_with_underscores sagt. Außerdem ist eine Klasse dazu da Zustand zu kapseln (so dass man eben nicht ständig den Polygon mitgeben muss) - du kapselst dort keinen interessanten Zustand sondern hast halt einfach eine Reihe von Funktionen, die komisch benannt sind und sinnloserweise in einer unnötigen Klasse stecken.feldmann_markus hat geschrieben:Das stimmt so nicht. Der Klassenname ist aussagekräftig und fängt mit einem großen Buchstaben an alles andere fängt mit einem kleinen Buchstaben an. Die Namen habe ich aus dem Algorithmus hergeleitet(Siehe Link) und sind auch aussagekräftig gewählt. Gearbeitet wird mit Übergabe von Argumenten und Rückgabewerten, was ja die Kapselung, die OOP mitunter ausmacht unterstreicht.
`point_is_on_line` oder `is_on_line` und `is_in_polygon` oder `in_polygon`.feldmann_markus hat geschrieben:Wie hättest Du das denn sonst formuliert
Ja. Eine Klasse soll ein *Objekt* beschreiben, man sollte es nicht als schlichten Namensraum missbrauchen.feldmann_markus hat geschrieben:Also wäre an dieser Stelle ein Modul ohne Klasse mit nur Funktionen ausreichend ?
Es wurde nie gesagt, dass sie unverstaendlich sind, sondern dass sie nicht PEP8 konform sind. Demnach sollten sie ``check_point_is_on_line`` (oder noch besser: ``is_on_line(point)``) und ``check_bounds()`` heissen.feldmann_markus hat geschrieben:Was ist an den Namen <_checkPointIsOnLine()> und <_checkbounds()> nicht verständlich ?
Ja, wenn man keine Funktionalität von Klassen nutzt, dann ist das ein gutes Indiz dafür, dass man keine Klassen braucht um das Problem zu lösen.feldmann_markus hat geschrieben:Also wäre an dieser Stelle ein Modul ohne Klasse mit nur Funktionen ausreichend ?
``point_is_on_line`` etwa...feldmann_markus hat geschrieben:Wie hättest Du das denn sonst formuliert ?