kreis und punkt object für pygame

Code-Stücke können hier veröffentlicht werden.
Antworten
nuss
User
Beiträge: 53
Registriert: Donnerstag 28. August 2008, 11:36

ein kreisobject und ein punkt object für pygame
http://paste.pocoo.org/show/94071/
BlackJack

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:

Code: Alles auswählen

    def collidepoint(self, point):
        return self.get_distance(point) <= self.r
Und `Circle2D.get_degree()` gibt entweder `None` zurück oder führt zu einem `RuntimeError` weil der Aufrufstapel das Rekursionslimit erreicht.
nuss
User
Beiträge: 53
Registriert: Donnerstag 28. August 2008, 11:36

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.
DeJe
User
Beiträge: 39
Registriert: Sonntag 23. November 2008, 19:38

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
nuss
User
Beiträge: 53
Registriert: Donnerstag 28. August 2008, 11:36

@DeJe:
Funzt so leider nicht, weil get_degree dann nichtmehr mit get_cordinate uebereinstimmt
DeJe
User
Beiträge: 39
Registriert: Sonntag 23. November 2008, 19:38

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:

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
Antworten