Schnittpunkte von zwei Kreisen

Hi,

da ich derzeit mit Mathe so ein wenig auf dem Kriegsfuß stehe, hoffe ich, einer von euch kann mir helfen. Es geht um folgendes:

Ich habe ein 2D Koordinatensystem mit 2 Punkten. Gesucht ist nun eine dritte Koordinate, welche einen bestimmten Abstand zu Punkt 1 (p1) und einen anderen, aber auch bestimmten Abstand zu Punkt 2 (p2) hat.

Meine Idee war nun also, p1 und p2 als Mittelpunkte von 2 Kreisen (also k1 und k2) zu nehmen und den jeweiligen geforderten Abstand als Radius (r1 und r2).

Somit habe ich nun
k1 mit Mittelpunkt (x1,y1) und Radius r1
k2 mit Mittelpunkt (x2, y2) und Radius r2

Soweit ist das noch recht einfach ;)

Nun will ich den einen / die zwei Schnittpunkte dieser beiden Kreise berechnen. Folgende Annahme darf dabei getroffen werden:
p1 != p2
es gibt mindestens einen Schnittpunkt, da dies aus dem Anwendungsfall heraus anders gar nicht möglich wäre.

Wie kann ich nun den/die Schnittpunkt(e) berechnen? Die einzigen Anleitungen im Internet, die ich gefunden habe, haben dann immer seltsame Variablen irgendwo hergeholt oder eine merkwürdige Form gehabt, aus der ich keine Rückschlüsse auf meine Koordinaten ziehen konnte.

Das Ganze möchte ich dann, sobald ich es verstanden habe, programmiertechnisch umsetzen, es darf also ruhig unschöne Wurzelberechnungen oder so enthalten, diese müsste ich dann nur gut erklären können.
 
Hi!
Also.
seien p1,p2 Mittelpunkte 2er Kreise, deren Radien r1,r2(fuer p1,p2) beliebig sind.
Es gelte weiterhin das p1 != p2 ist.
Das bedeutet dann das die Kreise 0-2 Schnittpunkte(s1,s2) habend.
Wir setzen nun als Vorraussetzung das mindestens ein Schnittpunkt s1 existiert.

Das bedeutet das der Abstand zwischen p1 und p2 max{?,(r1+r2)} ist wobei ? element aus [0,(r1+r2)] ist.das heisst aber nicht das es einen Schnittpunkt geben muss, denn wenn p1 in p2 liegt und der radius von p1 sehr klein ist, dann scheiden sich die kreise auch nicht.

Wenn das also gegeben ist dann kannst du die Gleichungen einfach gleich setzen a la:
seien (x0,y0)Koordinaten des Mittelpunkt, und seien (x1,y1) die Koordinaten des Punkten den du berechnen willst,dann setzt du (x0,y0) einfach auf den 0-Punkt und laesst dann Cosinus oder Sinus rüberlaufen, es gibt noch andere trigonometrische Funktionen aber die kenne ich nicht.
Du kannst dann den Punkt im Koordinatensystem berechnen indem du sagst

x1 = x0 + cos(winkel zwischen der xAchse und des gezogenen Radius)*Radius
y1 = y0 + sind(winkel zwischen der xAchse und des gezogenen Radius)*Radius

Das machst du dann für beide Kreise und schaust wo die Werte identisch sind, und du hast deine Schnittpunkte.

Du solltest auch nicht vergessen das du wahrscheinlich nicht mit Einheitskreisen operierst.
Ist etwas umständlich aber der einzige Weg der mir gerade einfaellt.
mfg

sw33t
 
Hmmm,

ich habe auch hier wieder das Problem, dass ich nicht so recht weiß, was was ist.
Was wäre in deinem Beispiel (x0,y0) und was (x1,y1) ?
Ich verstehe das derzeit so, dass du sagst, ich soll die Punkte so verschieben, dass einer, nehmen wir jetzt mal p1 auf (0,0) liegt. Damit verschiebt sich ja auch p2.
Soweit richtig bisher?
Was ist nun mit "winkel zwischen der xAchse und des gezogenen Radius" gemeint?

Und kurz noch zur Erklärung:
Nein, ich benutze keine Einheitskreise und ich kann die Annahme mit mindestens ein Schnittpunkt auch treffen, da ich sozusagen meine Position berechnen will. Ich sehe in einem Bild 2 Punkte, von denen ich die Koordinaten kenne. Derzeit nutze ich noch ein vereinfachtes Modell, so dass ich derzeit noch in dem zweidimensionalen Raum rechnen kann. Da ich beide Punkte sehe, muss es also mindestens den Schnittpunkt geben, der genau auf der Kameralinse liegt.
 
Hi!
Ich habe mal was angehangen.
Ist leider nicht besonders gut, da ich gerade nur GIMP zur hand habe, und das ja nicht wirklich ein Zeichenprogramm ist.

Und ja du verschiebst die Punkte p1 und p2 aber unabhaengig voneinander auf den Nullpunkt.
Das machst du auch nur damit du einen Punkt auf dem Kreisrand hast.
Anschliessen verrechnest du das wieder mit den Originalcoordinaten ,damit du den wirklichen Punkt auf dem Kreisrand hast.
Dabei musst du aber auch aufpassen das du eine adequate schrittauswahl hast, sonst rechnest du dich bei der berechnung der Punkte auf dem Kreis zu tode,eine Implementierung eines abgewandelten zwischenwertsatzens bezoge auf die Schnittpunkte ist hierbei ueberigens auch hielfreich.
Sprich du bringst deinem Programm bei genauer zu schauen, also ein Punkt liegt ausserhalb des Kreises und der nächste drinnen, das bedeutet dann das die Kreise sich schneiden und du den schnittpunkt verpasst hast,sowas in der Art.

//edit
Das mit der Kameralinse verstehe ich nicht.
Für einen Betrachter einer 2Debene welcher beide Punkte sehen kann ist kein Platz,in einem 2D-Modell es sei denn er liegt selbst in der 2Debende und dann kannst du das alles auch einfacher handhaben.
 
Mathematisch würde ich es so machen, wie hier im zweiten Post beschrieben wurde: http://www.matheboard.de/archive/14156/thread.html
D.h. gegebene Punkte einsetzen und Gleichungssystem lösen. Allerdings ist Mathe auch nicht meine große Stärke, ich kämpfe selbst gerade mit Topologie :)
Programmiertechnisch dürfte das allerdings recht schwer werden und hier wäre eventl. eine annähernde Lösung einfacher, d.h. du läufst einen Kreis so lange ab (siehe hierzu die Definitionen der Parameter in Parameterdarstellung), bis du einen Punkt findest, der auch auf dem anderen Kreis liegt, denn dies kannst du ja einfach überprüfen, in dem du den Punkt in die Gleichung einsetzt.
 
@ sw33tlull4by:

Das mit der Linse ist auch derzeit noch ein sehr vereinfachtes Modell, das vieles noch nicht berücksichtigt.
Aber hier der Ansatz für die Vereinfachung:
Die Kameralinse zeigt in einem bestimmten Winkel zur Decke (kann ich einfach messen).
Die Linsenöffnung, also Winkel in alle Richtungen, vernachlässige ich derzeit noch und wird auch später nur angenähert.
Ich kann nun davon ausgehen, dass der Bildmittelpunkt auch genau auf die Mitte der Linse trifft, sonst wär es ja nicht der Bildmittelpunkt. Hier dürfte ich bei einer normalen Linse aber keine Verzerrung haben, also nutze ich diesen derzeit für die einfache Berechnung.
Ich habe nun einen Punkt an der Decke, von dem ich die Koordinate kenne, die Deckenhöhe und den Winkel meiner Kamera und halt ein rechtwinkliges Dreieck.
Ich kann hier also erstmal einen einfachen Strahlensatz verwenden, um die zweite Kathete zu berechnen.
An dieser Stelle gehe ich vom Raum in die Ebene. Ich projeziere einfach mal den Boden zur Decke. Damit sehe ich dort noch immer den Punkt, sehe aber auch die Projektion der Kamera (also einfach nur den Ort), der genau die Entfernung hat, die ich ebend berechnet habe.

Bis hier hin sollte das Ergebnis noch gar nicht so wirklich verfälscht werden.

Nun habe ich aber ja zwei Punkte. Hier treffe ich derzeit die Annahme, dass die Punkte im Bild exakt auf der (vertikal gesehen) mittleren Linie im Bild liegen. Vernachlässige ich nun die Verzerrung, die ich auf jeden Fall im Bild habe, liegen alle Punkte auf dieser Linie im Bild auch in Wirklichkeit auf einer Linie.
Ich vereinfache nun erneut und sage, diese Punkte liegen alle genauso weit weg, wie der Mittelpunkt, daher kann ich nun für meine beiden sichtbaren Punkte an der Decke einen Abstand zur Kamera berechnen.
Ich weiß, dass die Punkte natürlich nicht gleich weit weg sind, aber dass könnte ich, wenn ich mal die Linseneigenschaften außen vor lasse, ebenfalls wieder über normale Dreiecksgleichungen ausrechnen, das kommt aber erst im nächsten Schritt.

Wie halt schon gesagt, ich vereinfache sehr sehr weit und teilweise geht es auch nur, weil ich keine Koordinaten im Raum später brauche sondern nur in der Ebene und ich von einer konstanten Deckenhöhe ausgehen kann, so dass ich auch immer schön projezieren kann



@ euch beide:

Danke schonmal für die Antworten. Das von .doc geht in die Richtung, die ich bereits selber gefunden habe, es wurde hier nun aber besser erklärt.
Ich werde beide Varianten mal probieren, aber gerade zu der von sw33t werde ich bestimmt noch Fragen haben.

Ich bin aber auch immernoch für weitere Vorschläge/Erklärungen dankbar
 
Die Aufgabe sollte leicht zu lösen sein;
Mein Vorschlag wäre folgender:

--Siehe Bild, habs nicht umsonst visualisiert :D

Edit: Wie man Kreifunktionen aufstellt, gleichstellt und somit Schnittpunkte ausrechnet, poste ich gleich .. Hab zuvor deinen ganzen Beitrag nicht gelesen gehabt :|

Edit2: So, ich habe mir die Mühe gemacht, und die ganze Aufgabe mit Beispielswerten durchgerechnet. Habe mit Derive alles prüfen lassen und daumen über PI (Abrunden usw) passt alles. Viel Spaß damit

Den Dateinamen solltest du nicht ernst nehmen ... also keine PARANOIA !!!!!!einselfelf
 
Also dank eurer Hilfe habe ich nun auch die Varianten verstanden, die ich selber gefunden habe und konnte es nun durchrechnen. Bin bereits dabei, das programmtechnisch umzusetzen :)

@lone.wolf
Deines gucke ich mir auch nochmal an
 
Kann ich dann gerne machen, wobei diese aber wie oben erwähnt keine Allgemeingültigkeit hat, da ich aufgrund meiner Vorgaben auf eine Fallunterscheidung verzichten kann
 
Zurück
Oben