Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Schnittpunkt von 2 Kreisen

Empfohlene Antworten

Veröffentlicht

Hallo,

ich habe das Problem, dass ich Schnittpunkte von 2 Kreisen berechnen möchte.

Kreisformel für beide Kreise (nur unterschiedliche Mittelpunktswerte):

(x-xm)²+(y-ym)²=15²
Somit ergibt sich ja eigentlich, dass die Formel so aussieht, wenn ich beide gleichsetze:
(x-xm1)²+(y-ym1)²=(x-xm2)²+(y-ym2)²
Wenn ich das ganze jetzt umstelle und nach x auflöse erhalte ich diese Gleichung:
x = ((-xm1² -ym1² +xm2² +ym2²)/2 +(ym1-ym2)*y)/(-xm1+xm2)
Solange die Y-Koordinaten der Mittelpunkte übereinstimmen habe ich hier kein Problem. Wenn ich allerdings diese Werte verwende:
xm1 = 10

ym1 = 10

xm2 = 20

ym2 = 15
komme ich zu der aufgelösten Gleichung:
x = 21,25 -0,5y
Das verwirrt mich. So bekomme ich ja keine von Y unabhängigen X-Koordinaten. Habe ich irgendwo einen Denk- oder sonstigen Fehler, oder bin ich an einem Punkt, an dem ich nur nicht mehr weiter weiß? Die Y-Koordinate müsste ich ja eigentlich so ermitteln, wenn ich mich nicht komplett verrechnet habe:
y=sqrt(15²-(x-xm)²)-ym

Ich wäre um Hilfe dankbar.

Falls Fehler auffallen, bitte bescheid sagen. Vielleicht klärt das auch schon einiges.

Und ja, mit sowas beschäftige ich mich mitternachts :D

Mfg Shadowman

Bearbeitet von Shadowman

Also wenn ich die Kreisgleichung so formuliere:


(x-x0)^2 + (y-y0)^2 = r^2

und diese nach x frei stelle, ergibt sich:

(x-x0)^2 = r^2 - (y-y0)^2

(x-x0) = +-sqrt(r^2 - (y-y0)^2)

x = x0 +-sqrt(r^2 - (y-y0)^2)

Bei zwei Kreisen musst Du immer folgende Fälle beachten, es können immer <= 2 Schnittpunkte existieren. Für den Schnittpunkt ergibt sich dann bei 2 Kreisen

Kreis 1: (x - x0k1)^2 + (y - y0k1)^2 = rk1^2 

Kreis 2: (x - x0k2)^2 + (y - y0k2)^2 = rk2^2 

Schnittpunkt(e):  (x - x0k2)^2 - (x - x0k1)^2 = rk2^2 - rk1^2

Phil

Bearbeitet von flashpixx

  • Autor

Formel1: (x-mx1)² + (y-my1)² = 15²

Formel2: (x-mx2)² + (y-my2)² = 15²
Da die beiden Radien gleich sind, lassen sich ja die Formeln so gleichsetzen:
(x-mx1)² + (y-my1)² = (x-mx2)² + (y-my2)²
Ich habe jetzt einfach die binomischen Formeln ausformuliert:
x²-2x*mx1+mx1² + y²-2y*my1+my1² = x²-2x*mx2+mx2² + y²-2y*my2+my2²
jetzt kürzen sich die quadrate von x und y weg und es bleibt:
-2x*mx1+mx1² -2y*my1+my1² = -2x*mx2+mx2² -2y*my2+my2²
jetzt alles was mit x zu tun hat nach links und alles was nicht damit zu tun hat nach rechts:
-2x*mx1 + 2x*mx2 = mx2² -2y*my2 + my2² - mx1² + 2y*my1 - my1²
dann noch ein bisschen ausklammern:
2x(mx2-mx1) = 2y(my1-my2) + mx2² + my2² - mx1² - my1²

