6

さまざまな単純な形状 (ポリゴンと楕円) の結合から2 つjava.awt.geom.Areaの を作成した場合、2 つの領域間の距離 (つまり、最も近い距離) を見つける方法はありますか?

明確にするために: 2 つの任意の領域があり、それぞれが任意の種類の形状の結合から作成されているとします。

//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 の任意の点の間の最短距離を表す double を与えるメソッドです。これは、上記の 2 つのエリアの画像で、青色の線が関心のある距離を示しています。

エリアaとb、およびそれらの間の距離

これを行う方法はありますか?そうでない場合、どのように実装できますか?

4

2 に答える 2

3

ハウスドルフ距離を使用

hausdorff Distance の使用方法に関するこの非常に明確な説明を確認してください: 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

このウィキペディアの記事では、2 次の明らかな実装を回避するためにこれを効率的に実装する方法について説明しています。

于 2013-06-16T01:38:54.417 に答える