我需要用Java检查椭圆内的每个像素。对于绘图,我目前使用的是:
drawOval(x,y,r*2,R*2).但是,由于我需要获取Oval中的每个像素,所以我想创建一个在其中迭代的循环(假设我有x,y,r和R)。有没有用于此目的的内置功能?
谢谢,
乔尔
发布于 2010-11-26 04:05:51
Java的Ellipse2D实现了Shape接口,因此您可以根据需要使用后者的contains()方法之一。还可以将Shape呈现为BufferedImage并遍历其WritableRaster。
发布于 2010-11-26 03:34:34
椭圆的简单正则隐式方程是(中心为0;0)

所以你可以迭代,抛出所有可能的坐标,并使用这个方程检查它。
发布于 2010-11-26 03:41:11
我不认为这有任何内置的功能。
让我们一步一步地来了解一下。
假设椭圆的中心是(0,0),一个半径是a,另一个是b,则正则方程是
x^2/a^2+y^2/b^2=1用a^2和b^2将两端相乘,你会得到
x^2*b^2+y^2*a^2=a^2*b^2现在,您必须执行double for循环。a和b必须为正。伪码:
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)时有效,因此,如果您希望此算法起作用,请使用平移适当地移动点。如果你把中心放在别的地方,这个算法会变得更混乱。
注意:没有对此进行测试。如果有人发现错误,请指出它。
https://stackoverflow.com/questions/4280192
复制相似问题