ETOOBUSY 🚀 minimal blogging for the impatient
Where I wanted to generate different PNG files with Gnuplot, each corresponding to a different mix of two functions, parametrically.
For a future post (I hope), I wanted to generate different images for showing the transition from the linear space to the transformed space in Fortune’s algorithm (see also the other post). And I wanted to use Gnuplot.
My first step has been to make the Gnuplot script parametric, which is easy:
1 #!/usr/bin/env gnuplot 2 3 # Mathematics 4 Ax = 0 5 Ay = 0 6 m = 0.9 7 q = -1.0 8 line(x) = m * x + q 9 dist(x) = sqrt((Ax - x)**2 + (Ay - line(x))**2) 10 hyperb(x) = line(x) + dist(x) 11 r = (0.0 + n) / N 12 mix(x) = (1 - r) * line(x) + r * hyperb(x) 13 14 # Graphics 15 reset 16 set terminal pngcairo size 410,250 enhanced font 'Verdana,9' 17 set output filename 18 set style line 1 lc rgb 'red' lw 2 19 set style line 2 lc rgb 'blue' pt 7 20 set key off 21 set yrange [-2:1.2] 22 23 ## Draw point 24 set label at Ax, Ay "A" point ls 2 25 26 ## Draw mix 27 plot [-1:1] mix(x) t 'mix' ls 1
Local version (without line numbers!).
As indicated by the comments, the first section (lines 4 through 12) include the mathematics for the curves and their mix:
- lines 4 through 7 include the parameters for the
Ay) and the line (via
- line 8 defines the
- line 9 is a helper function to calculate the distance of a point on
the line from the reference point
- line 10 calculates the hyperbole according to Fortune’s algorithm;
- line 11 calculates
r, that allows mixing
hyperbtogether. It is supposed to range between
- line 12 calculates the mix of
hyperb, according to the ratio
The mix is just a linear combination of the two functions, according to
r. This is calculated using the two parameters
which are supposed to come from the outside; this allows passing the
ratio as a numerator/denominator pair, which allows using integers from
The rest is graphics stuff. One important thing is that line 17 sets the
name of the output file according to the
filename variable, which is
supposed to be set from the outside.
Invoking the script, then, requires setting
# set at 10/25th of the mix, save in test.png $ gnuplot \ -e 'n=10' \ -e 'N=25' \ -e 'filename=test.png' \ 20200303-parametric.gnuplot
And I guess it’s all for today!