Viereck malen

D

Datesnhi

Gast
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.

Java:
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
 
Zuletzt bearbeitet von einem Moderator:
M

Marcinek

Gast
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
 
M

Marcinek

Gast
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

Aktives Mitglied
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
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Schnell meinen Blödsinn gelöscht
 
Zuletzt bearbeitet von einem Moderator:

Evil-Devil

Top Contributor
Java:
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

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

Grejak

Aktives Mitglied
Vielleicht ein kleiner Anfang bin aber nicht sicher
Java:
double innenWinkel=((n-2)*180)/n;
 

Grejak

Aktives Mitglied
Java:
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

Top Contributor
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.
 

Evil-Devil

Top Contributor
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!

Java:
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.
 
S

SlaterB

Gast
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

regelmaesigesSechseck.gif
 

Evil-Devil

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

attachment.php


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.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
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
 
Zuletzt bearbeitet von einem Moderator:

Evil-Devil

Top Contributor
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.
 
S

SlaterB

Gast
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
 
Zuletzt bearbeitet von einem Moderator:

Grejak

Aktives Mitglied
Dann sähe eine universal Rechnung so aus
Java:
double winkel=180-(((n-2)*180)/n);

natürlich nur für turtle

EDIT: hab nicht seite 2 gesehn sorry!
 
S

SlaterB

Gast
wie gesagt kann man das umrechnen:
Java:
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
 

Neue Themen


Oben