# Viereck malen



## Datesnhi (3. Nov 2011)

Hallo zusammen, 

könntet ihr mir ein paar Lösungsvorschläge für die folgende Aufgabe ?
Wir haben diese Programm: die ein Viereck malen soll.


```
void zeichneViereck(MrTurtleRemoteControl rc, Integer schritte) {
		// Die Variable zaehler wird auf 0 gesetzt und
		// in der while-Schleife um jeweils 1 erh√∂ht,
		// bis die Abbruchbedingung erreicht ist.
		Integer zaehler = 0;
		while(zaehler < 4) {
			rc.move(schritte);
			rc.turn(false, 90);	
			zaehler = zaehler + 1;
		}
```
Jetzt müssen wir diese Programm um eine Methode erweitern, die N-Ecke (Dreieck, Viereck, Fünfeck) malen kann - die Kantenlänge soll ebenfalls variabel sein.
Es wäre super, wenn ihr mir weiter helfen könntet. 

Lg,
Datenshi


----------



## Marcinek (3. Nov 2011)

Dazu müsste man wissen, wie sich die Anzahl der Ecken zu dem Winkelmaß verhält.

Wieviel Grad hat den die Summe in so einem Viereck? ;D


----------



## pl4gu33 (3. Nov 2011)

Marcinek hat gesagt.:


> Dazu müsste man wissen, wie sich die Anzahl der Ecken zu dem Winkelmaß verhält.
> 
> Wieviel Grad hat den die Summe in so einem Viereck? ;D



die Frage ist ja, wie das Viereck aussehen muss, Viereck ist auch ein Trapez oder eine Raute 

von daher is deine Frage, wohl Ironisch auf ein Quadrat oder Rechteck bezogen (90°)?


----------



## Marcinek (3. Nov 2011)

Nein, das ist eine ernstgemeinte Frage.

Die länge der Seiten ist fest für jede Seite.

Wenn man die Frage beantwortet, dann kann man das vorhandene Programm mit nur wenigen Tricks zu einem n >=4 eck zeichner umbauen.

Die 4 und die 90 müssen durch geeignete Werte ersetzt werden.


----------



## Grejak (8. Nov 2011)

Sorry

3eck=180
4eck=360
usw

für jede weitere Ecke addiertman 180 und erhält so die Gesamt Winkel Summe

Summe durch n= Grad Zahl für jeden Winkel


----------



## nillehammer (8. Nov 2011)

Schnell meinen Blödsinn gelöscht


----------



## Evil-Devil (8. Nov 2011)

```
void zeichneNEck(MrTurtleRemoteControl rc, Integer schritte, int ecken) {
	// Hier deinen Code einbauen. Anschauen was zeichneViereck tut und verstehen!
	// turn = 360 / ecken
}
```
Interessant wäre noch zu wissen von welchem Typ "turn" sein muss.


----------



## Grejak (8. Nov 2011)

nehmen wir ein normales sechseck eine einzelne Ecke hat eien Winkel von 120°.
3=180
4=360
5=540
6=...720(6*120)


----------



## Grejak (8. Nov 2011)

Vielleicht ein kleiner Anfang bin aber nicht sicher

```
double innenWinkel=((n-2)*180)/n;
```


----------



## Grejak (8. Nov 2011)

```
createNEck(int ecken){
        int ecken=ecken;
        double innenWinkel=((n-2)*180)/n;
        for(int cnt=0;cnt<=ecken;cnt++) {
            rc.move(schritte);
            rc.turn(false, innenWinkel); 
        }
}
```
Versuchs mal
natürlich mit deienem MrTurtleRemoteControl als Parameter


----------



## Evil-Devil (8. Nov 2011)

Grejak, es gibt einen Bearbeiten Knopf den man nutzen kann.

Wie kommst du eigentlich auf diese seltsame Winkel-Rechnung?


----------



## Grejak (8. Nov 2011)

Schule

Aber ich bin mir sicher es funktioniert


----------



## Evil-Devil (8. Nov 2011)

Also afaik ist in einem N-Eck die Summe aus allen Winkeln 360 und damit wäre bei einem Sechseck der Winkel einer jeden Ecke 60°.

Wenn die Winkel mehr als 360 betragen würden, dann würdest ja mehr als einmal herum zeichnen.


----------



## Grejak (8. Nov 2011)

Probiers mit eienem 6Eck aus 
wenn alle 6Ecken gleich groß sind 
beträgt ein Winkel 120°

((6-2)*180)/6=120


----------



## Evil-Devil (8. Nov 2011)

Grejak hat gesagt.:


> Probiers mit eienem 6Eck aus
> wenn alle 6Ecken gleich groß sind
> beträgt ein Winkel 120°
> 
> ((6-2)*180)/6=120




Ich habe es ausprobiert!

