ein kreisobject und ein punkt object für pygame
http://paste.pocoo.org/show/94071/
kreis und punkt object für pygame
Also man *könnte* argumentieren, dass ein Punkt ein Kreis mit Radius Null ist, aber dass wäre IMHO schon arg konstruiert. Das ein Kreis ein Punkt ist, finde ich irgendwie nicht. Die Vererbung ist an der Stelle IMHO also nicht angebracht. Ein Kreis *besitzt* einen Mittelpunkt. Das ist aber Komposition und keine Vererbungsbeziehung.
`collidepoint()` lässt sich wesentlich kürzer schreiben:
Und `Circle2D.get_degree()` gibt entweder `None` zurück oder führt zu einem `RuntimeError` weil der Aufrufstapel das Rekursionslimit erreicht.
`collidepoint()` lässt sich wesentlich kürzer schreiben:
Code: Alles auswählen
def collidepoint(self, point):
return self.get_distance(point) <= self.r
stimmt, hab get_degree und get_distance angepasst.
http://paste.pocoo.org/show/94137/
für das erste Object ist mir leider kein guter name eingefallen ausser Point.
Eventuell könnte ich auch den Circle2d einfach weglassen, die Point2d funktion in Circle umbenenen und noch collidepoint mit einbauen.
http://paste.pocoo.org/show/94137/
für das erste Object ist mir leider kein guter name eingefallen ausser Point.
Eventuell könnte ich auch den Circle2d einfach weglassen, die Point2d funktion in Circle umbenenen und noch collidepoint mit einbauen.
Ich hätte noch einen Vorschlag für get_degree.
Code: Alles auswählen
def get_degree(self, (x, y)):
d = math.degrees( math.acos(x / math.sqrt(x**2 + y**2)))
return 360 - d if y < 0 else d
Warum das?
Die Funktion berechnet aus einem (gerichtetem) Vektor den Winkel von 0°-360°.
Ah, deine Funktion nimmt die Differenz der Punkte, das habe ich übersehen.
also müßte es so lauten:
Die Funktion berechnet aus einem (gerichtetem) Vektor den Winkel von 0°-360°.
Ah, deine Funktion nimmt die Differenz der Punkte, das habe ich übersehen.

also müßte es so lauten:
Code: Alles auswählen
def get_degree(self, (x, y)):
dx = x - self.x
dy = y - self.y
d = math.degrees( math.acos(dx / math.sqrt(dx**2 + dy**2)))
return 360 - d if dy < 0 else d