Trust in code

Thoughts on tech by Antje Kazimiers

Sterne generieren

Vor nicht allzu langer Zeit habe ich an Quellcode gebastelt, mit dem ich mir Sterne generieren kann, die den Papiersternen ähneln, die man aus quadratischem Papier faltet.

Die Ecken des Quadrats werden diagonal übereinander gelegt. Das wiederholt man ein paar Mal, bis ein kleines Dreieck entsteht. Dann schneidet man ein paar Ecken in die Kanten des Dreiecks, faltet es wieder auseinander und erhält einen wunderschönen Stern, der an eine Schneeflocke erinnert.

Das ganze passiert jetzt in Quellcode mit vielen randomisierten Werten, so dass kein Stern dem anderen gleicht.

Hier sind die Ergebnisse:

Stern Stern Stern Stern Stern Stern Stern Stern Stern

Der Quellcode ist auf github veröffentlicht. Eine Stelle möchte ich erklären:

{
  def point(a, b, c, x, y, z):
    px = a[0] * x + b[0] * y + c[0] * z
    py = a[1] * x + b[1] * y + c[1] * z
    return[px,py]
}

Hier verwende ich baryzentrische Koordinaten. Wenn die Koordinaten der Eckpunkte eines Dreiecks mit Faktoren multipliziert werden, die aufsummiert 1 ergeben, dann resultiert das in einem Punkt, der sich immer innerhalb des Dreiecks befindet.

Um welches Dreieck geht es? Der Stern ergibt sich, weil ein rechtwinkliges Dreieck an verschiedenen Achsen gespiegelt wird, horizontal, vertikal und diagonal. So ähnlich wie beim Papierfalten schneide ich nun Ecken aus dem Dreieck heraus. Dafür benötige ich die Punkte, die sich innerhalb des Sterns befinden.

So sieht das Ganze dann für die obigen Sterne aus:

Polygon Polygon Polygon Polygon Polygon Polygon Polygon Polygon Polygon

Einige der zusammengesetzten Sterne lassen sich bestimmt gut mit dem Lasercutter ausschneiden – für den nächsten Weihnachtsbaum.

Stern Stern Stern Stern Stern Stern Stern Stern Stern

This is day 3 of my #100daystooffload series, a challenge to write 100 blog posts in a year.