2012-11-19 32 views
3

我現在有一個從畫布上的徒手繪圖點的陣列列表。我想知道是否有一個簡單的算法來檢測這個形狀是否代表了一個圓圈。我已經研究了這一點,我指出的主要項目是霍夫變換或位圖圖像,但是這些都顯得有點過分我需要它的頂部。任何指向算法或實現的指針都會非常有幫助。從圈點列表中的java圈識別

在此先感謝sansoms,

+0

你到底想要檢查什麼?列表中的所有點是否與某個中心的距離大致相同,或者是閉合迴路(不是350°弧或螺旋形),還是兩者都有? –

+0

基本上來檢查它是否更像是一個圓,而不是一個直線。它不需要是一個完美的圈子。只要用戶想在畫布上添加一個圓圈,他們就可以用鼠標繪製一個圓圈,它可以用圓圈代替,我可以用graphic.draw繪製(新的Ellipse2D.Double(x,y,rectwidth,rectheight )); – adam

回答

0

如果不知道用戶想畫什麼(如圓形,橢圓形,線或矩形),你可以使用一些基本的優化算法來最好找到匹配的形狀手繪分。

  • 對於每個基本形狀(橢圓,矩形,三角形,直線等),創建該形狀的隨機實例並測量錯誤w.r.t.給定的點
  • 優化每個形狀(單獨),直到你有橢圓形的最佳匹配給定的點,矩形最匹配的點,最好的三角形等。
  • 挑選具有最低誤差的形狀,畫出來
+0

非常感謝,這使得它更加清晰,我尋找優化算法,這對我有很大的幫助 – adam

2

enter image description here

如果我正確地解釋你的問題,你想知道如果所有的點都在一個圈。如圖所示,我們從列表中選擇三個點A,B,C並計算推測圓的原點O.通過檢查O和列表中每個點之間的距離,我們可以得出這些點是否在一個圓上。

0

閱讀您的評論,更簡單的繪製圓的方法是用戶單擊中心點,然後拖動圓的半徑。計算量少得多,用戶繪製起來更容易。

你可以用矩形或其他凸多邊形做同樣的事情。