Seite 1 von 1

kreis und punkt object für pygame

Verfasst: Samstag 6. Dezember 2008, 00:57
von nuss
ein kreisobject und ein punkt object für pygame
http://paste.pocoo.org/show/94071/

Verfasst: Samstag 6. Dezember 2008, 12:23
von 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.

Verfasst: Samstag 6. Dezember 2008, 15:32
von nuss
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.

Verfasst: Samstag 6. Dezember 2008, 16:43
von DeJe
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

Verfasst: Montag 8. Dezember 2008, 12:47
von nuss
@DeJe:
Funzt so leider nicht, weil get_degree dann nichtmehr mit get_cordinate uebereinstimmt

Verfasst: Dienstag 9. Dezember 2008, 11:19
von DeJe
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