2013-12-21 12 views
9

example problem polygonget Zentrum Polygon C#

welchen Algorithmus, der i das Zentrum des Polygons (roter Punkt)
Fall nutzen können 1 zu bekommen: ich versuche, mit MAXX maxY, minX, minY und ich habe den falschen Punkt (schwarzer Punkt)
Fall 2: Ich versuche, die zweite Max- und Min-Koordinate X und Y zu bekommen, aber ich habe ein Problem mit dem Polygon, das Punkt weniger als 5
Fall 3: ich füge if point count < 5 then use case 1 else use case 2 hinzu, aber ich habe einige Fehler für einige Polygon

können Sie mir den richtigen Algorithmus für mich sagen?

Anmerkung: pic 4th

explaination für 4. Bild

//ma mean max, mi mean min, X1 mean first, X2 mean second 
maX1 = maX2 = maY1 = maY2 = 0; 
miX1 = miX2 = miY1 = miY2 = 2000; 
//aCoor is array of coordinate, format = {x1,y1,x2,y2,x3,y3,x4,y4,...} 
for(int i=0; i<aCoor.count(); i+=2) 
{ 
    //point is list of point 
    point.Add(aCoor[i],aCoor[i + 1]); 
    //this to get second max X 
    if(maX2 < aCoor[i]) 
    { 
     maX2 = aCoor[i]; 
    //this to get first max x 
    if(maX1 < maX2) {maX1 += maX2; maX2 = maX1 - maX2; maX1 -= maX2;} 
    } 

    //this to get second min X 
    if(miX2 > aCoor[i]) 
    { 
     miX2 = aCoor[i]; 
    //this to get first min x 
    if(miX1 > miX2) {miX1 += miX2; miX2 = miX1 - miX2; miX1 -= miX2;} 
    } 

    //this to get second max Y 
    if(maY2 < aCoor[i + 1]) 
    { 
     maY2 = aCoor[i + 1]; 
    //this to get first max x 
    if(maY1 < maY2) {maY1 += maY2; maY2 = maY1 - maY2; maY1 -= maY2;} 
    } 

    //this to get second min Y 
    if(miY2 > aCoor[i + 1]) 
    { 
     miY2 = aCoor[i + 1]; 
    //this to get first min x 
    if(miY1 > miY2) {miY1 += miY2; miY2 = miY1 - miY2; miY1 -= miY2;} 
    } 
} 

if(point.Count < 5) 
{ 
    Xcenter = (maX1 + miX1)/2; 
    Ycenter = (maY1 + miY1)/2; 
} 
else 
{ 
    Xcenter = (maX2 + miX2)/2; 
    Ycenter = (maY2 + miY2)/2; 
} 

dies, wie weit ich tun

+1

4. ist nicht das eine Polygon, sie sind zwei – Shaharyar

+0

Sie sollten den relevanten Code, den Sie bisher haben. – Harrison

+0

Tut mir leid, wenn repost, aber ich verstehe nicht wirklich, worüber sie reden und was die Lösung, weil es zu komplizieren ist. Kannst du mir erklären? Ich hoffe auf eine einfache Lösung – Zenithxm

Antwort

1

Was Sie suchen ist nicht das geometrische Zentrum (oder centroid) des Polygons , aber die Mitte des Teils der Symmetrieachse des Polygons, der innerhalb des Polygons liegt. Lassen Sie mich eines Ihrer Beispiele bearbeiten zu demonstrieren:

Edited example

Siehst du, was ich meine?

Ich wählte dieses Beispiel, weil es einen weiteren Fehler in Ihrem Denken zeigt; Dies sind zwei Polygone, und jedes von ihnen erzeugt einen Punkt, der zu den Qualifikationen passt, die Sie suchen. In Ihrem Beispiel wählen Sie einfach einen von ihnen als den Punkt, den Sie wollen. (Ich habe Ihr bearbeitetes viertes Beispiel gesehen; es hat immer noch zwei Innenräume und ändert meinen Punkt nicht.)

In jedem Fall, was Sie suchen, ist eigentlich die Lösung für zwei Probleme: erstens, wie man einen findet Symmetrieachse für ein Polygon; zweitens findet man auf dieser Symmetrieachse ein Liniensegment, das auch im Inneren des Polygons liegt. Danach ist das Finden des Mittelpunkts dieses Segments trivial.

Ich kann keine weiteren Links posten, aber es gibt ein Papier von P. Highnam von der Carnegie Mellon University mit dem Titel Optimal Algorithms zum Finden der Symmetrien eines Planar Set, das mit dem ersten Problem helfen könnte, es ist ein bisschen beteiligt also werde ich es hier nicht erklären. Das zweite Problem besteht nur darin, jedes Liniensegment zu testen, um zu sehen, ob es einen Schnittpunkt mit einer Linie entlang der Symmetrieachse enthält, die durch den Schwerpunkt der Figur verläuft. Angenommen, Ihr Polygon hat nur einen Innenraum (lesen Sie: ist nicht wie in Ihrem vierten Beispiel), sollten Sie zwei Punkte erhalten. Durchschnitt sie und du hast dein Zentrum.