Seite 1 von 1
Programm zur Berechnung der Schnittpunkte von zwei Kreisen
Verfasst: Dienstag 15. Dezember 2009, 21:15
von LP640
hallo
ich bin gerade dabei ein programm zu programmieren, das die Schnittpunkte von zwei Kreisen berechnen soll.
folgende werte sind gegeben:
also x und y sind die koordinaten des kreises und r der radius.
wenn ich das so ausrechne ist das kein problem:
(x – x1)²+(y–y1)²-r1²=(x–x2)²+(y–y2)²-r2²
dann nach x oder y auflösen, einsetzen, pq-formel und so weiter.
aber wie kann ich das jetzt in python umsetzen???
hat jemand ne idee???
mfg
LP640
Verfasst: Dienstag 15. Dezember 2009, 21:33
von CM
Eine Klasse "Circle" mit einer Methode "intersect" erstellen. Und in der Methode steht die Formel.
Sorry, aber was erwartest Du? Das wir doch zeigen wie man das berechnet?
Gruß,
Christian
Verfasst: Dienstag 15. Dezember 2009, 21:33
von numerix
Du nimmst dir ein Blatt Papier und einen Stift, formst das Ganze so um, dass x (x-Wert eines Schnittpunktes) allein auf einer Seite steht und auf der anderen Seite der Gleichung ein Term, den du mit den Mittelpunkten und Radien der beiden Kreise füttern kannst.
Verfasst: Dienstag 15. Dezember 2009, 22:03
von LP640
Du nimmst dir ein Blatt Papier und einen Stift, formst das Ganze so um, dass x (x-Wert eines Schnittpunktes) allein auf einer Seite steht und auf der anderen Seite der Gleichung ein Term, den du mit den Mittelpunkten und Radien der beiden Kreise füttern kannst.
genau das habe ich bereits gemacht, war mir aber nicht genau sicher, wies hier weitergeht:
(ich habe x1 und y1 durch a1 und b1 ersetzt...)
-2*x*a1-s*y*b1+2*x*a2+2*y*b2=-a1**2-b1**2+r1**2+a2**2+b2**2-r2**2
so jetzt müsste ich ja eigentlich durch -2*a1 und -2*b1 und 2*a2 und 2*b2 teilen und dann das y auf die andre seite bringen oder???
mfg
LP640
Verfasst: Dienstag 15. Dezember 2009, 22:47
von gkuhl
sympy?
Verfasst: Dienstag 15. Dezember 2009, 22:55
von numerix
LP640 hat geschrieben:genau das habe ich bereits gemacht, war mir aber nicht genau sicher, wies hier weitergeht:
(ich habe x1 und y1 durch a1 und b1 ersetzt...)
-2*x*a1-s*y*b1+2*x*a2+2*y*b2=-a1**2-b1**2+r1**2+a2**2+b2**2-r2**2
Das ist mir zu mühselig zu entziffern ...
Im Grunde ist das kein Python-Problem, sondern ein rein mathematisches Problem: Kreisgleichungen gleichsetzen, Schnittgerade berechnen, Schnittgerade mit einem der Kreise schneiden => Schnittstellen.
Die Formel musst du entweder selbst entwickeln, im Netz suchen, ob das schon einer für dich erledigt hat oder darauf hoffen, dass es hier im Forum jemand für dich erledigt.

