Das finden der kleinste Kreis umfasst weitere Kreise?
Wenn ein Kreis ist definiert durch die X, Y von der Mitte und einem Radius, wie finde ich einen Kreis und umfasst eine bestimmte Anzahl von Kreisen? Ein Kreis, der die kleinste mögliche Kreis vollständig enthalten 2 oder mehr Kreise in jeder Größe und Lage.
Zuerst habe ich versucht nur umfasst 2 Kreise durch die Suche nach dem Mittelpunkt des centers und wird den Mittelpunkt des neuen Kreises, während der radius gleich der Hälfte des radius der ersten 2 Kreise und die Hälfte der Distanz zwischen Ihren mitten, aber irgendwie ist es immer wieder ein wenig aus. Das problem schien immer ein problem mit der Suche nach den radius, aber ich habe solche Kopfschmerzen, über diese ich kann nicht damit es funktioniert.
Brauche ich nicht unbedingt eine Methode für die Suche nach einem Kreis, der umfasst 3 oder mehr Kreise. Ich finde einen Kreis umfasst, 2, der Kreis und umfassen es mit einen anderen, und den anderen, und der Letzte Kreis sollte umfassen alle Kreise gegeben, überall in den Schritten.
- Glaube nicht, dies ist eine Frage für StackOverflow. Fragen Sie Ihren Mathe-Lehrer. Ist es nicht Hausaufgaben zu machen?
- Gehört auf mathoverflow.net
- Kreise und Kugeln sind Häufig in Grafik und Spiele zu approximieren, werden die beweglichen Objekte' bounding box für die Kollisionserkennung und andere Zwecke.
- Halle: mathoverflow ist für Mathe-Profis. Sie wollen nicht Fragen wie diese.
- Wir ermöglichen "Hallo Welt!" auf SO Fragen
- M: Auch wenn diese Metapher ist passend-wer sagt, dass der mathoverflow Jungs sollten standards identisch sind SO ist?
- M : Aber dies ist nicht eine Hallo-Welt-Frage. Appearently er hat sich nichts getan. Der erste Schritt, den er Folgen sollte, ist eine mathematische Ableitung. Dann kann er sich bewegen SO.
- guter Punkt, ich habe gerade überprüft Ihre FAQ und es besagt, dass der Standort für Forschung Ebene Fragen. Trotzdem, ich denke, dass diese Frage viel mehr über die Mathematik als die Programmierung an dieser Stelle. Einmal gibt es einen Algorithmus zu implementieren, ich würde sagen, es gehören könnte auf SO.
- Du hast Recht, Sie könnte nicht. Aber der Gedanke war, dass SO einige sehr intelligente Menschen die Beantwortung ebenso einfache Programmierung Probleme.
- Ich sehe nicht die Frage als solche ein ärgernis, und es ist wahrscheinlich, Programmierung verwandt. Die Annäherung zur Verfügung gestellt (ignorieren Sie alle anderen Kreise, zwei von Ihnen...) ist der sound aus mathematischer Sicht (zumindest für die zwei-Kreis-problem), so dass die Ergebnisse ein wenig off' könnte darauf hindeuten, eine Programmierung Problem (was-Typen verwenden Sie? sind Sie erwägen den Rundungsfehler?)
- Ich würde sagen, dass der "computational geometry" Probleme wie diese sind für die Programmierung verwandt. Suche eine bounding-circle für 2 oder 3 Kreise ist einfache algebra, aber das finden einer für N Kreise effizienter als O(beängstigend) ist nicht. Und später ist definitiv eine Frage der Programmierung.
- Mathematisch ist das eher ein Grenzwert und nicht der genaue Wert. (wie viele zahlen zwischen 0,1 und 0.100001 ? Antwort: auf unbestimmte Zeit!) In der Welt der Programmierung, wir haben eine begrenzte Auflösung, das dieses relevant ist.
- Mal sehen, einige der code, beginnend mit dem code, der Ihnen Antworten, dass sind "ein wenig abseits". Dein Algorithmus scheint sinnvoll; es klingt wie das problem, das Sie haben, ist mit Debuggen. Schwer, Ratschläge zu geben, auf Debuggen, ohne dass der code.
- Meine Heuristik für mathematische Fragen ist: wenn die Mathematik übersetzt werden oder durchgeführt in code, der es gehört. Wenn die Mathematik wird verwendet, um code, ist es vielleicht nicht. Diese Mathematik wird code, also zu den Fragen ist gut SO.
- Sind alle Kreise den gleichen radius haben? Wenn nicht, dann ist deine Methode der Suche nach der Mitte der begrenzenden Kreis ist falsch.
- Dies ist eine Frage der Programmierung, und schon gar nicht Hausaufgaben. @eed3si9n war auf den Punkt, mit Hilfe es für eine umgebende region. Mein plan ist, den Minimal Einschließenden Kreis, um zu bestimmen, wenn Kreise sind nahe genug, Sie zu behandeln als eine Gruppe und nicht als Individuen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seine als Minimal Einschließenden Kreis ("MEC"), oder manchmal auch "kleinsten umschließenden Kreis".
Eine nette Seite: http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/CG-Applets/Center/centercli.htm
Gegeben zwei Kreise mit Zentren [x1,y1], [x2,y2], und die Radien R1 und R2. Was ist die Mitte des umschließenden Kreis?
Davon ausgehen, dass R1 nicht größer als R2. Wenn der zweite Kreis ist kleiner, dann nur tauschen.
Berechnen Sie den Abstand zwischen den Mittelpunkten der Kreise.
D = sqrt((x1-x2)^2 + (y1-y2)^2)
Übernimmt den ersten Kreis liegen vollständig im inneren des zweiten Kreis? Wenn also (D + R1) <= R2, dann sind wir fertig. Zurück den größeren Kreis als den umschließenden Kreis mit Mittelpunkt [x1,x2], mit radius R2.
Wenn (D+R1) > R2, dann den umschließenden Kreis hat einen radius von (D+R1+R2)/2
In diesem letzteren Fall, der Mitte der einschließenden Kreis liegen muss entlang der Verbindungslinie zwischen den beiden Zentren. Also wir schreiben können das neue Zentrum
wo theta ist gegeben durch
Beachten Sie, dass theta immer eine positive Zahl sein, da wir versichert haben, dass (D+R1) > R2. Ebenso sollten wir in der Lage sein, um sicherzustellen, dass theta ist nie größer als 1. Diese zwei Bedingungen stellen sicher, dass die umschließenden center liegt genau zwischen den zwei ursprünglichen Kreis-Zentren.
Da meine ungenaue Lösung war nicht beliebt. Hier ist ein Weg, um die exakte Lösung. Aber seine langsam ( O(N^4)? ) und sehr böse. (Im Gegensatz zu den ungenauen Methode)
Zuerst müssen Sie wissen, dass die drei Kreise finden wir einen Kreis tangential zu dem Sie alle als enthält alle drei. Dies ist einer der Kreise des Apollonius. Sie können den Algorithmus von mathworld.
Weiter können Sie zeigen, dass die kleinsten einschließenden Kreis von N Kreisen tangential an mindestens 3 der N Kreise.
Zu finden, dieser Kreis, den wir tun, die folgenden
Kann es einige tricks, um diese Fahrt, aber es sollte Ihnen genau die passende Lösung.
Einige der "tricks" für immer Kleinsten Umschließenden Kreis algorithmen zur linearen Zeit anwendbar sein kann hier, aber ich vermute, Sie würde nicht trivial sein Anpassungen.
Gibt es problem Sie bei der hand haben, heißt Kleinsten umschließenden Sphäre der Sphären. Ich habe geschrieben, meine Diplomarbeit über es, sehen "Kleinsten umschließenden ball der Bälle", ETH Zürich.
Finden Sie eine sehr effiziente C++ Umsetzung in der Computational Geometry Algorithmen Library (CGAL) im Paket Bounding Volumes. (Es gibt keine Notwendigkeit, alle von CGAL; nur extrahieren Sie die gewünschten Quell-und-header-Dateien, und Sie sind in Betrieb.)
Hinweis: Wenn Sie auf der Suche für einen Algorithmus zur Berechnung der kleinsten einschließenden Kugel der Punkte nur, es gibt auch andere Implementierungen gibt, sehen dieser Beitrag.
Ich werde empfehlen, gegen diesen nun
Siehe die Diskussion weiter unten.
Ursprünglichen Gedanken
Ich würde einen iterativen push-pull-Methode.
distance_to_center_of_circle[i]+radius_of_circle[i]
und bilden die Vektor-Summe, wie Sie gehen. Beachten Sie auch, dass die nötigen radius an der aktuellen Lage ist das maximum dieser Längen.Du fertig bist, wenn es nicht mehr[+] konvergieren.
Nikie stieß auf ihn, bis...
Angeforderte Klärung der Schritt zwei. Rufen Sie die position getestet werden
\vec{P}
(ein Vektor Menge).[++] Rufen Sie die Zentren jedes Kreises\vec{p}_i
(auch Vektor-Mengen) und dem radius des jeweiligen Kreises istr_i
. Bilden Sie die Summe\sum_i=1^n \hat{p_i - P}*|(p_i-P)|+r_i)
.[+++] Jedes element der Summe weist in die Richtung, aus der aktuellen Evaluierung Punkt in Richtung der Mitte des Kreises in Frage, aber länger durchr_i
. Die Summe selbst ist es ein Vektor der Menge.Den radius
R
mitschicken der ganze Kreis vonP
ist diemax(|p_i-P|_r_i)
.Pathologischen Fall
Ich glaube nicht, dass dem besonderen Fall nikie ' s gebracht, ist ein problem, aber es hat mich auf einen Fall, wo dieser Algorithmus schlägt fehl. Das scheitern ist ein scheitern an der Verbesserung Lösung, eher als eine abweichende, aber immer noch...
Betrachten vier Kreise, die alle den radius 1 positioniert
ist und eine Ausgangsposition von
(-1, 0)
. Symmetrische, durch design, so dass alle Entfernungen liegen entlang der x-Achse.Die richtige Lösung ist
(0, 0)
mit radius 6, wobei der Vektor berechnet, der in Schritt 2 werden über ::berechnet wütend::(-.63, 0)
, zeigt in die falsche Richtung, wodurch nie zu finden die eine Verbesserung gegenüber der Herkunft.Nun, der obige Algorithmus würde die eigentliche pick
(-2, 0)
für den Startpunkt, die einen ersten Vektor-Summe:berechnet wütend:: über +1.1. So, eine schlechte Wahl der Schrittweite auf (3) resultiert in einer weniger als optimale Lösung. ::seufz::Mögliche Lösung:
Jedoch, an diesem Punkt ist es nicht viel besser als ein reiner random walk, und Sie nicht haben, eine einfache Bedingung für wissen wenn es ist angenähert. Meh.
[+] Oder die Leistung zu Ihrer Zufriedenheit sein, natürlich.
[ ++ ], Mit latex-notation.
[+++] Hier
\hat{}
bedeutet, dass der normalisierte Vektor zeigt in die gleiche Richtung wie das argument.Habe ich genommen, was Sie zu sagen hatte, und hier ist die Lösung, die ich entdeckt:
Kreis ist definiert durch die X, Y von der Mitte und einem Radius, alle sind int-Werte. Es gibt einen Konstruktor, der Kreis(int X, int Y, int Radius). Nach dem Ausbruch aus einigen alten trig Konzepte, ich dachte, der beste Weg war, die 2 Punkte auf den Kreisen, die am weitesten auseinander. Einmal habe ich, dass der Mittelpunkt der Mittelpunkt wäre und die Hälfte der Strecke wäre, den radius und damit habe ich genug zu definieren, wird ein neuer Kreis. Wenn ich will, zu umfassen 3 oder mehr Kreise, die ich zunächst führen Sie diese auf 2 Kreise, dann habe ich führen dies auf die daraus resultierenden umfassenden Kreis und noch ein Kreis und so weiter, bis der Letzte Kreis umgeben ist. Es kann ein effizienter Weg, dies zu tun, aber jetzt funktioniert es und ich bin glücklich damit.
Ich das Gefühl, seltsam Antwort auf meine eigene Frage, aber ich konnte nicht kommen, um diese Lösung, ohne alle Ideen und links. Vielen Dank an alle.
Nur verstehen die Gleichungen der Kreis und daraus eine Gleichung (oder eine Serie) für die Antwort finden, die dann mit der Umsetzung beginnen. Vielleicht werden wir in der Lage sein, um Ihnen zu helfen, die Euch etwas getan haben.
Also, wenn Sie brauchen nicht die exakten Kreis um diese Näherung machen könnte.
Punkt X
Alle Kreise müssen fallen in den Kreis zentriert auf X mit radius R1+R2
Dies ist kein triviales problem. Ich habe nicht Lesen Sie alle der oben genannten Antworten, so, wenn ich wiederhole, was jemand schon gesagt hat, die Schuld ist mein.
Jeder Kreis c_i ist bestimmt durch 3 Parameter x_i,y_i,r_i
3 Parameter gefunden werden müssen x*,y*,r* für den optimalen Kreis C*
C* ist, so dass es enthält c_i für alles, was ich
Lassen d_i = ||(x,y)-(x_i,y_i)|| + r_i
Dann, wenn r den radius des Kreises, enthält alle c_i, dann r >= d_i für alles, was ich
Wollen wir r so klein wie möglich
So, r* = max(d_i)
Somit möchten wir minimieren das max von d_i
Also (x*,y*) sind gegeben durch die arg min max(d_i). Und einmal (x*,y*) gefunden werden, r* kann leicht berechnet und wird gleich max(d_i). Dies ist ein minimax-problem.
Dinge einfacher zu machen zu verstehen, betrachten Sie nur 2 Kreise, wie finden wir (x*,y*)?
(x*,y*) kann gefunden werden, indem die (x,y) zu minimieren, dass (d_1 - d_2)^2. Im Allgemeinen Fall
lassen e_ij = (d_i - d_j)^2
Dann definieren e = \sum e_ij für i != j (n 2 Wählen Sie Begriffe, die in dieser Summe)
(x*,y*) = arg min e
Und das ist, was gelöst werden muss für.
Tipp: wenn r_i = 0 für alle i, dann ist dieser reduziert sich auf die traditionelle minimalen einschließenden Kreises problem, wenn die Eingabe eine Reihe von Punkten, und wir wollen finden, Mindest-Kreis, umfaßt alle von Ihnen.