Sierpinski Sechseck

sivaslim

Mitglied
Hallo,

wir haben als Aufgabe von unserem Prof bekommen einen Sierpinski Sechseck zu programmieren.
Habe das fertige Programm von einem Kollegen, nur leider verstehe ich nicht wie er auf die Werte gekommen ist.

Hier zunächst mal etwas zum Sierpinski Dreieck: Sierpinski-Dreieck ? Wikipedia

In der Vorlesung hatte der Prof uns sein Sierpinski Dreieck Code gezeigt, unsere Aufgabe war es bloß dieses Programm auf ein Sechseck zu erweitern.

Hier das Dreieck:

Java:
public class Sierpinski {

	public static void main(String[] args) {
		int T =Integer.parseInt(args[0]);
		
		double[] cx = {0.000, 1.000, 0.500};     // <<< wie er auf diese Werte kommt verstehe ich nicht
		double[] cy = {0.000, 0.000, 0.866};     // <<< wie er auf diese Werte kommt verstehe ich nicht
		double x = 0.0, y = 0.0;
		
		for (int t = 0; t < T; t++) {
			int e = StdRandom.uniform(3);
			x = (x + cx[e]) / 2.0;
			y = (y + cy[e]) / 2.0;
			StdDraw.point(x,y);
		}
	}
}


Nun das Sechseck:

Java:
public class SierpinskiSechseck {

 public static void main (String[] args) {
  int T =Integer.parseInt (args[0]);
  
  // wieso diese Werte?
  double[] cx = {2.0, 1.5, 0.5, 0.0, 0.5, 1.5}; 
  double[] cy = {1.0,1.866,1.866,1.0,0.134,0.134};
  double x = 0.0, y = 0.0;
  
  for (int t = 0; t < T; t++) 
  {
    int e = StdRandom.uniform(6);    // Zufaellige Zahl bzw. Position aus Array lesen
    x = (x + cx[e]) / 3.0;                  // Warum wird hier durch 3 geteilt? 
    y = (y + cy[e]) / 3.0;
    StdDraw.point(x,y);
  }
 }
}

Mir ist klar das diese Werte berechnet wurden, aber wie genau? Und wieso teile ich es / 3? Beim ersten Programm war es noch / 2 ? Das verstehe ich auch nicht..
Würde mich sehr über eine schnelle Hilfe freuen

Mit freundlichen Grüßen
 

Logaff

Bekanntes Mitglied
öööh ich hab bier nen buch

"Algorithmen für Fraktale und Chaos" kannst dich mal melden denn kriegst du den auszug dazu.
 

Logaff

Bekanntes Mitglied
ganz ehrlich ich weiss nicht was diese zeile soll
Java:
int T =Integer.parseInt(args[0]);

bin anfänger und wüsste echt gern was das zu bedeuten hat, obwohl es nich mit dem thema zu tun hat???:L
 
S

SlaterB

Gast
die Klassennamen kann man in google gut finden, dann läufts auch bald, schickes Programm,

die Punkte cx, cy an sich sind die eines Dreiecks bzw. Rechtecks, kann man auf dem Papier ausrechnen,
wohin verschoben und im welchen Maßstab ist letztlich nur für die Darstellung interessant,

danach wird per Zufall kreuz und quer herumgesprungen,
würde man nicht durch irgendwas teilen, würden die Punkt durch die Decke gehen,
das Teilen hilft, die Position zu halten, vielleicht wie ein Atomkern die Elektronen um sich herum hält trotz wilder Bewegung ;)

beim Dreieck durch 2, weil jede Teilfigur die halbe Höhe + halbe Breite hat, beim Sechseck ist der Faktor 3,
so ganz reicht diese Erklärung nicht,
hilfreich ist ein wenig Ausprobieren, bei beiden Beispielen bringen höhere Teiler als 2 + 3 durchaus auch noch gute Bilder

@Logaff
damit wird der ans Programm übergebene String-Parameter zu einer Zahl geparst,
wie kann man das fragen ohne die parseInt()-Methoden nachzuschlagen, und was gibt es dann nicht zu verstehen?
 
Zuletzt bearbeitet von einem Moderator:

AmunRa

Gesperrter Benutzer
Java:
int T =Integer.parseInt(args[0]);


es wird eine int Variable T angelegt,

