PDA

View Full Version : [Java] Classe per tracciare punti


guylmaster
02-03-2012, 23:25
Salve,
come ormai è risaputo sto affrontando un algoritmo di navigazione, forse ho finalmente affinato la funzione per ricreare la rotta e mi servirebbe qualche libreria (magari anche qualche esempietto :D) per tracciare la rotta.

Stavo pensando a qualcosa di molto semplice, io ho langitudine e latitudine sotto forma di float arrotondati alla seconda cifra decimale e pensavo semplicemente a qualcosa in grado di tracciare un insieme di punti. Se poi come sfondo per questi punti potessi dargli tipo un immagine di sfondo (la cartina) sarebbe perfetto.

Avete qualcosa da suggerire?

Vi ringrazio in anticipo,
guylmaster.

PGI-Bis
03-03-2012, 00:09
Le librerie sono incluse nella piattaforma standard. Adesso sto scrivendo una roba in Scala per cui ti faccio l'esempio in Scala ma e API sono le stesse. Questo è un componente di un'interfaccia grafica che disegna tre quadratini in altrettanti punti:

class Tracker extends javax.swing.JPanel {
import java.awt.geom.{Rectangle2D, Point2D}
import java.awt.{Color, Graphics, Graphics2D}

val punti = List(new Point2D.Double(0,0), new Point2D.Double(35, 35), new Point2D.Double(122.4, 134.5))
val quadratino = new Rectangle2D.Double(0,0, 10, 10)

override def paintComponent(g: Graphics) {
super.paintComponent(g)
var g2 = g.asInstanceOf[Graphics2D]
g2.setPaint(Color.WHITE)
g2.fillRect(0,0,getWidth(),getHeight())

punti.foreach{ p =>
g2.translate(p.x, p.y)
g2.setPaint(Color.GREEN)
g2.fill(quadratino)
g2.setPaint(Color.BLACK)
g2.draw(quadratino)
g2.translate(-p.x, -p.y)
}
}
}

Graphics2D funziona come un plotter vettoriale. Per mettere un'immagine sullo sfondo, prima di disegnare i puntini scrivi:

g2.drawImage(immagine, 0, 0, null);

"immagine" può essere una BufferedImage, che carichi fuori dal paintComponent in un campo, usando javax.imageio.ImageIO:

private BufferedImage immagine;

..nel costruttore
immagine = ImageIO.read(un file o un url);

Ficchi poi l'istanza di Tracker in un frame, tipo:

JFrame frame = new JFrame("Ciao");
frame.add(new Tracker());
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(400,400);
frame.setVisible(true);

Da tener conto che il sistema di coordinate di Java2D (quella roba del Graphics) ha l'origine "in alto a sinistra", le x crescono verso destra, le y verso il basso.