簡體   English   中英

java.awt.Rectangle。 路口()

[英]java.awt.Rectangle. intersection()

當我決定使用java.awt.Rectangle計算兩個矩形之間的交點時,我正在開發一個任務。

我意識到輸出與我預期的不同。 我不確定是否了解此方法的工作方式。

對於此處示例中的值, 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)值視為左下角,而類doc建議它們是左上角!

您得到的答案是正確的。 該方法是這樣的。

第一矩形:

  • X坐標:0
  • Y坐標:10
  • 寬:5
  • 高度:8

第二矩形:

  • X坐標:3
  • Y坐標:15
  • 寬:17
  • 身高:14

對於相交,X和Y坐標與第二個矩形相同。 寬度為5-3 = 2,高度為18-15 = 3

我對此也有麻煩。 我考慮的方式是所使用的網格在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);

}

這應該給您期望的答案

矩形的相對角是(0,10),(5,18)(3,15),(20,29) ,所以相交是(3,15),(5,18) ,所以我認為結果是預期的結果。 請注意,所得結果的相對角是第一個結果的右下角和第二個結果的左上角。

編輯:它的工作方式是:起點是(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)在對角

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM