首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的oval内循环

Java中的oval内循环
EN

Stack Overflow用户
提问于 2010-11-26 03:08:49
回答 3查看 905关注 0票数 1

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

代码语言:javascript
复制
drawOval(x,y,r*2,R*2).

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

谢谢,

乔尔

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-26 04:05:51

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

票数 2
EN

Stack Overflow用户

发布于 2010-11-26 03:34:34

椭圆的简单正则隐式方程是(中心为0;0)

所以你可以迭代,抛出所有可能的坐标,并使用这个方程检查它。

票数 1
EN

Stack Overflow用户

发布于 2010-11-26 03:41:11

我不认为这有任何内置的功能。

让我们一步一步地来了解一下。

假设椭圆的中心是(0,0),一个半径是a,另一个是b,则正则方程是

代码语言:javascript
复制
x^2/a^2+y^2/b^2=1

a^2b^2将两端相乘,你会得到

代码语言:javascript
复制
x^2*b^2+y^2*a^2=a^2*b^2

现在,您必须执行double for循环。ab必须为正。伪码:

代码语言:javascript
复制
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)时有效,因此,如果您希望此算法起作用,请使用平移适当地移动点。如果你把中心放在别的地方,这个算法会变得更混乱。

注意:没有对此进行测试。如果有人发现错误,请指出它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4280192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档