2013-06-16 25 views
6

Jeśli mam dwa java.awt.geom.Area wykonane z połączenia różnych prostych kształtów (wielokątów i elips), czy istnieje metoda znalezienia odległości (tj. Najbliższa odległość) między dwoma obszarami?Odległość między dwoma kształtami/obszarami w Javie?

Dla wyjaśnienia: Załóżmy, że mam dwóch dowolnych obszarów, z których każdy jest utworzony z unii kształtów każdego rodzaju:

//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))); 

Co chcę jest metoda getDistance(Area a, Area b) że daje mi podwójną reprezentujący najkrótsza odległość między dowolnym punktem w obszarze a a dowolnym punktem w obszarze b. Oto obraz z dwóch powyższych obszarach o linię na niebiesko wskazując odległość Jestem zainteresowany:

Areas a and b, and the distance between them

Czy istnieje metoda tam, aby to zrobić? Jeśli nie, jak mogę ją wdrożyć?

Odpowiedz

3

Wydaje się, że nie istnieje metoda, która dokładnie to robi; jednak, używając PathIterator s, powinieneś być w stanie porównać punkt do punktu wzdłuż obrysu kształtów i znaleźć odległość ręcznie.

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

This Wikipedia article opisuje w jaki sposób można skutecznie realizować to, aby uniknąć kwadratowego oczywistą realizację.

+0

Dzięki! PathIterator działa dobrze dla moich dotychczasowych celów, szczególnie dla iteratora spłaszczonej ścieżki. – MarcTheSpark

Powiązane problemy