10 Jahre NumeRe
Wow. Ist es schon so weit? Oktober 2013 bis Oktober 2023. Das sind 10 Jahre und ein wilder Ritt.
Was 2013 begann als ein Miniprojekt für die studentische Ausbildung ist innerhalb von 10 Jahren zu einem global Player in den Numerikprogrammen geworden. Na ja, fast. NumeRe ist weltweit und frei verfügbar, aber wir arbeiten noch daran, der kommerziellen Konkurrenz das Wasser abzulaufen...
Ein Blick zurück
Als wir vor zehn Jahren damit begannen, die ersten Zeilen C++ Code in die IDE zu tippen, hatten wir nicht damit gerechnet, dass wir heute, zehn Jahre später, immer noch an diesem einen Projekt arbeiten würden. Warum auch? Die Idee, eine derart umfangreichen Applikation zu entwickeln kam uns nicht in den Sinn, sondern wir wollten lediglich ein einfaches C++ Code-Framework erstellen, in dem man einfache numerische Aufgaben lösen konnte.
Die Anfänge waren regelrecht stümperhaft und mitunter findet man diese auch heute noch in einzelnen Dateien des Sourcecodes. Diese Sachen zu korrigieren, beschäftigt uns bis heute. Falls ihr euch also wundert, dass neue Releases wenig Features bringen, liegt das nicht an Einfallslosigkeit, sondern an der Tatsache, dass wir zunächst die Codestruktur auf Vordermann bringen müssen. Würden wir mit unserem heutigen Wissen ein ähnliches Projekt beginnen, würden wir vollkommen anders anfangen - aber sagt das nicht jeder von seinem Projekt?
Trotz aller Widrigkeiten haben wir es bis hier hin geschafft - 10 Jahre NumeRe - worauf man Stolz sein darf. Wir freuen uns auf die nächste zehn Jahre.
Alles Gute zum zehnten Jubiläum, NumeRe!
Wie man mit NumeRe richtig feiert
Für eine richtige Feier brauchen wir natürlich Luftballons. Wir wollen hier einmal illustrieren, wie man die nebenstehende Abbildung mit NumeRe erzeugt und insbesondere auch animiert. Wir beschränken uns hier auf einen Luftballon, da das Verbinden von mehreren Zeichenfunktionen in eine Funktion erst mit v1.1.6rc möglich sein wird.
Ein Luftballon setzt sich aus drei Zeichenfunktionen zusammen: drop() für den Ballon selbst, conev() für die Öffnung und den Knoten und curve() für die Schnur. Das Schild erstellen wir aus facev() und text(). Wir verwenden das Kommando draw3d, um eine dreidimensionale Zeichnung zu erstellen.
(Der vollständige Code ist wie immer unten zu finden)Die Positionen für drop() und conev() müssen wir schätzen, für curve() ist zusätzlich einiges an Probieren erforderlich, insbesondere da das Koordinatensystem der Bézierkurve nicht einfach zu verstehen ist.
draw3d drop(0,0,-5.55, 0,0,1, 5,0.3, "r"), \\
conev(0,0,-8.55, 0,0,1, 0.2,0, "r"), \\
curve(0,0,-7.55, 0.8,0,0.1, 0+0.4,0+0.4,-18.55, \\
-0.8,-0.8,0.5, "H2") -set reset light noaxis
Wenn wir die z-Komponente des Ballons noch mit t parametrisieren, das untere Ende von curve() auch durch cos() und sin() im Kreis bewegen und animate als Option verwenden, können wir den Ballon sogar aufsteigen lassen:
draw3d drop(0,0,-5.55+6*t, 0,0,1, 5,0.3, "r"), \\
conev(0,0,-8.55+6*t, 0,0,1, 0.2,0, "r"), \\
curve(0,0,-7.55+6*t, 0.8,0,0.1, \\
0+0.4*cos(_pi*t),0+0.4*sin(_pi*t),-18.55+6*t, \\
-0.8*sin(_pi*t),-0.8*cos(_pi*t),0.5, "H2") \\
-set reset light noaxis t=0:3 animate=100
Wie man das Schild ergänzt, findet man im angehängten Code. Hier seien nur zwei Besonderheiten hervorzuheben: rotate=,90 ist nötig, da der Text von text() mit dem Betrachter mitrotiert und daher schlecht mit dem Schild überlagert. font=chorus verwendet für den Text die Kalligraphie-Schriftart.