Probleme beim Zeichnen eines Koordinatensystems

Rentier

Mitglied
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:
Java:
	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!
 
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.
 
Die Zeile macht, dass ich sagen kann, welche Zahlen ich darstellen will, zum Beispiel wird mein Koordinatensystem nur mit geraden Zahlen beschriftet.

Hier:

ausgabe.jpg
 
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
 
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]
 
Ich dachte, die Achsen müssten richtig stehen, aber für
Java:
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?
 
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?
 
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?:

bild2qg.jpg


2) Wird oben links in der Menüleiste (0|0) gesetzt oder erst ab der weißen Fläche?
 
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.
 

Zurück
Oben