# Probleme beim Zeichnen eines Koordinatensystems



## Rentier (5. Jan 2010)

Hallo,

Ich habe versucht, mir ein eigenes Koordinatensystem zu programmieren und auch zu zeichnen. Will ich aber die Achsen beschriften, wird da eine Einheit übersprungen.

Für die Achsen:

```
public void draw(Graphics gr)
	{
		gr.setFont(f);
		gr.drawLine(rand_x			, rand_y+größe/2, rand_x+größe		, rand_y+größe/2);		  	// x-Achse
		gr.drawLine(rand_x + größe/2, rand_y		, rand_x + größe/2	, rand_y+größe);			// y-Achse
		gr.fillPolygon(p1() );
		gr.fillPolygon(p2() );
		
		for(int i = 0; i <= größe && i <= größe;i=i+20)
		{
		gr.drawLine(rand_x + i , größe/2 + rand_y-linie, rand_x + i,größe/2 + rand_y + linie);			//x-Einteilung
		gr.drawLine(größe/2 + rand_x-linie, rand_x + i, größe/2+ rand_x + linie, rand_x + i);			//y-Einteilung
		}
	}
[/Java]

Und dann für die Beschriftung:
[code=Java]
public void beschriften(Graphics gr, int skalierung)
	{
		this.skalierung = skalierung;
		final int value = größe/4+rand_x/2;
		FontMetrics fm = gr.getFontMetrics(f);
		String beschriftung;
		int x = -1 * value/10;
		int w,
			h;		
		
		for(int i = rand_x; i <= rand_x + größe; i += 20)
		{
			beschriftung = String.valueOf(x);
			w = fm.stringWidth(beschriftung)/2;
			
			if(x != 0)
			{
				if(x % 1 == 0)
				{
					gr.drawString(beschriftung, i - w, rand_x + größe/2 + 40);
				}
			}			
			x++;			
		}
	}
```

Kann mir jemand sagen, woran das liegt?

Schonmal danke!


----------



## javimka (5. Jan 2010)

Was meinst du mit "Einheit" und welche wird übersprungen? Könnte es an Zeile 18 liegen: [c]if(x % 1 == 0)[/c]

Deine for-Schleife kannst du etwas kürzen: [c] i <= größe && i <= größe[/c]
Buchstaben wie ö und ß solltest du in deinem Programmcode unbedingt vermeiden.


----------



## Rentier (5. Jan 2010)

Die Zeile macht, dass ich sagen kann, welche Zahlen ich darstellen will, zum Beispiel wird mein Koordinatensystem nur mit  geraden Zahlen beschriftet.

Hier:


----------



## Michael... (5. Jan 2010)

Bin mir nicht sicher, ich verstanden habe was mit eine Einheit übersprungen gemeint ist.
Aber Deine Achsen sind falsch zu einander positioniert die y-Achse schneidet die x-Achse bei -0,5 und umgekehrt schneidet die x-Achse bei irgendenem ?,5 Wert


----------



## javimka (5. Jan 2010)

Die einzige Zahl, zwischen -1 und +1 ist ja 0, also ist das wohl "die übersprungene Einheit"? Wenn ja, dann hast du das ja explizit und unmissverständlich in deinen Code einprogrammiert, Zeile 16: [c]if(x != 0)[/c]


----------



## Landei (6. Jan 2010)

Na wenn du genau die "Mitte" von -13 und 12 nimmst, ist das (-13+12)/2 = -0.5


----------



## Rentier (6. Jan 2010)

Ich dachte, die Achsen müssten richtig stehen, aber für 
	
	
	
	





```
groeße = 500
```
, wie ich es gewählt hatte, war ja der Schnittpunkt S(500/2|500/2), bei der Skalierung aller Werte liegt das ja leider zwischen 240 und 260. Danke für die Tipps von euch, aber jetzt habe ich noch das Problem, das bei mir das Koordinatensystem mit Rand immernoch hässlich ist, weil es falsch verschoben wird. Kann ich einen Frame in einen anderen einbauen, nur mit Rand drumrum?


----------



## javimka (6. Jan 2010)

du meinst wohl Panel, nicht Frame. Was meinst du denn mit "falsch verschoben" ? Sorry, aber ich kann deine Ausdrücke einfach nicht nachvollziehen. Wie sieht denn zurzeit dein Layout aus, also jenes des Parents von dem Panel mit dem Koordinatensystem?


----------



## Rentier (6. Jan 2010)

Tut mir leid, dass ich kein guter Beschreibär bin. Das Problem mit dem verschieben habe ich behoben, indem ich den Rand auf 0 lasse, ist einfacher für mich. Vor allem, wenn ich die Koordinaten von Java in Koordinaten von mir umrechnen will.

Nur noch 2 Fragen, wenn ihr noch Lust habt:

1) Geht das mit Java?:






2) Wird oben links in der Menüleiste (0|0) gesetzt oder erst ab der weißen Fläche?


----------



## javimka (6. Jan 2010)

1. Mit Java kriegst du jedes Layout hin, also auch dieses. Das BorderLayout oder BoxLayout (Y_AXIS) könnten nützlich sein.
2. Ganz oben links des Fensters, oberhalb der Menubar ist die Position (0,0) des Fensters. Der Nullpunkt der weisse Fläche ist natürlich oben links der weissen Fläche und der Nullpunkt des Fenster inhalts, den du mit frame.getContentPane() erhälst, ist ebenfalls oben linke, aber unterhalb der Menubar.


----------



## Rentier (6. Jan 2010)

Danke für eure Hilfe, jetzt ist alles geklärt!
Mfg


----------

