K
kafaaaloo
Gast
Hallo,
habe im rahmen eines Projektes einen Plotter programmiert in Java (Teilprojekt) wird am Ende zusammengefügt mit den anderen teilprojekten wie zB (Parser und 3d-plotter). So nun zu meinem "kleinen" Problem, versuche nun abhängig von der Funktion die Achsenbeschriftung irgendwie hinzubekommen... xmin & xmax wird mir übergeben.. nun wollte ich wenigstens eine Einteilung haben.
Hier der Quelltext, vllt. hat ja jemand nen Vorschlag...
habe im rahmen eines Projektes einen Plotter programmiert in Java (Teilprojekt) wird am Ende zusammengefügt mit den anderen teilprojekten wie zB (Parser und 3d-plotter). So nun zu meinem "kleinen" Problem, versuche nun abhängig von der Funktion die Achsenbeschriftung irgendwie hinzubekommen... xmin & xmax wird mir übergeben.. nun wollte ich wenigstens eine Einteilung haben.
Hier der Quelltext, vllt. hat ja jemand nen Vorschlag...
Code:
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.Color;
public class Plotter extends JPanel
{
BufferedImage graph = new BufferedImage(600, 600, BufferedImage.TYPE_INT_RGB);
JFrame frame = new JFrame("Plotter");
// wie fein gezeichnet wird der Graph sein?
// Schrittweite für die Schleife
double granularity = 0.1;
// scale-Faktor
int scale = 30;
public Plotter(int farbe, int xmin, int xmax, int strichwahl) {
super();
setPreferredSize(new Dimension(graph.getWidth(), graph.getHeight()));
Graphics gr = graph.getGraphics();
gr.setColor(Color.white); // Hintergrund
gr.fillRect(0,0,graph.getWidth(), graph.getHeight());
double x=xmin;
double y=0.0;
double lastX=0.0;
double lastY=0.0;
// Koordinatensystem
gr.setColor(Color.black);
gr.drawLine(graph.getWidth()/2, 0, graph.getWidth()/2, graph.getHeight()); //Y-Achse
gr.drawLine(graph.getWidth()/2-5, 10, graph.getWidth()/2, 0);//PFEIL Y-Achse
gr.drawLine(graph.getWidth()/2+5, 10, graph.getWidth()/2, 0);
gr.drawLine(0, graph.getHeight()/2, graph.getWidth(), graph.getHeight()/2); //X-Achse
gr.drawLine(graph.getWidth()-10, graph.getHeight()/2-5, graph.getWidth(), graph.getHeight()/2); //PFEIL X-Achse
gr.drawLine(graph.getWidth()-10, graph.getHeight()/2+5, graph.getWidth(), graph.getHeight()/2);
gr.drawString("x", graph.getWidth()-20, graph.getHeight()/2-10); //x-Achsenbeschriftung
gr.drawString("y", graph.getWidth()/2+10, 20); //y-Achsenbeschriftung
for (int i=-graph.getWidth()/2; i<=graph.getWidth()/2; i+=10) // Achseneinteilung klein
{ gr.drawLine(
graph.getWidth()/2-4, graph.getHeight()/2+i,
graph.getWidth()/2+4, graph.getHeight()/2+i);
}
for (int i=-graph.getWidth()/2; i<=graph.getWidth()/2; i+=10)
{ gr.drawLine(
graph.getWidth()/2+i, graph.getHeight()/2-4,
graph.getWidth()/2+i, graph.getHeight()/2+4);
}
for (int i=-graph.getHeight()/2; i<=graph.getHeight()/2; i+=50) //Achseneinteilung gross
{ gr.drawLine(
graph.getWidth()/2-10, graph.getHeight()/2+i,
graph.getWidth()/2+10, graph.getHeight()/2+i);
}
for (int i=-graph.getHeight()/2; i<=graph.getHeight()/2; i+=50)
{ gr.drawLine(
graph.getWidth()/2+i, graph.getHeight()/2-10,
graph.getWidth()/2+i, graph.getHeight()/2+10);
}
gr.drawString("", graph.getWidth()/2-25,
graph.getHeight()/2-45);
gr.drawString("", graph.getWidth()/2+45,
graph.getHeight()/2-15);
// Graph
switch (farbe){ // Farbwahl d. Funktion
case 1: gr.setColor(Color.BLUE); break;
case 2: gr.setColor(Color.CYAN); break;
case 3: gr.setColor(Color.DARK_GRAY); break;
case 4: gr.setColor(Color.GRAY); break;
case 5: gr.setColor(Color.RED); break;
case 6: gr.setColor(Color.MAGENTA); break;
case 7: gr.setColor(Color.ORANGE); break;
case 8: gr.setColor(Color.PINK); break;
case 9: gr.setColor(Color.YELLOW); break;
default: gr.setColor(Color.BLACK);
}
for (x=xmin; x<xmax; x+=granularity) {
y = funktion(x); // Funktion
switch (strichwahl){ // Strichwahl d. Funktion; 0: durchgezogene - case 1: gepunktete Linie
case 0: gr.drawLine((int)lastX, (int)lastY, (int)(graph.getWidth()/2+x*scale), (int)(graph.getHeight()/2-y*scale) );
//
case 1: gr.drawOval((int)lastX, (int)lastY, 1, 1);
case 2: gr.drawRect((int)lastX, (int)lastY, 1, 7);
}
lastX = (int)(graph.getWidth()/2+x*scale);
lastY = (int)(graph.getHeight()/2-y*scale);
}
frame.setContentPane(this);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public double funktion(double x) {
return 2*x*x; // hier die Funktion
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(graph, 0, 0, null);
}
public static void main (String args[]) {
new Plotter(5,-50,50,0);
}
}