如何实现Area.contains(Area)?

问题描述 投票:0回答:2

有 2 个区域 (

java.awt.geom.Area
) area1area2。我需要验证 area2 是否在 area1 内? (区域 1 包含 区域 2)。

我已经尝试过:

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

但它并不总是按其应有的方式工作(如果 area2 的边界在 area1 的边界上,则返回 true,应该返回 false)。

事实上,我有 2 个多边形(java.awt.Polygon),我需要 Polygon.contains(Polygon) 方法,这可能比区域更容易。

有什么想法吗?

多边形可以是凸多边形和非凸多边形。

java geometry polygon area
2个回答
1
投票

既然你有了 Polygon.contains(Point),你可以通过测试第二个多边形的每个点是否都在第一个多边形内来实现你所需要的(我梦想有一个 JDK 版本可以实现程序员的所有基本需求,比如 .网)。

编辑:要处理凹多边形,您首先需要将多边形拆分为凸多边形,然后您才能正确使用上述方法。我在我的一个应用程序中使用了两种不同的多边形分解算法,我建议您查看他们的代码:


0
投票

也许我很天真,但是从封闭区域中减去封闭区域不应该会导致空白区域吗?而且这不是很容易检查吗?对我来说似乎只是一个班轮。我错过了什么?

boolean Area.contains(Area ar)
{
  return ar.substract(this).isEmpty();
}
© www.soinside.com 2019 - 2024. All rights reserved.