Okay, I have refactored the user interface to accept numerous commands related to the plot between, aka mosaic, image type. And, have refactored the type 41 image code to make use of the variables related to the new commands.
So, at least one more gallery (see below).
New User Interface Commands
The commands and variables I added are as follows. Some of them duplicate previous commands and variables. I will leave cleaning up the code for another day. No code being shown for the commands as it is simple and repetitive.
## these bw* relate to type 41 images, may rework type 40 and others to use them as well
# some of these variables are duplicating existing ones, but wanted to have a somewhat consistent naming convention
bw_a = 'x' # e.g. bway
bw_dx = 1 # e.g. bwd2
bw_f = 'r' # e.g. bwfa
bw_i = False # e.g. bwi
bw_l = 'm' # e.g. bwle
bw_lph = 1 # e.g. bwlph.78
bw_m = False # e.g. bwm
bw_o = True # e.g. bwo
bw_r = False # e.g. bwrrr
bw_s = 32 # e.g. bws16
# bwa: x, y; set bw_a (choose axis to colour between; default: x)
# bwd: 1, 2; ... or 0 for random, set bw_dx (nbr of lines separation for btw_n_apart; default: 1)
# bwf: r, a; set bw_f (choose function: r -> btw_rnd, a -> btw_n_apart; default: r)
# bwi: ; toggle boolean module variable bw_i (use inverse on transformation matrix; default: n, False)
# bwl: s, e, m, r; set bw_l (base line for btw_rnd; default: m)
# bwlph: 0-1; set bw_lph (alpha for colour areas, default: 1)
# bwm: ; toggle boolean module variable bw_m (use colour area multipliers; default: n, False)
# bwo: ; toggle boolean bw_o (line overlap for btw_n_apart; default: y, True)
# bwr: y, n, r, rr: toggle bw_r (plot in reverse or random order; default: n)
# bws: 1, 2, 48; set bw_s (number of colour sections per plot between for any two data rows, default: 32)
##
And, a very minor refactoring of the image generating code. I probably should have gotten more creative and cut down on all those if
blocks. Maybe down the road, as I do plan to completely refactor the spirograph code. Likely adding a few new modules as well. Will be a learning process I am sure.
if bw_f == 'r':
if bw_a == 'y':
print(f"\tbtw_rnd(..., bc='{bw_l}', r={bw_r}, fix=None, mlt={bw_m}, sect={bw_s}, alpha={bw_lph})")
btw_rnd(ax, dstx, dsty, bc=bw_l, r=bw_r, fix=None, mlt=bw_m, sect=bw_s)
else:
print(f"\tbtw_rnd_x(..., bc='{bw_l}', r={bw_r}, fix=None, mlt={bw_m}, sect={bw_s}, alpha={bw_lph})")
btw_rnd_x(ax, dstx, dsty, bc=bw_l, r=bw_r, fix=None, mlt=bw_m, sect=bw_s)
else:
if bw_a == 'y':
print(f"\tbtw_n_apart(..., dx={bw_dx}, ol={bw_o}, r={bw_r}, fix=None, mlt={bw_m}, sect={bw_s}, alpha={bw_lph})")
btw_n_apart(ax, dstx, dsty, dx=bw_dx, ol=bw_o, r=bw_r, fix=None, mlt=bw_m, sect=bw_s)
else:
print(f"\tbtw_n_apart_x(..., dx={bw_dx}, ol={bw_o}, r={bw_r}, fix=None, mlt={bw_m}, sect={bw_s}, alpha={bw_lph})")
btw_n_apart_x(ax, dstx, dsty, dx=bw_dx, ol=bw_o, r=bw_r, fix=None, mlt=bw_m, sect=bw_s)
Gallery
There a great many images and they do add up to about 3.5 MB of download size. Sorry! And, I only used 1024 plotting points to try to keep things relatively small. For some of these I would, if thinking about printing at full size, use 2-4k plotting points. I have also reduced the number of colours in the PNG from full colour to 256 colours. This makes each individual image quite a bit smaller. But it does distort the background of the images which use many more individual colours.
Note: I am using lazy loading for the images, so if you don’t scroll down, you won’t load any more than the browser currently downloaded.
I have also used the same colour map for all the images. Perhaps not the best choice.
The base image is based on the following. Though because the wheel shape is a circle, only the widths are used for the circle radii.
wheels: 10 (Circle), k_f: 5, cgv: 4, points: 1024
widths: [1, 0.5092646387120655, 0.40837189463523244, 0.22764858813315933, 0.16277866605287283, 0.125j, 0.125j, 0.125, 0.125, 0.125j],
heights: [1, 0.738910118057744, 0.4888269632344673, 0.2538252500295064, 0.24899887203274657j, 0.22663856829736512, 0.17336544284026734, 0.17221196596740296, 0.125, 0.125],
freqs: [4, -11, -1, -11, -6, 9, 9, -11, 9, 9]
Here’s the base spirograph curve.
Though a gnarly style image, you can see the underlying spirograph shape in the following.
And now a series of my first attempt to get a cycling line width in the images. Mostly a failed attempt. But, these are a case where I would typically use 2-4k data points to prevent the gap between the lines.
And here’s a few where I used scatter plots to simulate cycling line widths (a better result in general). Again more data points would look better.
For this next one, I turned on my code attempting to generate a more symmetrical image.
I am thinking that did more or less work.
Here’s some variations on the full-gnarly.
A fair bit of similarity in those two.
For the next one I turned on my code attempting to create chaos.
Now applying some linear transformations to the gnarly curve. Any attempts at symmetry or chaos have been turned off. And, I did not extend the image boundaries to include the full range all of the curves.
Now let’s move onto some colour between images. The following few use my initial coding attempts.
Okay, some gnarly images with rotational transformations added.
All of the following use my latest image type: plot between images with linear and rotational transformations. The transformations are plotted in a random order. I am not going to show that order.
Add some random area sizes.
Let’s try a different function.
Done
That’s it for this one. And I think, very likely, for this series on me playing with digital spirograph type curves.
My apologies, just realized I didn’t do any colour between images along the x data rows, just the y data rows. Old age I expect.
Until next time, may you find peace at the keyboard.