mit Integer.parseInt wird eine String übergeben und wenn sich diese als Zahl lesen lässt wird dieser in einen int umgewandelt. args[0]:
args ist ein String array, dass an die main methode übergeben wird, an die methode parseInt wird der String übergeben, der an Indexposition 0 im Array args steht
 
S

SlaterB

Gast
warum hat der Mensch einen Computer erfunden, ging doch auch ohne?
ein Programm schreibt man, damit man ein Programm hat, das hat keinen tieferen Sinn,
oder beinhaltet deine Frage die Berücksichtung einer (nicht genannten) Alternative?
 

Logaff

Bekanntes Mitglied
ich wollte wissen warum das gemacht wird aber wenn gesagt wurde das die rückgabe in die variable T gespeichert wird hört es sich ziemlich nach rekursion oder son kram. ich will doch nur wissen was damit erreicht wird
 
S

SlaterB

Gast
dann sorry, aber gleich eine ausführliche Frage wäre deutlicher,

der Parameter dient hier offensichtlich für die Anzahl der Schleifendurchläufe, was sich auf die Darstellung auswirkt,
je mehr Punkte, desto schicker das Bild, aber desto länger dauert es auch, bei mit 1000 Punkte pro Sekunde, paar Tausend sollten es schon sein
 

Crian

Top Contributor
Das übergebene Argument kommt ja nicht als ein int an. Da kann auch "dreizehn" drin stehen. Was natürlich nicht verstanden wird. "13" hingegen schon, das kann in den int 13 übersetzt werden.


die Klassennamen kann man in google gut finden, dann läufts auch bald, schickes Programm

Danke, klappt. Ich hätte bei einer Lösung allerdings eher versucht, rekursiv Linien zu zeichnen, aber die Punktlösung ist auch sehr hübsch.
 
Zuletzt bearbeitet:

Landei

Top Contributor
Code:
        double[] cx = {0.000, 1.000, 0.500};     // <<< wie er auf diese Werte kommt verstehe ich nicht
        double[] cy = {0.000, 0.000, 0.866};     // <<< wie er auf diese Werte kommt verstehe ich nicht
Sind die Koordinaten eines gleichseitigen Dreiecks: (0,0),(1,0),(0.5,0.866). Der Wert 0.866 ist eigentlich sqrt(3)/2
 

Logaff

Bekanntes Mitglied
Quelle: Dietmar Herrmann - Algorithmen für Chaos und Fraktale
Seiten: 132-137

wäre da was ich bereitstelle ist das so ok?
 
S

SlaterB

Gast
niemand weiß, was du konkret vorhast,
5 Seiten umständlich einscannen und hochladen wäre nicht so nett, auch fraglich ob das hilft

zitiere doch erstmal 2-10 Zeilen manuell, wenn du wichtige Informationen erkannt hast
 

Logaff

Bekanntes Mitglied
also eingescannt hab ich sie schon :p

da steht zb ein turbo c Programm für die generierung des Dreieckes aber auch so sachen für das Drehysmmetrische Sechseck (was ich dachte hier evtl gemeint ist) aber auch Dürer-Fünfeck und Menger-Teppich jeweils kurz erklärt was das ist und jeweils ein turbo-c algo

buch is schon entwas älter 1994 glaub ich.
 
C

Caroline

Gast
Hi! :)

Durch das Tutorium & dann die Aufgabenstellung meine ich verstanden zu haben: (Bring die Tutoriums-Termine in Erfahrung & versuch' zu kommen. Du darfst alles fragen - auch den Prof in der Sprechstunde; er antwortet nicht arrogant:))

- Die 6 Punkte erhält man in symmetrischer Anordnung mittels der Formel auf dem Aufgabenblatt. Anscheinend ist EIN Formelteil für die x-Koordinaten aller Punkte und der ANDERE Teil für die y-Koordinaten.

- Dann sollen ja neue Punkte gezeichnet werden, die 2/3 oder = 1/3 von alten Punkten entfernt liegen sollen. Der Tutor hatte gesagt: "Es kommt auf`s gleiche raus, ob ihr 1/3 oder 2/3 verwendet." Ich nehme an, deine Lösung funktioniert einfach mit 1/3 und DESHALB steht dort /3.

LG Caroline
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Sierpinski Java Basics - Anfänger-Themen 24
L Sechseck ausfüllen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben