2014-11-06 65 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