如果我有两个java.awt.geom.Area
由各种简单形状(多边形和椭圆形)组合而成,那么有没有一种方法可以找到两个区域之间的距离(即最近距离)? / p>
澄清:假设我有两个任意区域,每个区域都是从任何形状的联合创建的:
//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)
,它给出了一个双精度,表示区域a中任意点与区域b中任意点之间的最短距离。这是上面两个区域的图像,蓝色的线条表示我感兴趣的距离:
有没有办法做到这一点?如果没有,我该如何实施?
答案 0 :(得分:3)
似乎没有一种方法可以做到这一点;但是,使用PathIterator
s,您应该能够沿着形状轮廓比较点到点并手动找到距离。
http://docs.oracle.com/javase/6/docs/api/java/awt/geom/PathIterator.html
This Wikipedia article描述了如何有效地实现这一点以避免二次明显的实现。
答案 1 :(得分:3)
使用 Hausdorff距离
检查如何使用hausdorff距离的非常明确的解释: http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html