2012-01-18 27 views
0

有2個區域(java.awt.geom.Areaarea1 and area2。我需要驗證area2是否在area1? (area1 contains area2)。如何實現Area.contains(Area)?

我曾嘗試:

areaDelta = (Area)area1.clone(); 
areaDelta.add(area2); 
return areaDelta.equals(area1); 

但它不總是工作,因爲它應該(如果區2的邊界是在區1的界限,它返回true,應該返回false)。

事實上,我有2個多邊形(多邊形),我需要的Polygon.contains(多邊形)方法,可能是這可以更容易,然後區域。

任何想法?

多邊形可以是凸和非凸的。

+0

檢查http://stackoverflow.com/questions/4833802/check-if-polygon-is-inside-a-polygon 和http://stackoverflow.com/questions/3017872/determining-polygon-intersection-and-containment – Napte

+0

你可以用邊界矩形檢查嗎? – Randy

+0

找到它 - 如何做到這一點沒有任何額外的庫:做每對多邊形線的交叉線檢查,這是不容易做與標準的Java庫。但它不是最具性能的解決方案。 – Cenius

回答

1

既然你有Polygon.contains(點),你可以通過測試你的第二個多邊形的每個點是否在第一個多邊形內(我夢想實現一個程序員的每個基本需求的JDK版本,像.NET一樣)。

編輯:要處理凹形多邊形,首先需要將多邊形分成凸形,然後才能正確使用上述方法。我用了兩個不同的多邊形分解算法one of my applications,我建議你看看他們的代碼:

+0

它不起作用,因爲多邊形既可以是凸的也可以是非凸的。我已經考慮過了。關於一個音符 - 謝謝,但我知道,有人編輯我的文章... – Cenius

+0

它的工作原理,如果你還檢查第一個多邊形的每個頂點是在第二個多邊形之外。 – Joni

+0

你也可以將你的多邊形轉換成凸多邊形,然後測試是微不足道的。看我的版本。 –