2013-12-21 64 views
9

example problem polygonGET中心多邊形C#

什麼算法,我可以用它來獲得多邊形(紅點)
情況1的中心:我嘗試用maxX的,美星,其minX,MINY和我有錯點(黑點)
情況2:我嘗試獲取第二個最大和最小座標X和Y,但是我得到了點數小於5的多邊形的問題
案例3:我加了if point count < 5 then use case 1 else use case 2,但是我得到了一些錯誤多邊形

你能告訴我正確的算法嗎?

注: pic 4th

交代了4畫面

//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; 
} 

這個我有多遠做

+1

第四個不是一個多邊形,它們是兩個 – Shaharyar

+0

你應該提供你到目前爲止的相關代碼。 – Harrison

+0

對不起,如果轉發,但我真的不明白他們在說什麼和解決方案,因爲它是複雜的。你能向我解釋一下嗎?我希望爲簡單的解決方案 – Zenithxm

回答

1

你要找的是不是多邊形的幾何中心(或centroid) ,而是位於多邊形內部的多邊形的對稱軸部分的中心。讓我來編輯你的一個例子來證明:

Edited example

你明白我的意思?

我選擇了這個例子,因爲它展示了你思想中的另一個缺陷;這是兩個多邊形,並且它們中的每一個都會產生一個符合您要查找的資格的點。在你的例子中,你只是隨意選擇其中一個作爲你想要的點。 (我已經看到你的編輯的第四個例子,它仍然有兩個內部,並沒有改變我的觀點。)

無論如何,你要找的是兩個問題的解決方案:首先,如何找到多邊形的對稱軸;第二,在該對稱軸上找到也位於多邊形內部的線段。在那之後,找到那個部分的中心是微不足道的。

我不能發表任何更多的鏈接,但有一篇由P.Hannam在卡內基梅隆大學出版的論文題爲「用於尋找平面點集的對稱性的最佳算法」,可以幫助解決第一個問題,這有點涉及所以我不會在這裏解釋。第二個問題可以歸結爲測試每個線段,看看它是否包含沿着穿過圖形質心的對稱軸的線的交點。假設你的多邊形只有一個內部區域(閱讀:不像你的第四個例子),你應該得到兩個點。平均他們,你有你的中心。