我需要用Java检查椭圆内的每个像素。 对于绘图,我目前正在使用:
drawOval(x,y,r*2,R*2).
然而,由于我需要在Oval中获取每个像素,我想创建一个在其内部迭代的循环(假设我有x,y,r和R)。是否有用于此目的的内置功能?
谢谢,
乔尔
答案 0 :(得分:2)
Java的Ellipse2D
实现了Shape
接口,因此您可以根据需要使用后者的contains()
方法之一。也可以将Shape
呈现为BufferedImage
并遍历其WritableRaster
。
答案 1 :(得分:1)
Oval的简单规范隐式方程是(中心0; 0)
所以你可以迭代扔掉所有可能的坐标并用这个等式检查它。
答案 2 :(得分:1)
我认为没有任何内置功能。</ p>
让我们一步一步地完成这个过程。
假设您的椭圆的中心位于(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
现在,你必须做一个双循环。 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)
时才有效,因此如果您希望此算法有效,请使用翻译适当地移动您的点。如果你把中心留在别的地方,那么这个算法就会变得更加混乱。
注意:没有测试过这个。如果有人发现错误,请指出。