ubuntuusers.de

Java Koordinatensystem

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Hellboy256

Anmeldungsdatum:
19. September 2009

Beiträge: 208

Haeng im Moment absolut auf der Leitung. Ich wuerde gerne ein Koordinatensystem zeichnen und in dieses anschliessend einen Graphen. Fuer das Koordinatensystem habe ich im Moment folgendes:

class Test {
   private int interval = 15;      //Interval in dem die punkte aufgetragen werden
   private int zeroY = 290;       //die y-nullpunkt entfernung vom oberen fensterrand
   private int maxValue = 200;    //Der maximale Wert an der y-Achse

void draw() {
      
   int numValues = maxValue / interval;   //berechne die anzahl der unterteilungen
   int diff = zeroY / numValues;      //Die differenz zwischen den einzelnen einteilungen

    //nun werden die unterteilungen gezeichnet
    int start = zeroY - diff;
    for (int i=interval; i<maxValue; i+=interval) {
          gd.drawLine(zeroX, t, zeroX-5, t);         //zeroX ist der nullpunkt von der xAchse (einfach ignorieren)
          t-=diff;
   }

    //Mein Problem ist jetzt wenn ich einen Punkt habe wie ich da die Lokalisierung auf der yAchse berechne???
    //Habs bisher mit sowas probiert stimmt aber nicht ganz
    int punkt = 143;   //der pukt sollte jetzt bei 143 auf der yAchse gezeichnet werden
    int location = zeroY - (diff * punkt);   //stimmt nur nicht!?!


}

}                                    
                                

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17608

Wohnort: Berlin

Wenn Du Code postest, und auch sonst, dann schreib Kommentare von den Code in eine eigene Zeile - nicht dahinter. a) Berücksichtigt Javadoc auch nur Kommentare vor dem Code, und 2 konfligierende Schematas im gleichen Code will niemand benutzen. b) Erzwingt das seltener horizontales Scrollen. Man scrollt mehr vertikal, aber das kann man mit dem Mausrad gut machen - horizontales Scrollen nicht.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Test {
        // Interval in dem die punkte aufgetragen werden
	private int interval = 15;
	// die y-nullpunkt entfernung vom oberen fensterrand
	private int zeroY = 290;  
	// Der maximale Wert an der y-Achse
	private int maxValue = 200;

	void draw() {
		// berechne die anzahl der unterteilungen
		// 200/15 = 13
		int numValues = maxValue / interval;   
		// Die differenz zwischen den einzelnen einteilungen
		// 290/13 ? 
		int diff = zeroY / numValues;

		// nun werden die unterteilungen gezeichnet
		int start = zeroY - diff;
		for (int i=interval; i<maxValue; i+=interval) {
			// zeroX ist der Nullpunkt der x-Achse (einfach ignorieren)
			gd.drawLine(zeroX, t, zeroX-5, t);
			t-=diff;
		}
		// Mein Problem ist jetzt: Wenn ich einen Punkt habe,
		// wie ich da die Lokalisierung auf der yAchse berechne?
		// Habs bisher mit sowas probiert stimmt aber nicht ganz
		// der Punkt sollte jetzt bei 143 auf der yAchse gezeichnet werden
		int punkt = 143;
		// stimmt nur nicht!?!
		int location = zeroY - (diff * punkt);
	}

	/*
Darf man sich das so vorstellen:

		---290 view = 0 screen
		...
			view:
		195
		180
                ...
                150___dazw. 143?
                135
		...
		 90
		...
		 45
		 30
		 15
		  0
	*/
}  

Es geht nicht auf - das ist schon mal ärgerlich. Du hast einen Rand von 90 (Pixel?) oben, und unten keinen?

Und 195/15 ist 13. Zeigt mein Graph, was Du meinst?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17608

Wohnort: Berlin

Du hast also einen Rand von 90 oben:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12

/* math       Screen
   290 ------ 0

   200 ______ 90
      |
      |
      |
      |
      |
  0   |______ 290
*/

Die Größe von 0-200 soll aber nicht in Pixel umgerechnet werden, sondern das sind Pixel? Die Ausrichtung aber wie ein Graph im Matheunterricht, mit 0-Punkt unten links?

Der y-Punkt wäre dann schlicht yScreen = 90 + (200-yMath) 90 musst Du immer draufschlagen, weil Du ja einen Rahmen der Breite von 90 haben willst.

200-yMath = 200-143 = 57 yScreen = 90+57 = 147

Damit ist yScreen &asymp; yMath, was bei einer Gesamthöhe von 290, wovon die Hälfte 145 ist, nicht überrascht. Es liegt eben etwa in der Mitte.

Antworten |