Verfasst: Dienstag 15. Dezember 2009, 23:21
von Gabelmensch
Du kannst es auch numerisch loesen, von beiden Kreisen die Umfangskoordinaten von z.B. 1° berechnen bezogen auf einen Absoluten Punkt. Und dann die (oder der!) Punkt(e), die sich am naechsten sind als Ergebnis hernehmen.
Verfasst: Mittwoch 16. Dezember 2009, 09:20
von CM
Gabelmensch hat geschrieben:Du kannst es auch numerisch loesen
Und wenn Dir eine Kanone für den Spatz nicht reicht, kannst Du auch weiter aufrüsten ...
Vielleicht bin ich heute etwas martialisch drauf?
Verfasst: Mittwoch 16. Dezember 2009, 10:10
von numerix
CM hat geschrieben:Gabelmensch hat geschrieben:Du kannst es auch numerisch loesen
Und wenn Dir eine Kanone für den Spatz nicht reicht, kannst Du auch weiter aufrüsten ...
Ich hätte noch eine Idee: Erstelle eine Graphik (z.B. mit PIL) und zeichne die beiden Kreise mit roter Farbe auf einen blauen Hintergrund, wobei die Farbe der einzelnen Pixel der Kreise durch XOR-Verknüpfung von Hintergrundfarbe und roter Zeichenfarber gebildet wird. Dann erhältst du zwei violette Kreise mit zwei schwarzen Schnittpunkten. Danach liest du die Farbe aller Pixel aus und suchst die schwarzen Pixel ...
Verfasst: Mittwoch 16. Dezember 2009, 10:20
von EyDu
numerix hat geschrieben:Ich hätte noch eine Idee: Erstelle eine Graphik (z.B. mit PIL) und zeichne die beiden Kreise mit roter Farbe auf einen blauen Hintergrund, wobei die Farbe der einzelnen Pixel der Kreise durch XOR-Verknüpfung von Hintergrundfarbe und roter Zeichenfarber gebildet wird. Dann erhältst du zwei violette Kreise mit zwei schwarzen Schnittpunkten. Danach liest du die Farbe aller Pixel aus und suchst die schwarzen Pixel ...
Das finde ich aber doch ein wenig kompliziert. Ich würde den Hintergrund als schwarz wählen und die Kreise in grün, bzw. rot, malen. Die Schnittpunkte sind dann wunderbar pink.
Verfasst: Mittwoch 16. Dezember 2009, 11:12
von sma
Auf die Frage, wie man die Formel in Python umsetzt... so könnte man sie repräsentieren:
Code: Alles auswählen
class Var:
def __init__(self, name): self.name = name
def __str__(self): return self.name
class Add:
def __init__(self, left, right): self.left, self.right = left, right
def __str__(self): return "(%s + %s)" % (self.left, self.right)
class Sub:
def __init__(self, left, right): self.left, self.right = left, right
def __str__(self): return "(%s - %s)" % (self.left, self.right)
class Squared:
def __init__(self, val): self.val = val
def __str__(self): return "(%s)**2" % self.val
class Eq:
def __init__(self, left, right): self.left, self.right = left, right
def __str__(self): return "%s = %s" % (self.left, self.right)
print Eq(
Sub(
Add(
Squared(Sub(Var("x"), Var("x1"))),
Squared(Sub(Var("y"), Var("y1")))),
Squared(Var("r1"))),
Sub(
Add(
Squared(Sub(Var("x"), Var("x2"))),
Squared(Sub(Var("y"), Var("y2")))),
Squared(Var("r2"))))
Die Darstellung ließe sich noch verbessern: Man kann Klammern unterdrücken, wenn der geklammerte Ausdruck nicht weniger stark bindet als der eigene Ausdruck. Außerdem könnte man die hochgestellte 2 benutzen, wenn man nicht `__str__` benutzen würde. Wie auch immer, nun könnte man ein Programm schreiben, was den Eq-Term systematisch umformt. Typisches Problem, was man gerne mal im Informatik-Studium als Teil einer KI-Vorlesung macht (jedenfalls war das bei uns noch so, als KI ein Thema war). Alternativ kann man eine Auswertungsfunktion schreiben und einfach verschiedene Werte ausprobieren, bis man die richtigen findet.
Stefan
Verfasst: Mittwoch 16. Dezember 2009, 14:18
von LP640
hi
so ich habs jetzt irgendwie geschafft
aber ich habe bezüglich der idee von numerix noch eine frage und zwar ob man auch bei xturtle die farbe der pixel auslesen kann???
mfg
LP640
Verfasst: Mittwoch 16. Dezember 2009, 14:19
von Dav1d
Verfasst: Mittwoch 16. Dezember 2009, 14:34
von EyDu
LP640 hat geschrieben:aber ich habe bezüglich der idee von numerix noch eine frage und zwar ob man auch bei xturtle die farbe der pixel auslesen kann???
Du hast doch hoffentlich nicht numerix Lösung umgesetzt, oder? Auch wenn er es nicht explizit geschrieben hat, aber der Ansatz ist sicher nicht ernst gemeint.
Verfasst: Mittwoch 16. Dezember 2009, 14:48
von mkesper
Das glaub' ich jetzt nicht....lol!
Verfasst: Mittwoch 16. Dezember 2009, 17:11
von Leonidas
EyDu hat geschrieben:Du hast doch hoffentlich nicht numerix Lösung umgesetzt, oder? Auch wenn er es nicht explizit geschrieben hat, aber der Ansatz ist sicher nicht ernst gemeint.
Ich warte sehnsüchtig auf Ironie-Tags...
sma: Hmm, irgendwie hab ich schon fast erwartet, eine lispige Lösung zu sehen. Wurde nicht enttäuscht
