# Achsenbeschriftung eines Koordinatenkreuzes



## kafaaaloo (6. Feb 2007)

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...

```
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);
        }
}
```


----------



## André Uhres (7. Feb 2007)

```
...
    public Plotter(int farbe, int xmin, int xmax, int strichwahl) {
...
        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);
             String zahl = String.valueOf(i);
             if(i == 0) zahl = "";
             int width = gr.getFontMetrics().stringWidth(zahl);
             int x1 = graph.getWidth()/2-11-width;
             int y1 = graph.getHeight()/2+i+4;
             if(y1 < 10) y1 = 10;
             if(y1 > graph.getHeight()) y1 = graph.getHeight();
             gr.drawString(zahl, x1, y1);
        }
        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);
            String zahl = String.valueOf(i);
            if(i == 0) zahl = "";
            int width = gr.getFontMetrics().stringWidth(zahl);
            int x1 = graph.getWidth()/2+i-width/2;
            int y1 = graph.getHeight()/2+21;
            if(x1 < 0) x1 = 0;
            if(x1+width > graph.getWidth()) x1 = graph.getWidth()-width;
            gr.drawString(zahl, x1, y1);
        }
...
    }
...
```


----------



## kafaaaloo (7. Feb 2007)

vielen Dank! :toll:


----------



## kafaaaloo (7. Feb 2007)

ok, hab nun bissl "rumgespielt" aber wenn ich xmin & xmax änder' , dann bleibt die achseneinteilung konstant - sollte aber von xmin & xmax abhängig sein 
oder funktioniert e sbei mir bloss nicht wie es sollte?


----------



## Guest (7. Feb 2007)

Ok habs nun in Abhängigkeit von xmin,xmax,fmin & fmax hinbekommen...  vielen dank :toll:


----------

