在Java中循环椭圆形

时间:2010-11-25 19:08:49

标签: java

我需要用Java检查椭圆内的每个像素。 对于绘图,我目前正在使用:

drawOval(x,y,r*2,R*2).

然而,由于我需要在Oval中获取每个像素,我想创建一个在其内部迭代的循环(假设我有x,y,r和R)。是否有用于此目的的内置功能?

谢谢,

乔尔

3 个答案:

答案 0 :(得分:2)

Java的Ellipse2D实现了Shape接口,因此您可以根据需要使用后者的contains()方法之一。也可以将Shape呈现为BufferedImage并遍历其WritableRaster

答案 1 :(得分:1)

Oval的简单规范隐式方程是(中心0; 0)

alt text

所以你可以迭代扔掉所有可能的坐标并用这个等式检查它。

答案 2 :(得分:1)

我认为没有任何内置功能。<​​/ p>

让我们一步一步地完成这个过程。

假设您的椭圆的中心位于(0,0),一个半径为a,另一个半径为b,规范方程为

x^2/a^2+y^2/b^2=1

将双方与a^2b^2相乘,即可获得

x^2*b^2+y^2*a^2=a^2*b^2

现在,你必须做一个双循环。 ab必须是正面的。伪代码:

for x = -a; x <= a; ++x:
   for y = -b; y <= b; ++y:
      if(x^2*b^2+y^2*a^2 <= a^2*b^2)
         // you're in your ellipse, do as you please

当然,这仅在中心位于(0,0)时才有效,因此如果您希望此算法有效,请使用翻译适当地移动您的点。如果你把中心留在别的地方,那么这个算法就会变得更加混乱。

注意:没有测试过这个。如果有人发现错误,请指出。