3

ここに私のJavaの問題があります:

私の Circle クラスは Shape インターフェイスを実装しているため、必要なすべてのメソッドを実装する必要があります。「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 を使用します。すべての凸形状で機能します

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 に答える