java.awt.Rectangle
是不是你心目中的合適的工具:但是,如果您的矩形是數學結構,而不是繪製的對象可以使用的方法add(Rectangle)
。 Rectangles
用於表示屏幕繪圖區域,其邊與x-y座標系的軸始終平行。沒有關於旋轉角度的規定。您指定的四邊形是旋轉的,因此檢查Rectangle
上的邊界將包含一個像(8, 13)
這樣的點,這是您不想要的。參見下圖:
![enter image description here](https://i.stack.imgur.com/KFf3k.png)
一個更好的選擇是java.awt.Polygon
。你可以使用Polygon
是,它是真正用於操縱圖形元素,而不是真正的設計來處理非整數的數學非常好通過
Polygon p = new Polygon(new int[] {16, 12, 8, 12}, new int[] {14, 18, 14, 10}, 4);
或可替代
Polygon p = new Polygon();
p.add(16, 14);
p.add(12, 18);
p.add(8, 14);
p.add(12, 10);
的主要問題構建它。如果您閱讀Polygon.contains(double, double)
的文檔並按照解釋內部定義的鏈接進行操作,則會看到Polygon
與其左下邊界上的Regtangle
有相同的問題。解決這個問題的一種方法是使用Polygon.contains(x, y, 1, 1)
,但這似乎是過度殺傷。
更好的選擇可能是使用java.awt.geom
中的類。我個人的建議是使用Path2D.Double
。 Path2D.Float
和GeneralPath
也是選項,但它們的精度有限。如果這對您有好處,請使用Path2D.Float
作爲偏好。
你會使用default constructor構建路徑:
Path2D.Double p = new Path2D.Double();
可以忽略的能力和纏繞,因爲你有一個微小的和凸的形狀。使用moveTo
啓動路徑,lineTo
加分的路徑現在填寫,然後closePath
完成矩形,並遏制工作:
p.moveTo(16, 14);
p.lineTo(12, 18);
p.lineTo(8, 14);
p.lineTo(12, 10);
p.closePath();
現在你應該看到的一點(8, 13)
確實是你的形狀之外:
System.out.println(p.contains(8, 13));
也是一樣(1, 1)
:
System.out.println(p.contains(1, 1));
你試過了什麼呢? SO不是免費的寫作服務。 –
如果你知道所有的4點座標,你不需要使用任何額外的類來知道你的觀點是否落入其中。嘗試將您的點的X和Y座標與4個角點中的X和Y的範圍進行比較。 –
@MadPhysicist在代碼 –