【问题标题】:How to implement Area.contains(Area)?如何实现 Area.contains(Area)?
【发布时间】:2012-01-18 13:07:37
【问题描述】:

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

我试过了:

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


【解决方案1】:

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

编辑:要处理凹多边形,您首先需要将多边形拆分为凸多边形,然后您就可以正确使用上述方法。我在one of my applications中使用了两种不同的多边形分解算法,建议你看看他们的代码:

【讨论】:

  • 它不起作用,因为多边形既可以是凸的也可以是非凸的。我已经考虑过了。关于注释 - 谢谢,但我知道,有人编辑了我的帖子...
  • 如果您还检查第一个多边形的每个顶点是否在第二个多边形之外,它就可以工作。
  • 您也可以将多边形转换为凸多边形,那么测试就很简单了。查看我的版本。
  • 谢谢,但这意味着完全重写标准库(没有分解功能)或使用额外的库。无论如何,它有效,我需要什么。我将尝试将其与 java 的标准链接。
猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 2018-02-26
  • 2017-08-06
  • 2016-07-19
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多