3

这是我的Java问题:

我的 Circle 类实现了 Shape 接口,因此它必须实现所有需要的方法。我对“测试形状的内部是否完全包含指定的 Rectangle2D”的方法 boolean contains(Rectangle2D r) 有疑问。现在, Rectangle2D 是一个抽象类,它不提供(据我所知)任何获取矩形角坐标的方法。更准确地说:“Rectangle2D 类描述了一个由位置 (x, y) 和尺寸 (wxh) 定义的矩形。该类只是所有存储 2D 矩形的对象的抽象超类。坐标的实际存储表示留给子类”。

那么我该如何解决呢?

请在下面找到我的代码的一部分:

public class Circle implements Shape
{
private double x, y, radius;

public Circle(double x, double y, double radius)
{
    this.x = x;
    this.y = y;
    this.radius = radius;
}

// Tests if the specified coordinates are inside the boundary of the Shape
public boolean contains(double x, double y)
{
    if (Math.pow(this.x-x, 2)+Math.pow(this.y-y, 2) < Math.pow(radius, 2))
    {
        return true;
    }
    else
    {
        return false;
    }
}

// Tests if the interior of the Shape entirely contains the specified rectangular area
public boolean contains(double x, double y, double w, double h)
{
    if (this.contains(x, y) && this.contains(x+w, y) && this.contains(x+w, y+h) && this.contains(x, y+h))
    {
        return true;
    }
    else
    {
        return false;
    }
}

// Tests if a specified Point2D is inside the boundary of the Shape
public boolean contains(Point2D p)
{
    if (this.contains(p.getX(), p.getY()))
    {
        return true;
    }
    else
    {
        return false;
    }
}

// Tests if the interior of the Shape entirely contains the specified Rectangle2D
public boolean contains(Rectangle2D r)
{
    // WHAT DO I DO HERE????
}
}
4

4 回答 4

4

Rectangle2D继承getMaxX, getMaxY, getMinX, getMinYRectangularShape。所以你可以得到角落的坐标。

http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/geom/Rectangle2D.html

请参阅“从类 java.awt.geom.RectangularShape 继承的方法”。

于 2012-04-24T14:56:59.160 回答
1

使用路径迭代器。适用于所有凸形

PathIterator it = rectangle.getPathIterator(null);
while(!it.isDone()) {
    double[] coords = new double[2];
    it.currentSegment(coords);
    // At this point, coords contains the coordinates of one of the vertices. This is where you should check to make sure the vertex is inside your circle
    it.next(); // go to the next point
}
于 2012-04-24T14:59:18.647 回答
0

鉴于您当前的实施:

    public boolean contains(Rectangle2D r)
{
    return this.contains(r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
于 2012-04-24T15:00:03.587 回答
0

您可以将Ellipse2D.Double宽度和高度设置扩展为相同的值。

Ellipse2D.Double(double x, double y, double w, double h)

然后你可以使用它的contains方法将Rectangle2D角传递给它(你有左上角 X 和 Y 以及宽度和高度,所以计算角是微不足道的)。true返回用于contains应用于所有矩形角表示圆包含矩形

于 2012-04-24T15:08:48.163 回答