und hier sieht man ja direkt, dass ich eine Abhängigkeit von y habe, wenn my1 und my2 nicht gleich sind.

Ich komme da irgendwie nicht auf eine Wurzelopperation.

*verzweiflung*

Ich gehe schlafen. Vielleicht finde ich morgen meinen Denkfehler, den ich zu haben scheine

Da die beiden Radien gleich sind, lassen sich ja die Formeln so gleichsetzen:

Wenn du beide Gleichungen gleichsetzt, verlierst du somit eine Information. Du machst aus 2 Gleichungen mit 2 Unbekannten (was im positiven Fall 2, 1, oder 0 Lösungen hat) dann nur noch eine Gleichung mit 2 Unbekannten und bekommst somit immer die Abhängigkeit (die ja auch richtig ist) hinein. Folglich vernichtest du eine Information.

Also bitte eine Gleichung nach einer Variablen freistellen und in die andere Gleichung einsetzen (oder ein ähnliches Lösungsverfahren - Additionsverfahren etc.) anwenden. Dann bekommst du nur noch die Abhängigkeit vom Radius (wenn du willst, auch von beiden bekannten Radien) und von den (bekannten) Mittelpunktskoordinaten.

  • Autor

ARG!!!

Vielen Dank!

Ich habe Gleichung1 nach y aufgelöst:


x²-2x*xm1+xm1² + y²-2y*ym+ym1² = 15²

(y-ym1)² = 15²-(x-xm1)²

y = +-sqrt(15²-(x-xm1)²)+ym1
und in die 2. Gleichung eingesetzt.
(x-xm2)² = 15² - ((+-sqrt(15²-(x-xm1)²)+ym1)-ym2)²

(x-xm2)² = 15² - (+-sqrt(225-x²-2x*xm1+xm1²) + xm1 - ym2)²

x = +-sqrt(15² - (+-sqrt(225-(x-xm1)²) + xm1 - ym2)²)-xm2

  • Autor

Was ich noch anmerken wollte:

Der fall, dass es keinen Schnittpunkt gibt kann nicht eintreten, da beide Mittelpunkte einen maximalen Abstand von 30 pixeln haben. Somit sind es 1-2 Schnittpunkte.

Ich möchte immer den unteren Schnittpunkt haben. Somit ergibt sich für die Berechnung der Y-Koordinate des unteren Schnittpunkts:

y = ym1-sqrt(15²-(x-xm1)²)

Mit dem Stand der Formel für das X komme ich allerdings nicht weiter. Wurzelrechnung ist leider etwas länger her bei mir, sodass ich es gerade nicht schaffe, x auf eine Seite zu bringen und es somit rein abhängig von xm1, ym1, xm2 und ym2 zu machen.

Falls da noch jemand einen Tipp hat wäre ich schon zufrieden.

Um mal den Hintergrund etwas zu klären:

Es geht darum, die Stellung eines Arms im 2-Dimensionalen Raum darzustellen, wobei sich die Schulter an xm1/ym1 befindet und die Hand an xm2/ym2.

Daraus ergibt sich ja, dass der Ellbogen am unteren Schnittpunkt der Kreise mit dem Radius r=15px mit den Mittelpunkten xm1/ym1 und xm2/ym2 befindet.

Ich hoffe, dass mit einer deutlich vereinfachten Formel eine sehr schnelle berechnung dieser Koordinate möglich ist, da sie für schnelle darstellung benötigt wird.

Was ich noch anmerken wollte:

Der fall, dass es keinen Schnittpunkt gibt kann nicht eintreten, da beide Mittelpunkte einen maximalen Abstand von 30 pixeln haben. Somit sind es 1-2 Schnittpunkte.

Das ist kein Argument, wenn der Abstand gleich 30 Pixel ist, der Radius jedes Kreises 1 Pixel, dann hast Du keine(n) Schnittpunkt(e).

