# Java StdDraw Graphics HILFESTELLUNG benötigt



## viech1337 (11. Dez 2013)

Hallo ein Wunderschönen Guten Abend,

ich hoffe ihr könnt mir bei mein Anliegen weiterhelfen.

Schreiben Sie eine ausfuhrbare Klasse, die, gesteuert von einer Zeichenkette, einen
Polygonzugs zeichnet. Der Polygonzug beginnt im Urspung des Koordinatensystems
und der Zeichenstift ist in Richtung der positiven x-Achse orientiert.

Die Zeichenkette
enthalt nur die Buchstaben F, L und R.

F Bewege den Zeichenstift um die Lange 1 in die Richtung, in die der Zeichenstift
orientiert ist und zeichne dabei eine Linie.
L Drehe den Zeichenstift um 90 nach links.
R Drehe den Zeichenstift um 90 nach rechts.

Soweit hab ich alles verstanden! 

Doch die eigentliche aufgabenstellung danach macht mir zu schaffen.

Dem eigentlichen Zeichnen geht eine Simulation voran, die die Groe des Polygonzugs
ermittelt, d.h. die maximale/minimale x-/y-Koordinaten bestimmt,
und die Skalierung des angezeigten Koordinatensystems so festlegt, dass der
komplette Polygonzug sichtbar ist.
 *Der Polygonzug wird mit Hilfe der Methoden 
Klasse StdDraw gezeichnet.* 

Wie man eine Fesnter bei java erzeugt weiß ich mittlerweile, nur verstehe ich nicht wie ich das ganze in Java-Code zusammenfassen soll. 

Mein Ansatzpunkt wäre der : 

```
class Hint {
public static void main ( String [] args ) {
int count = StdIn . readInt ();
StdIn . readLine ();
char [] str = new char[ count ];
for(int i = 0; i < count ; i++)
str [i] = StdIn . readChar ();
StdIn . readLine ();
}
}
```

Er ließt quasi die Anzahl der Zeichen und die Zeichen nacheinander von der
Standardeingabe. 

Nur wie erzeuge ich ein Polygonzug laut der Aufgabenstellung ? Wäre echt lieb wenn ihr helfen würdet

Liebe Grüße 



----------



## eMmiE (11. Dez 2013)

Ist stddraw eine festgelgete Klasse?
Enthält sie Methoden, die erlauben, ein Polygon zu malen?
Wie ist der Polygonzug zu realisieren in der Speicherung, also wird er in einem festen Array (-> []) angelegt oder in einer ArrayList?


----------



## viech1337 (11. Dez 2013)

Ja in der Tat wir sollen mit der Klasse SdtDraw arbeiten, also dementsprechend auch mit der Methode Polygon 


```
public void paint(Graphics g) 

	{	
		
		 int arx[] = {0,1,40,60,20};
		   int ary[] = {100,20,30,800,10};

		   g.drawPolygon(arx,ary,arx.length); [/JAVA ]


so in der Richtung nur weiß ich nicht wie ich die Koordinatenwerte anlegen soll damit die Aufgabenstellung gelöst wird. Sprich ein Polygonzug/Zeichenkette der wie folgt aussehen soll: 

F Bewege den Zeichenstift um die Lange 1 in die Richtung, in die der Zeichenstift
orientiert ist und zeichne dabei eine Linie.
L Drehe den Zeichenstift um 90 nach links.
R Drehe den Zeichenstift um 90 nach rechts.

Der Ansatzt ist ja der dass ich durch  class ''HINT'' siehe Java-Code erste Post, die Anzahl der Zeichen und die Zeichen nacheinander von der
Standardeingabe eintippen soll. Also nehmen wir an ich tippe zahl 15 dann FRLLFRLRLFLRLFL ein , dann kommt eine entsprechende Fenster sei es applet oder java.awt macht kein unterschied , der denn besagten eingegeben Wert als Grafik ausgibt!
```


----------



## eMmiE (13. Dez 2013)

Weißt du, wie lang die Kette maximal sein darf?
Sonst musst du nämlich ArrayList benutzen, statt einem normalen Array

Wenn du jetzt sagen wir eine Maximallänge von 20 Punkten (x|y) hast, dann würde ich die Koordinaten wie folgt abspeichern: 
	
	
	
	





```
int[][] Koordinaten = new int[20][2];
```
So hast du immer x|y-Paare und der Zugriff wird einfacher

Ich persönlcih würde das jedenfalls so machen, dass du zunächst alle Stellen auffüllst
(-> Variable Zähler setzen, bei jeder neuen Koordinate diese bei Koordinaten[Zähler] einfügen, Zähler um 1 nach ben zählen, bis Zähler = 20)
und danach immer die Koordinaten nach hinten verschiebst. 
(-> 1. rausschmeißen, 1. = 2.,...20. = neu)

Wie du die Koordinaten machst ist ja klar


Spoiler: ...





```
int x;
int y;
byte richtung = 0; //0-rechts,1-oben,2-links,3-unten

public void drehen(boolean links) {
   if (links) {
      richtung++;
   } else {
      richtung--;
   }
   if (richtung == -1) {
      richtung = 3;
   } else if (richtung == 4) {
      richtung = 0;
   }
}

public void bewegen() {
  //setzt neuen Punkt in Richtung richtung
  switch(richtung) {
       case 0:
          ->setze neuen Punkt bei (x+Schritt|y)/siehe oben
          x += Schritt;
       break;
       case 1:
          ->setze neuen Punkt bei (x|y+Schritt)/siehe oben
          y += Schritt;
       break;
       case 2:
          ->setze neuen Punkt bei (x-Schritt|y)/siehe oben
          x -= Schritt;
       break; 
       case 3:
          ->setze neuen Punkt bei (x|y-Schritt)/siehe oben
          y -= Schritt;
       break;     
}
```




Wenn du noch was brauchst, dann spezifiziere bitte deine Frage :rtfm:

Gruß eMmiE


----------



## viech1337 (13. Dez 2013)

Hatte schon gestern mein Testat, habs erstaunlicherweise fast genauso wie du es gehabt  hatte nur bei der abspeicherungen meine Probleme da ein passenden anstatzt zu finden da half mir zum glück ein netter Tutor vor Ort. Lieben dank Emmie für deine hilfe. 

P.S das mit fb anfrage haha schön das du keins besitzt ist sowieso fürn ***** ^^


----------

