1

java.awt.Rectangle を使用して 2 つの長方形の交点を計算することにしたとき、私はタスクを開発していました。

思っていたのと違う結果になったことに気づきました。この方法がどのように機能するかを理解したかどうかはわかりません。

ここの例の値については java.awt.Rectangle[x=0,y=10,width=5,height=8] java.awt.Rectangle[x=3,y=15,width=17,height=14]

交差することを期待していますjava.awt.Rectangle[x=3,y=10,width=2,height=8]が、代わりにプログラムが印刷さjava.awt.Rectangle[x=3,y=15,width=2,height=3]れます!

ここに私のコードがあります:

public void printIntersection(){ 
    Rectangle r1 = new Rectangle(0, 10, 5, 8);
    Rectangle r2 = new Rectangle(3, 15, 17, 14);
    Rectangle r3 = r1.intersection(r2);

    System.out.println(r1);
    System.out.println(r2);
    System.out.println(r3);

}

ここで何が欠けているかを指摘して、誰かが私を助けることができますか?

更新:私の混乱の原因は、コードがコンストラクターの (x,y) 値を左下隅として扱うのに対し、クラスのドキュメントではそれらが左上隅であると示唆していることです!

4

3 に答える 3

3

あなたが得ている答えは正しいです。メソッドは次のように機能します。

1 番目の長方形:

  • X 座標: 0
  • Y 座標: 10
  • 幅: 5
  • 高さ: 8

2 番目の長方形:

  • X 座標: 3
  • Y 座標: 15
  • 幅: 17
  • 高さ: 14

交点の X 座標と Y 座標は 2 番目の長方形と同じです。幅は 5-3=2、高さは 18-15=3

于 2013-05-27T11:05:19.547 に答える
2

私もこれには困りました。私が考える方法は、使用されるグリッドが y 軸で反転されているということです。ポイント 0.0 は画面の左上にあり、ポイント 0,1 はそのポイントの上ではなく下にあるため、元のコードの y 軸を反転することで期待する答えを得ることができます。

例えば。

public void printIntersection(){ 
Rectangle r1 = new Rectangle(0, 10 * -1 , 5, 8);
Rectangle r2 = new Rectangle(3, 15 * -1, 17, 14);
Rectangle r3 = r1.intersection(r2);

System.out.println(r1);
System.out.println(r2);
System.out.println(r3);

}

これにより、期待する答えが得られるはずです

于 2015-02-10T05:33:59.990 に答える
0

長方形の対角は(0,10),(5,18)(3,15),(20,29)であるため、交点は(3,15),(5,18)であるため、結果は期待どおりだと思います。結果として得られるものの反対側の角は、最初のものの右下と 2 番目のものの左上であることに注意してください。

編集:それが機能する方法は次のとおりです。開始点は(x,y)であり、側面は開始点に幅と高さを追加して計算されるため、反対側のコーナーは(x+width,y+height)

最後の注意: (0,0) はキャンバスの左上隅です: 以下に例を示します: (0,0,4,4) と (2,2,4,4) の交点は (2,2,2) ,2): (2,2) は左上隅、(2+2,2+2) は反対側の隅

ここに画像の説明を入力

于 2013-05-27T10:54:12.640 に答える