Schritt 13: Erweiterte Noten 3: Knoten
Parametrische Gleichung für Knoten finden Sie im Netz. Diesmal gehen wir auf die Dinge etwas anders zu tun. Vorher hatten wir Schleifen direkt Anrufe auf mc.setBlock() fahren. Aber in unserer Oberfläche Parzellen, wie z. B. die Kleinsche Flasche, oft der gleichen Block würde gezeichnet mehrmals, das ist langsam und ineffizient. Ein besserer Weg ist, den Satz von genauen Blöcke nachzuverfolgen, die bereits erstellt wurden, um zu vermeiden, das gleiche nochmal.
Lassen Sie mich ein Beispiel wie das (in knot.py) durchlaufen, um einen Knoten zu ziehen. Beginnen Sie mit einem standard-Header wie:
Jetzt müssen wir unsere Knoten zu generieren. Ich habe die Fingerkraut Formeln aus hier. Dies erfordert Schleifen eine Parameter t von 0 bis 2 * pi, mit kleinen genug Schritte um sicherzustellen, dass wir keine Lücken. Ich habe 10000 Schritte. Da dies im Arbeitsspeicher geschieht Computer schnell sind und überlappende Blöcke an Minecraft nur einmal gesendet werden, ist es einfacher, einfacher, mehr Schritte als zu denken, wie viel ist genug zu tun. Es ist wichtig, dass die Koordinaten, die im Wörterbuch Ganzzahlen zu sein, so dass wir sagen können, dass der gleiche Block als Zeichnung gehen (ein Block (1.1,1.2,1.4) und eines Blocks an (1,1,1) sind die gleiche Sache in Minecraft).
Wir zunächst initialisieren und legen Sie die Position des Knotens im Verhältnis zu der Spieler. Beachten Sie, dass die Position des Spielers nicht Integer sein muss (Sie können nicht stehen genau ausgerichtet mit einem Block) und in eine ganze Zahl umgewandelt werden soll.
Jetzt machen wir eine leere Menge benannt getan , um die Koordinaten zu speichern, die wir bereits erstellt haben:
Und wir ziehen den Satz:
Dies zieht nur Daten, die bereits gezeichnet ist nicht. Beachten Sie, dass wir die x-, y- und Z-Koordinaten mit der Funktion int() abzurunden. Das ist die Magie hinter der Überlappung entfernen: Wenn die abgerundeten Koordinaten identisch sind, nur einen Block wird gezeichnet. (Hinweis: die doppelte Klammer in der done.add((x,y,z)) -Linie sind aufgrund der Tatsache, dass was wir hinzufügen, um den Satz der Koordinate dreifach (X, y, Z)ist.)
Der obige Code ist in knot.py.
Der Knoten würde besser aussehen, wenn das Seil dicker waren. Es gibt viele Möglichkeiten, wie man das machen kann. Eine ineffiziente Art, aber einfach, weil Computer schnell in diesen Tagen sind soll nur eine kleine Kugel anstelle eines Punktes bei jedem Pixel zu zeichnen. Dazu mache ich zuerst eine kleine Hilfsfunktion, einen Ball zu ziehen, während Check-in die getan um sicherzustellen, dass es keine doppelten Blöcke gesetzt:
Dies nutzt die Ungleichheit-Methode zum Ausfüllen einer Kugel am (X0, y0, z0), der Radius R.
Dann ändern Sie einfach unsere Knoten-Herstellung- while -Schleife um einen Ball anstatt nur einen Punkt zu machen:
Das Ergebnis ist in knot2.py in der Beispielskripts.
Andere Beispiel Knoten sind in trefoil.py, trefoil2.py und borromean.py. Wenn Sie mit mehreren Materialien zeichnen, können Sie verwenden Sie ein Wörterbuch anstelle von einem Satz oder nur sequentiell durchlaufen die verschiedenen Materialien und klaren das Set vor jedem (das ist, was ich im trefoil2.py und borromean.py).