Meine Turtle zeichnet ein sechseck mit einem Winkel von 60° pro Ecke!


```
public class Main {
	public static void main(String[] args) {
		MrTurtle tr = new MrTurtle();
		tr.fly(true);
		tr.move(100);
		tr.fly(false);
		zeichneNEck(tr, 50, 6);
	}
	
	private static void zeichneNEck(MrTurtle tr, int schritte, int ecken) {
		
		float turn = 360 / ecken;
		for (int i=0; i<ecken; i++) {
			tr.move(schritte);
			tr.turn(false,turn);
		}
	}
}
```

//edit: Wobei ich mich noch immer Frage wie du zu dieser seltsamen Winkel-Rechnung kommst die vorne und hinten nicht stimmt.


----------



## Grejak (8. Nov 2011)

was ist überhaupt turtle
???:L


----------



## SlaterB (8. Nov 2011)

die Winkel-Rechnung stimmt, und es sind 6x 120, nicht 60,
schau dir doch Bilder von Sechsecken und Dreiecken an, willst du sagen dass die Winkel gleich sind?
in einem Dreieck sind die Winkel 60 Grad, spitz, kleiner als 90 Grad,
in einem Sechseck sind sie 120, doppelt so groß, stumpf, größer als 90 Grad


----------



## Evil-Devil (8. Nov 2011)

Nur komisch das meine Turtle dann richtig läuft und zeichnet, wenn meine Rechnung falsch sein soll...






Dein Bild zeigt übrigens auch 60° an  Und 120 sind vollkommen unnötig, da es sich ja immer vom aktuellen Standpunkt aus errechnet in die Turtle zeigt.


----------



## SlaterB (8. Nov 2011)

du darfst eben nicht alles in direkte Zusammenhänge setzen, die Winkel sind 120 Grad, 
da du ohne Änderung der Richtung aber geradeaus weiter malen würdest bedeutet es eine Veränderung der Zeichenrichtung um 60 Grad

> Und 120 sind vollkommen unnötig, da es sich ja immer vom aktuellen Standpunkt aus errechnet in die Turtle zeigt.
da sagst du es selber, aber 'vom aktuellen Standpunkt errechnen' ist keine Aussage über Winkel in einem N-eck

> Dein Bild zeigt übrigens auch 60° an
sicher, nur nicht als Winkel im Sechseck


----------



## Grejak (8. Nov 2011)

Pfeiff


----------



## Evil-Devil (8. Nov 2011)

Wieso darf ich die nicht direkt nehmen die ZUsammenhänge? Um N Ecken zu zeichnen muss ich nicht die Winkel zwischen zwei Linien berechnen sondern imho nur von meinem Standpunkt aus betrachtet. Jedenfalls wenn ich N Ecken im Kreis zeichnen will. Und auch wenn ich vom Zentrum einen Kreis zeichnen würde, würde ich genauso heran gehen.


----------



## SlaterB (8. Nov 2011)

mach wie du denkst, jeder andere sieht ja nun aus welchem Grund die beiden genannten Standpunkte differieren, 
kein Streitthema

wenn du übrigens ein 5-Eck oder 7-Eck oder ähnliches malen willst, dann kommst du irgendwann um die korrekte Formel ((n-2)*180)/n 
bzw. ähnlich formuliert nicht drumherum,
natürlich wiederum nicht direkt, ein Innenwinkel von x bedeutet wie gesehen nicht unbedingt dass beim Zeichnen auch irgendwo x verwendet wird,
sondern z.B. 180-x, so wie hier 60 = 180-120 ist

edit:
ok, du hast auch schon eine allgemeine Lösung,
[c] float turn = 360 / ecken;[/c]
die kommt wohl immer hin

Beispiel 5: 360/5 = 72, entsprechen (((5-2)*180)/5 = 108 -> 72 + 108 = 180, immer dasselbe

180 - 360/n klingt in der Tat besser als ((n-2)*180)/n 

edit:
((n-2)*180)/n = n*180/n - 2*180/n = 180 - 360/n


----------



## Evil-Devil (8. Nov 2011)

Ok, einigen wir uns auf unentschieden. Solange beide Varianten funktionieren. Am Ende zählt eh nur das es läuft


----------



## Grejak (9. Nov 2011)

Dann sähe eine universal Rechnung so aus

```
double winkel=180-(((n-2)*180)/n);
```

natürlich nur für turtle

EDIT: hab nicht seite 2 gesehn   sorry!


----------



## SlaterB (9. Nov 2011)

wie gesagt kann man das umrechnen:

```
double winkel=180-(((n-2)*180)/n);
==
double winkel=180-(n*180/n -2*180/n);
==
double winkel=180-180 +360/n;
==
double winkel=360/n;
```
und bei der letzten Formel ist Evil-Devil schon angelangt gewesen


----------

