2014-11-06 69 views
1

點的座標我有一個橢圓形:得到形成圓周

Ellipse2D e2D = new Ellipse2D.Float(startPoint.x, startPoint.y, x - startPoint.x, y - startPoint.y); 

而我需要的是得到形成圓周的所有點的座標。

ArrayList<Point> oneDraw = new ArrayList<>(); 
for (int i = startX; i < borderX; i++) 
     for (int j = startY; j < borderY; j++) 
      if (e2D.contains(new Point(i, j))) 
       oneDraw.add(new Point(i, j)); 

通過這樣做,我把我圈內的所有座標都放到列表中,但我不需要這個。

謝謝你的回答,並花時間。

+0

這是從圖書館? – 2014-11-06 17:10:31

+0

對不起,什麼庫?那什麼「那個」? – Yaroslav 2014-11-06 17:12:25

+0

我的意思是你正在使用的類:'Point','Ellipse2D'。那些來自某個圖書館?我只是不熟悉這一點。 – 2014-11-06 17:15:02

回答

1
  • 創建一個比目標橢圓稍大的橢圓。
  • 創建一個比目標橢圓略小的橢圓。
  • 從第一個減去第二個橢圓。這將形成一個橢圓環。
  • 使用橢圓環執行當前'包含'代碼。
0

您的方法會將橢圓內的所有像素添加到列表中,即您將獲得橢圓的區域而不是其圓周。我認爲最好是尋找正確的公式並解決離散x/y對。

或者更好地應用用於繪製可以在網上找到的橢圓的算法之一,例如,這一個:http://www.mathopenref.com/coordcirclealgorithm.html
然後獲取已繪製的像素(如果仍然需要)。

編輯:如果你看一下的Ellipse2D的源代碼,你可以得到一個如何實現自己的算法的一個想法,或者你可以只使用getPathIterator()具有均勻的變換,然後「光柵化」的路徑元素到你的列表中。

+1

「會將不在橢圓內的所有像素添加到列表中」 - 你的意思是「哪些在裏面」而不是「哪些不在裏面」? – markw 2014-11-06 17:44:49

+0

@markw哦,是的,你說得對。我想要得到「圓周」,然後檢查橢圓是否包含點,我感到困惑。似乎我的大腦在條件下添加了一個「!」。 – Thomas 2014-11-07 08:03:32