10 Years of NumeRe
Wow. Is it that far already? October 2013 to October 2023. That's 10 years and a wild ride.
What started in 2013 as a mini-project for student education has become a global player in numerics programs in 10 years. Well, almost. NumeRe is available worldwide and free, but we are still working on beating the commercial competition...
A Glance Back
When we started typing the first lines of C++ code into the IDE ten years ago, we didn't expect that today, ten years later, we would still be working on this one project. Why should we? The idea of developing such an extensive application didn't cross our minds, we just wanted to create a simple C++ code framework in which to solve simple numerical tasks.
The beginnings were downright bumbling and sometimes you can still find them in single files of the source code. Correcting these things keeps us busy until today. So if you are wondering that new releases bring few features, this is not due to unimaginativeness, but to the fact that we first have to bring the code structure up to scratch. If we started a similar project with our current knowledge, we would start completely different - but isn't that what everyone says about their project?
Despite all odds, we have made it this far - 10 years of NumeRe - which is something to be proud of. We look forward to the next ten years.
Happy tenth anniversary, NumeRe!
How to Properly Celebrate with NumeRe
For a real celebration we need balloons, of course. We want to illustrate here how to create the adjacent illustration with NumeRe and especially how to animate it. We will limit ourselves here to one balloon, because combining several drawing functions into one function will only be possible with v1.1.6rc.
A balloon is composed of three drawing functions: drop() for the balloon itself, conev() for the opening and the knot, and curve() for the string. We create the sign from facev() and text(). We use the draw3d command to create a three-dimensional drawing.
(As always, the full code can be found below).We have to estimate the positions for drop() and conev(), and for curve() some additional trial and error is required, especially since the coordinate system of the Bézier curve is not easy to understand.
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
If we parameterize the z-component of the balloon with t, move the bottom end of curve() also by cos() and sin() in a circle and use animate as an option, we can even make the balloon rise:
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
How to add the sign can be found in the attached code. Here are only two special features: rotate=,90 is necessary, because the text of text() rotates with the viewer and therefore overlaps badly with the sign. font=chorus uses the calligraphy font for the text.