【发布时间】:2014-05-18 22:29:55
【问题描述】:
我有一个任务是使用java.awt.Graphics 绘制一定数量的圆圈。
绘制圆圈相当简单,但我只应该在它出现在可见区域内时绘制圆圈。我知道我可以调用方法getClipBounds() 来确定绘图区域,但是我无法找到确定圆是否与矩形相交的方法的java 实现。
这是确定我要绘制的圆圈是否完全可见的正确方法还是有更简单的方法?
【问题讨论】:
我有一个任务是使用java.awt.Graphics 绘制一定数量的圆圈。
绘制圆圈相当简单,但我只应该在它出现在可见区域内时绘制圆圈。我知道我可以调用方法getClipBounds() 来确定绘图区域,但是我无法找到确定圆是否与矩形相交的方法的java 实现。
这是确定我要绘制的圆圈是否完全可见的正确方法还是有更简单的方法?
【问题讨论】:
不要使用 Graphics.fillOval(...) 方法进行绘画。
相反,您可以使用Graphics2D.fill(Shape) 方法。您可以使用 Ellipse2D 类创建椭圆形 Shape 对象。
但我很难找到确定圆是否与矩形相交的方法的 java 实现。
Shape 对象有一个方法可以让您获得Shape 的矩形边界。然后您可以使用 Graphics 区域的 Rectangle.contains(...) 方法来确定 Shape 是否完全包含在您的面板中。
查看Playing With Shapes 了解更多信息和想法。
【讨论】:
例如使用 Ellipse2D.Float 来实例化一个对象:
Shape circle = new Ellipse2D.Float(100.0f, 100.0f, 100.0f, 100.0f);
基本上参数,从左到右,是:Height,Width,左上角的X和左上角的Y,并且通过保持X和Y都大于或等于0,您的圆圈将始终可见.
在 Java SE 7 中为 Ellipse2D.Float 记录了 Float(...) 的参数
http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.Float.html
【讨论】: