2009-04-21 7 views
0

Ich möchte ein Array von X- und Y-Ganzzahlen zu einem Panel in einem Java-Frame zeichnen.Enthält Zeichnung zu einem Bedienfeldbereich

Was ist der beste Weg, um die Linie zu zeichnen (derzeit verwende ich Graphics drawPolyline)?

Wie kann ich effizient skalieren die Integer-Werte, so dass sie alle in den Panel-Bereich passen, ohne den maximalen (Y) Wert zu kennen?

aktualisieren, zum Beispiel

public void paint(Graphics g) 
{ 
    int height = panel.getHeight(); 
    int width = panel.getWidth(); 
    int[] xPoints = { ... values ... }; 
    int[] yPoints = { ... values ... }; 
    int nPoints = dataLength; 
    // Scale xPoints and yPoints so they fit in the area of width and height 
    // and draw line 
    g.drawPolyline(xPoints, yPoints, nPoints); 
    g.dispose(); 
} 
+0

Was meinst du mit "Zeichne ein Array von X- und Y-Ganzzahlen" - möchtest du die durch diese Ganzzahlen angegebenen Punkte zeichnen oder Linien zeichnen, die sie verbinden, oder die Zahlen selbst zeichnen? –

Antwort

2

Ohne sowohl die x- und y-Maximalwerte zu kennen, glaube ich nicht, das getan werden kann, da man dann nicht erforderlich, um die Skala berechnen kann. Aber wenn Sie ein Array von Punkten haben, können Sie sicher suchen, um die minimalen und maximalen x- und y-Werte zu finden.

Wenn Sie eine Möglichkeit haben, die Maximalwerte zu erhalten, lesen Sie weiter (und für andere mit einem ähnlichen Problem).

Die maximale Differenz zwischen zwei beliebigen x-Werten zwischen zwei y-Werten ermitteln. nenne sie max (dx) und max (dy) - das sind max (x) -min (x) bzw. max (y) -min (y).

Nehmen Sie die größere Breite/max (dx) und Höhe/max (dy). Diese Nummer liefert deine Skala; modifiziere einfach jeden x-Wert mit ((x-min (x))/skalieren) und jedem y-Wert mit ((y-min (y))/skalieren)

Du solltest jetzt die größte Form haben, die sich orientiert relativ 0,0.

Hinweis: Ich habe negative Koordinaten, Sie müssen sie in den positiven Koordinatenbereich anpassen, bevor Sie diese Formeln anwenden.