2013-06-16 35 views
6

Se ho due java.awt.geom.Area create dall'unione di varie forme semplici (poligoni ed ellissi), esiste un metodo là fuori per trovare la distanza (cioè la distanza più vicina) tra le due aree?distanza tra due forme/aree in Java?

Per chiarire: supponiamo di avere due aree arbitrarie, ognuno dei quali è creato dall'unione di forme di qualsiasi tipo:

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

Quello che voglio è un metodo getDistance(Area a, Area b) che mi dà una doppia che rappresenta la più breve distanza tra qualsiasi punto dell'Area a e qualsiasi punto dell'Area b. Ecco l'immagine di queste due aree con una linea blu che indica la distanza che mi interessa:

Areas a and b, and the distance between them

Esiste un metodo là fuori per fare questo? In caso contrario, come potrei implementarne uno?

risposta

3

Non sembra esserci un metodo che lo faccia esattamente; tuttavia, utilizzando PathIterator s, dovresti essere in grado di confrontare da punto a punto lungo il contorno delle forme e trovare la distanza manualmente.

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

This Wikipedia article descrive come è possibile implementare in modo efficiente questo per evitare l'ovvio implementazione quadratica.

+0

Grazie! Il PathIterator funziona bene per i miei scopi finora, in particolare l'iteratore di percorso appiattito. – MarcTheSpark

Problemi correlati