Mittelpunkt von konkaven und konvexen 2D Polygonen finden...
-
Hallo,
ich bin auf der suche nach einer Funktion, die mir den Mittelpunkt eines
2D Polygons ermittelt. Wichtig dabei ist, dass der Punkt innerhalb des
Polygons sein soll. Wenn das Polygon z.B. eine U-Form hat, dann sollte der Punkt
(wenn die Rechte Seite des U's größer ist als die untere und die Linke)
auf der Rechten Seite sein. Ebenso, wenn z.B. ein Polygon eine größere und eine
kleinere Fläche darstellt und diese beiden Flächen natürlich miteinander verbunden sind, sollte es so sein, dass der Mittelpunkt der grösseren Fläche gefunden wird.Gibt es so etwas in der Art bereits, oder nach was kann ich genau suchen um so etwas zu machen? Oder gibt es dafür einen bestimmten Begriff, wie der 'Mittelpunkt' heisst?
Eine einfache Art davon habe ich schon gefunden, allerdings wird hier nicht
geschaut, ob der Punkt auch wirklich innerhalb des Polygons ist.register int i, j;
double ai, atmp = 0, xtmp = 0, ytmp = 0;
double xCentroid, yCentroid;
double area;
for (i = anz_punkte_effektiv-1, j = 0; j < anz_punkte_effektiv; i = j, j++)
{
ai = temp[i].x * temp[j].y - temp[j].x * temp[i].y;
atmp += ai;
xtmp += (temp[j].x + temp[i].x) * ai;
ytmp += (temp[j].y + temp[i].y) * ai;
}
area = atmp / 2;
if (atmp != 0)
{
xCentroid = xtmp / (3 * atmp);
yCentroid = ytmp / (3 * atmp);
}Danke schon mal für Eure Hilfe.
Gruß
Jürgen
-
Jo, für konvexe Kurven dürfte der Schwerpunkt (Summe aller Punkte / Anzahl der Punkte tun) das Ganze tun. Dieser dürfte innerhalb des Polygons liegen.
Aber mit konkaven Polygonen ist dies weitaus schwieriger, denn dort muss der Schwerpunkt nicht unbedingt im Polygon liegen. Wenn du einen Punkt innerhalb eines konkaven Polygons brauchst, würde ich dir folgendes empfehlen:
Suche dir 3 nacheinander folgende Punkte bzw. 2 nacheinanderfolgende Linien, so dass der Winkel zwischen den beiden Linien kleiner als 180 Grad ist. Mittels den drei Punkten kannst du dann den Schwerpunkt berechnen, welcher definitiv im Polygon liegen sollte.
-
Bitte ein Bit schrieb:
Suche dir 3 nacheinander folgende Punkte bzw. 2 nacheinanderfolgende Linien, so dass der Winkel zwischen den beiden Linien kleiner als 180 Grad ist. Mittels den drei Punkten kannst du dann den Schwerpunkt berechnen, welcher definitiv im Polygon liegen sollte.
und was soll das bringen? den punkt, den du bekommst, hat mit dem mittelpunkt rein gar nichts zu tun. sinnvoller fände ich den mittelpunkt zu bestimmen und dann den nächsten punkt zu berechnen der auf dem rand liegt.
das problem ist, dass der fragesteller auch nicht so genau weiß welche eigenschaft der punkt haben soll ..
-
Entschuldigt, wenn ich das etwas zu ungenau beschrieben habe, aber ich weiss nicht ob es für so etwas
einen 'Fachbegriff' gibt. Ich versuch aber mal es etwas genauer zu beschreiben:Also, ich will eigentlich immer den Punkt rausfinden, an welchem ich den größten Kreis zeichnen kann,
wobei sich der Kreis dann komplett innerhalb der Figur / des Polygons befindet.Ich habe hier mal noch eine Beispieldatei angehängt, die das Bildlich noch verdeutlichen soll. Der Hilfspunkt in
der mitte ist der Punkt, den ich finden will. Ich weiss auch, in der rechten Figur könnte dieser Punkt ja auch
weiter oben oder unten sein, aber da ist es dann eigentlich egal.Hauptsache ich kann an diesem Punkt einen
Kreis mit dem max. Radius zeichnen.Das Bild findet Ihr unter:
http://www.matheboard.de/thread.php?postid=709013#post709013
Hier in dem Forum kann man leider keine Bilder mit posten.Ich bin für jeden Tipp dankbar.