Mittelpunkt und Radius aus 2x Tangente und 1x Punkt

Aufrufe: 70     Aktiv: 2 Tage, 14 Stunden her

0

Hallo,

für ein Projekt an einer CNC Maschine benötige ich den Mittelpunkt eines Kreises und den Radius, welcher durch 2x Tangeten (P1-P2 und P3-P4) und 1x Punkt (P5) definiert ist. Die CAM Software bietet leider keine entsprechende Hilfsgeometrie an. Kann mir da jemand den Rechenweg aufzeigen? Da ich kein Mathematiker bin, genügen mir allerdings nicht einfach ein Lösungsansätze. Am vorteilhaftesten wäre eine Formel, die ich in meinem Programmcode übersetzen könnte. Da es wohl immer 2x Lösung gibt, wir benötigen immer den kleineren Kreis.

Viele Grüße

Dieter

gefragt 1 Woche, 1 Tag her
dieter
Punkte: 14

 

Ich schau mir das später nochmal genauer an, könnte mir aber vorstellen, dass das Ganze auf die Lösung des Gleichungssystems \[\begin{gather} ||P5 - M|| = r \\ ||g(s)-M|| = r \\ ||h(t) - M|| = r \\ \langle M-g(s), v\rangle = 0 \\ \langle M-h(t)), w\rangle = 0 \end{gather}\]
hinausläuft, wobei \(M\) den Mittelpunkt darstellt und \(g\) und \(h\) die Tangentengleichungen mit jeweiligen Richtungsvektoren \(v\) und \(w\) darstellen.
  ─   posix 1 Woche, 1 Tag her
Kommentar schreiben Diese Frage melden
1 Antwort
0

Eine Lösungsmöglichkeit stellt die Lösung des Gleichungssystems \[\begin{align} ||P5 - M|| - r = 0 \\ ||g(s)-M|| - r = 0 \\ ||h(t) - M|| - r = 0 \\ \langle M-g(s), v\rangle = 0 \\ \langle M-h(t)), w\rangle = 0 \end{align}\] dar, 5 unabhängige Gleichungen für 5 Variablen liefern eine eindeutige Lösung.
Die Bestimmung ist nur numerisch möglich, wie du das letztendlich implementierst hängt wohl stark von der verwendeten Programmiersprache ab.
Für mathematische Berechnungen ausgelegte Sprachen wie Matlab, R, Julia, usw. sollten aber einfach Funktionen zum Lösen solcher nichtlinearen Gleichungssysteme bieten.

Hier eine mögliche Implementierung in Julia (ist recht häßlich, da ich das ursprünglich bloß zur Überprüfung verwendet habe). Ich hab mal mit ein paar Werten rumgespielt, es scheint soweit sinnvolle Ergebnisse zu liefern.

Wenn du es Bare-Metal implementieren willst, könntest du das Newton-Verfahren verwenden: \[x_{k+1} = x_k - J_f^{-1}(x_k) f(x_k)\] wobei \(f\) hier die Funktionen auf der jeweils linken Seite des obigen Gleichungssystems sind, und \(J_f\) ihre Jakobimatrix ist, \(x_k\) kann man in beliebiger Reihenfolge definieren, z.B. mit \(x_1\) = x-Koord und \(x_2\) = y-Koordinate des Mittelpunkts, \(x_3\) = Radius des Kreises und \(x_{4,5}\) = s und t.

Mit etwas Umstellung muss man nun für jede Iteration \(x_k \rightsquigarrow x_{k+1}\) das lineare Gleichungssystem \(J_f(x_k) \Delta x_k = f(x_k)\) für\(\Delta x_k\) lösen (z.B. Gauß-Algorithmus - man kann natürlich auch einfach die Inverse berechnen), wobei dann \(x_{k+1} = x_k - \Delta x_k\).
Man benötigt noch einen Startwert \(x_0\), bei dessen Wahl man etwas aufpassen muss, normalerweise sollte es jedoch kein Problem darstellen. Üblicherweise beendet man das Verfahren nach Unterschreiten einer gewissen Toleranz (= Abbruchbedingung) wenn \(||x_{k+1} - x_k|| < TOL\)

Für die Jacobimatrix erhält man (Erste 3 Gleichungen quadriert) sowas wie  \[J_f(x) = \begin{pmatrix} -2(E-M)^T & -2r & 0&0 \\ -2(g(s)-M)^T & -2r & 2\langle g(s) - M, v\rangle & 0\\ -2(h(t) - M)^T & -2r & 0 & 2\langle h(t)-M,w\rangle\\ v^T & 0 & -||v||^2 & 0\\w^T & 0 & 0 & -||w||^2\end{pmatrix}\]

geantwortet 3 Tage, 11 Stunden her
posix
Student, Punkte: 485
 
Kommentar schreiben Diese Antwort melden