6

如果我有两个java.awt.geom.Area由各种简单形状(多边形和椭圆)组合而成的,是否有一种方法可以找到两个区域之间的距离(即最近距离)?

澄清一下:假设我有两个任意区域,每个区域都是由任何类型的形状的联合创建的:

//Define the first area
Area a = new Area(new Ellipse2D.Double(50, 50, 100, 100));
a.add(new Area(new Rectangle2D.Double(100, 100, 100, 100)));

//Define the second area
Area b = new Area(new Ellipse2D.Double(200, 300, 100, 100));
b.add(new Area(new Ellipse2D.Double(250, 250, 100, 100)));

我想要的是一种方法getDistance(Area a, Area b),它给我一个 double 表示区域 a 中的任何点和区域 b 中的任何点之间的最短距离。这是上述两个区域的图像,蓝色的线表示我感兴趣的距离:

区域 a 和 b,以及它们之间的距离

有没有办法做到这一点?如果没有,我该如何实施?

4

2 回答 2

3

使用豪斯多夫距离

检查这个关于如何使用hausdorff距离的非常清楚的解释:http: //cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html

于 2014-05-02T11:02:21.213 回答
3

似乎没有一种方法可以做到这一点。但是,使用PathIterators,您应该能够沿形状轮廓逐点比较并手动查找距离。

http://docs.oracle.com/javase/6/docs/api/java/awt/geom/PathIterator.html

这篇 Wikipedia 文章描述了如何有效地实现这一点以避免二次明显的实现。

于 2013-06-16T01:38:54.417 回答