Plot-Funktion in Java
Ich Schreibe ein Programm zum zeichnen [x(t),y(t)] mit der variable t in einem bestimmten Bereich (Eingabe durch Nutzer). Bisher habe ich 3 Vektoren zu halten Werte von t, x(t) und y(t). Mein Aktueller Ansatz ist das erstellen von Vektoren der Punkte (um 1000 Punkte), dann ziehen Sie eine Linie (oder Pfad) zwischen zwei benachbarten Punkten in den Vektor. Das Ergebnis ist jedoch nicht als das, was ich erwartet hatte.
Den vollen format von den Benutzern:
Plot [x(t),y(t)] x=a..b y=a..b t=a..b where a,b are the range of x,y,t
Beispielsweise kann der Benutzer Eingabefunktionen:
x(t) = 5*sin(3t + 5), t=-19..19
y(t) = 4*cos(2t), t=-19.19
Hier ist mein code für die Zeichnung:
public static void drawGraph(String sf, String sx, String sy, String st) {
JFrame mygraph = new JFrame("PlotGraph v0.1");
final Vector<Double> range_t = getRangeT(st); //get the range of t
//create a corresponding vectors of x and y based on values of t
final Vector<Double> range_x = getRangeX(range_t,funcX,var);
final Vector<Double> range_y = getRangeY(range_t,funcY,var);
//draw the graph to a JPanel, our graph is actually just a collection of points connecting 2 points
mygraph.add(new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.BLUE );
g2.setStroke(new BasicStroke(1));
GeneralPath gpx = new GeneralPath();
GeneralPath gpy = new GeneralPath();
for (int i=0; i<998; i++) {
gpy.moveTo(range_t.get(i),range_y.get(i));
gpy.curveTo(range_t.get(i),range_y.get(i),range_t.get(i+1),range_y.get(i+1),range_t.get(i+2),range_y.get(i+2));
gpx.moveTo(range_t.get(i),range_x.get(i));
gpx.curveTo(range_t.get(i),range_x.get(i),range_t.get(i+1),range_x.get(i+1),range_t.get(i+2),range_x.get(i+2));
//g2.draw(lineY);
g2.draw(gpx);
g2.draw(gpy);
}
g2.dispose();
}
});
mygraph.setBounds(125,25,650,600);
mygraph.setLocationRelativeTo(null);
mygraph.setDefaultCloseOperation(mygraph.EXIT_ON_CLOSE);
mygraph.setVisible(true);
}
Und hier ist, was ich bekomme für die 2 oben genannten Funktionen:
FRAGE: gibt es eine Möglichkeit, ich kann den plot besser (scale it up)?!
- Ich denke, Sie werden bessere Ergebnisse erhalten (Antworten), wenn Sie tag-Ihre Frage "java"
- Was sind die Grenzen gesetzt, die auf Ihre Zeichnung Komponente?
- Auch könnte Sie post ein SSCCE?
- Dass die Formatierung des Codes war, mich zu töten.
- Sorry Jungs, ich kopiert, eingefügt, dass es von meinem editor 🙁
- Fixed format! Ich hasse den editor SO aus
- Die Grenzen der Zeichnung bestimmt werden, die vom Benutzer wie in meinem editierten post.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es für mich bist du wie eine Grafik des parametrischen Gleichungen falsch.
Für parametrische Gleichungen, sollten Sie Durchlaufen
t
von tmin bis tmax. Bei jedem Wert, bewerten Sie x(t) und y(t), und Plotten Sie einen Punkt, da - (x(t), y(t)).Es sieht aus wie du bist Plotten Punkte at (t, y(t)), etc. Sie benötigen eine Hilfsfunktion, um bewerten der Benutzer-Eingabe-Funktion für jede variable, zum Beispiel:
In diesen Funktionen haben Sie, um eine Analyse der Benutzer text in code (tokenisierung, vielleicht?) und dann bewerten Sie es.
Dann können Sie eine Schleife wie folgt:
Von dort aus einen Skalierungsfaktor sollte einfach zu implementieren. Probieren Sie etwas wie dieses:
y = -(scale * evaluateY(t) + offsetY)
, undx = scale * evaluateX(t) + offsetX
. Das ist wirklich hängt alles davon ab, Ihr diagrammfenster.