Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (bearbeitet)

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
Geschrieben (bearbeitet)

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
Geschrieben

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

Geschrieben
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.

Geschrieben

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

Geschrieben

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.

Geschrieben
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

Geschrieben (bearbeitet)
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

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...