2011-01-09 61 views
5

刪除冗餘的頂點,我的頂點列表,即List<Point>,它包含了方以下幾點: (0,0), (1,0), (2,0), (3 ,0), (4,0), (4,1), (4,2), (4,3), (4,4), (3,4), (2, 4) (1,4), (0,4), (0,3), (0,2), (0,1), (0,0)如何從列表

enter image description here

要繪製一個正方形我只需要四點(0,0),(0,4),(4,4),(4,0),我該如何移除多餘的(這使得直線)列表中的點數?

它並不總是正方形,基本上我想減少點數如果他們形成線。例如(0,0),(0,1),(0,2),(0,3),(0,4)是直線,而不是繪製所有的四個點,它將很快從點畫一條線(0,0),(0,4)。

+1

還有其他限制嗎?你總是在形成一個廣場?它總是長度4?等等等等。或者真的,問題是你可以擁有任意大小的任意形狀嗎? – 2011-01-09 17:20:06

+0

這是功課嗎? – 2011-01-09 17:21:38

+0

平方將始終與X軸和Y軸對齊嗎? – Ani 2011-01-09 17:26:08

回答

5

一次查看三個連續點(我們稱它們爲p0,p1,p2)。如果p2 = p0 + k(p1 - p0)其中k是任意實數,這三個點共線(形成單個線)。我們可以在聯立方程來表達上述條件:

(x2 - x0) = k(x1 - x0) 
(y2 - y0) = k(y1 - y0) 

從理論上講,所有你需要做的是採取各組的三個點輪流。計算x分量和y分量的k的值;如果它們是相同的,那麼線是共線的,所以刪除p1

實際上,由於定點或浮點的侷限性,這在一般情況下會變得更加棘手。一旦它們的座標被量化,應該共線的點可能不完全共線。所以你在進行比較時可能需要考慮一些誤差。

0

自動執行此操作的一種方法是採用包含minX,maxX,minY和maxY(即最大擴展座標並假設數組中的其他點都在矩形範圍內)組合的點。

如果這不能解答您所想的問題,您可能需要提供一些更多的細節和約束條件。