Ich möchte immer den unteren Schnittpunkt haben. Somit ergibt sich für die Berechnung der Y-Koordinate des unteren Schnittpunkts:

y = ym1-sqrt(15²-(x-xm1)²)

Das kann man auch generell nicht so sagen, wo ist "oben" und wo ist "unten". Wenn beide Mittelpunkte auf einer Geraden, die parallel zur Y-Achse verläuft, dann, die Radien größer dem halben Abstand sind, dann liegen die Schnittpunkte auf einer Geraden, die parallel zur X-Achse verläuft.

Mit dem Stand der Formel für das X komme ich allerdings nicht weiter. Wurzelrechnung ist leider etwas länger her bei mir, sodass ich es gerade nicht schaffe, x auf eine Seite zu bringen und es somit rein abhängig von xm1, ym1, xm2 und ym2 zu machen. [...]

Es geht darum, die Stellung eines Arms im 2-Dimensionalen Raum darzustellen, wobei sich die Schulter an xm1/ym1 befindet und die Hand an xm2/ym2.

Du möchtest ein Gelenk im 2D modellieren, so wie ich das verstehe, dann würde ich Dir eher zu Darstellung als Vektoren raten, denn es vereinfacht viele Dinge. Betrachte einen "Knochen" als Strahl, der Strahl besteht aus 2 Vektoren (Ort- und Richtungsvektor). Die Länge des Richtungsvektors ist gleichzeitig die Länge Deines "Knochen". Ein Gelenk kann sich meist nicht um 360 Grad bewegen, sondern nur um einen bestimmten Kreisbogen, somit hast Du schon eine Einschränkung in der Bewegung. Die Bewegung des Gelenkes bzw des Richtungsvektors kann über eine Drehmatrix beschreiben.

Somit lassen sich dann auch Strukturen beschreiben, die eben aus mehren Knochen / Gelenken bestehen

Phil

  • Autor
Das ist kein Argument, wenn der Abstand gleich 30 Pixel ist, der Radius jedes Kreises 1 Pixel, dann hast Du keine(n) Schnittpunkt(e).

Der Radius beider Kreise beträgt immer genau 15px.

Da der Abstand <= 2r ist gibt es immer 0 < ergebnisse < 3

Das kann man auch generell nicht so sagen, wo ist "oben" und wo ist "unten". Wenn beide Mittelpunkte auf einer Geraden, die parallel zur Y-Achse verläuft, dann, die Radien größer dem halben Abstand sind, dann liegen die Schnittpunkte auf einer Geraden, die parallel zur X-Achse verläuft.

Ist zu vernachlässigen, da der Radius auf 15px festgelegt ist und der maximale Abstand 30px beträgt. Somit gibt es keine Ausnahmen

Du möchtest ein Gelenk im 2D modellieren, so wie ich das verstehe, dann würde ich Dir eher zu Darstellung als Vektoren raten, denn es vereinfacht viele Dinge. Betrachte einen "Knochen" als Strahl, der Strahl besteht aus 2 Vektoren (Ort- und Richtungsvektor). Die Länge des Richtungsvektors ist gleichzeitig die Länge Deines "Knochen". Ein Gelenk kann sich meist nicht um 360 Grad bewegen, sondern nur um einen bestimmten Kreisbogen, somit hast Du schon eine Einschränkung in der Bewegung. Die Bewegung des Gelenkes bzw des Richtungsvektors kann über eine Drehmatrix beschreiben.

Nicht ganz reelle gelenke.

Es soll so gerechnet werden, dass zum Beispiel der Unterarm vom Ellbogen an um 360° gedreht werden kann.

Es geht hier um Strichmännchen. Hier ein Video, was vielleicht beim Verständnis hilft

Ausserdem stellt sich noch die Frage, mit welcher Sprache man sowas umsetzen kann.

Ich habe in erwägung gezogen: C++.Net, C#.Net, XNA

Bearbeitet von Shadowman

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.