【问题标题】:distance between two Shapes/Areas in Java?Java中两个形状/区域之间的距离?
【发布时间】:2013-06-12 07:34:57
【问题描述】:

如果我有两个由各种简单形状(多边形和椭圆)组合而成的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),它给了我一个双精度值,表示区域 a 中的任何点和区域 b 中的任何点之间的最短距离。这是上面两个区域的图像,蓝色的线表示我感兴趣的距离:

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

【问题讨论】:

    标签: java distance shape area


    【解决方案1】:

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

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

    This Wikipedia article 描述了如何有效地实现它以避免二次明显的实现。

    【讨论】:

    • 谢谢!到目前为止,PathIterator 非常适合我的目的,尤其是扁平路径迭代器。
    【解决方案2】:

    使用豪斯多夫距离

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-02
      • 2012-05-07
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多