Maurer Lines

Maurer lines extend the Maurer rose (see maurer_rose) with different types of curves, rendering methods, and coloring.


Generalized string art

Type: 2D half-blur with 3D, Direct Color, and full-blur options
Author: Gregg Helt (cozyg)
Date: 30 Sep 2017

Maurer Lines Group Variation maurer lines
Maurer Lines Group Variation maurer lines 2

Maurer_lines produces a shape reminiscent of string art, art made by hammering nails into a board in some shape and stretching string between them. The crossing lines frequently give a shaded three dimensional appearance, but this is just an illusion; only render submodes 15-18 will produce a true 3D result.

This is a complex variation with lots of parameters, so instead of summarizing all parameters in a table, there are tables for each group of parameters. Note that the parameter order in the variation is different in some cases than that listed here. Many of the parameter descriptions reference mathematical constructs such as kinds of curves and splines; this is just a summary and does not describe them in detail.

Curve Definition

The curve is defined with the curve_mode and the a-h parameters, which are different for each type of curve as shown in the following table (parameters not mentioned are ignored for that curve).

0: circlea: radius
1: polygona: # vertices
2: ellipsea: horizontal radius
b: vertical radius
3: rhodonea / rosea: numerator
b: denominator
c: offset
4: epitrochoida: fixed disk size
b: rotating disk size
c: distance from center
5: hypotrochoida: fixed disk size
b: rotating disk size
c: distance from center
6: Lissajous curvea: vertical frequency
b: horizontal frequency
c: phase difference (radians)
7: epispirala: numerator
b: denominator
c: offset
8: supershape
9: Starr curve
10: Farris mystery curve
11: wagon fanciful curve
12: Fay butterfly
13: rigge1
14: rigge2
15: rigged rhodonea plus
16: rigged rhodonea minus
17: super ellipsea: horizontal size
b: vertical size
c: horizontal exponent
d: vertical exponent
18: super rhodonea

Maurer Lines Definition

The following parameters specify how the Maurer lines are defined.

theta_step_sizeStep size from one endpoint to the next along the rose curve, in degrees. Think of driving 360 nails along the curve; this is the number of nails between endpoints of each Maurer line.
initial_thetaStarting point, in degrees. Think of this as the nail to start with.
line_countNumber of Maurer lines to display (fewer will be visible when they overlap); increase the value if there are unwanted gaps in the result
irrationalizeAmount to make the step size irrational. Irrational step sizes will prevent the Maurer lines from returning to the starting position and, if line_count is large enough, fill the entire area.
cosets_modeMethod for including cosets in the result. (Cosets produce a parallel pattern of Maurer lines using the “unused nails”.)
0: No cosets
1: Classic cosets
2: Closure cosets
3: Hybrid of classic and closure.

Render Options

Classic Maurer lines are lines connecting the endpoints, but other options are available by setting render_mode:

0: DefaultStandard Maurer lines (same as Line)
1: LineA line segment connecting the endpoints
2: CircleA circle between the endpoints (the line, not drawn, is a diameter)
3: EllipseAn ellipse between the endpoints
4: Sine waveA sine wave between the endpoints
5: Quadratic Bèzier
6: Cardinal spline swizzle1
7: Cardinal spline swizzle2
8: Cardinal spline swizzle3
9: Sequin circle spline
10: Cubic hermite spline
11: Cardinal spline
12: Uniform Catmull-Rom spline
13: Nonuniform Catmull-Rom spline
14: Chordal Catmull-Rom spline
15: Centripetal Catmull-Rom spline
16: Kochanek-Bartels spline
17: Cubic Hermite variation 1
18: Cubic Hermite variation 2
19: Cubic Hermite variation 3
20: Cubic Hermite variation 4
21: Cubic Hermite variation 5
22: Kochanek-Bartels spline swizzle1
23: Kochanek-Bartels spline swizzle2
24: Kochanek-Bartels spline swizzle3
25: Cubic Hermite tangent form2

The render_submode parameter specifies how to draw the Maurer lines. In the following table, “stroke” is the curve specified by render_mode, “line” is the straight line between the endpoints, and “curve” is the portion of the main curve between the endpoints. Most look the same when render_mode is Line, but are different with other options.

The cubic Hermite render modes require computing a tangent; the tangent_submode parameter selects how this is done. This parameter is ignored for the other render modes. Note that the term “normal” is used in the mathematical sense of a line perpendicular to an object, not the English sense of “usual”.

0: DefaultSame as Tangent
1: Tangent
2: Unit tangent
3: Unscaled tangent
4: Unscaled unit tangent
5: Normal vector
6: Unit normal
7: Unscaled normal
8: Unscaled unit normal
9: Rotation tangent
10: Theta tangent
11: Index tangent
12: XY scale tangent

The three render_modifier parameters allow additional modification of some render modes. Their meaning varies depending on the render mode. Details TBD.

Coloring Options

Maurer_lines has an option to assign color to each point of the result according to one of several possible measures, specified by direct_color_measure. (The same options are used for filterx_measure.)

0: NoneDon’t use direct color
1: Line length (lines)
2: Line angle (lines)
3: Point angle (lines)
4: Meta index(requires meta mode; see below)
5: Z minmax (points)
6: Z absolute minmax (points)
7: Distance along lines (points)
8: Distance from midline (points)
9: Distance from nearest end (points)
10: Speed at endpoint
11: Current theta

The following options specify how to convert the measure into a gradient index or color. Note that the color is always clamped to 0-1 after this processing, so setting color_low_threshold to 0 and color_high_threshold to 1 gives maximum range.

direct_color_gradient0: Off (don’t use direct color)
1: Colormap clamp (use gradient, clamp values at thresholds)
2: Colormap wrap (use gradient, wrap values to keep in thresholds)
3: Red-green (true color, red and green)
4: Red-blue (true color, red and blue)
5: Blue-green (true color, blue and green)
direct_color_thresholdingHow to apply color_low_threshold and color_high_threshold
0: Percent
1: Value
color_low_thresholdLow color threshold
color_high_thresholdHigh color threshold


Filters are optional, but can be added to hide whole or partial lines based on different measures, the same ones as direct_color_measure. A new set of parameters is added to the interface for each filter, so when number_of_filters is 0, none of the filterx parameters will be visible. When there are two or more filters, they are processed in order, using the specified operator.

number_of_filtersNumber of filters, 0 for no filters
filterx_operatorOperator to apply before this filter
0: and
1: or
2: xor
3: a not b
4: b not a
filterx_modeMode for this filter
1: band pass value
2: band stop value
3: band pass percent
4: band stop percent
filterx_measureThe measure for this filter; see the direct_color_measure table above
filterx_low_thresholdLow threshold for this filter
filterx_high_thresholdHigh threshold for this filter

Other Modes

Maurer_lines has some other modes as described below. Meta mode generates a random index value (meta index) each iteration and uses that index in various ways. If meta_mode sets a parameter that is not used, it will have no effect.

randomize0: Take theta value from the variation input (half-blur)
1: Generate a random theta value (ignore input, full blur)
diff_mode0: Normal blur/half-blur
1: Add input point to output point (no effect if variation amount is 1)
meta_mode0: Meta mode off
1: Meta index to theta_step_size
2: Meta index to parameter a
3: Meta index to parameter b
4: Meta index to parameter c
5: Meta index to parameter d
6: Meta index to parameter e
7: Meta index to parameter f
8: Meta index to initial_theta
9: Meta index to parameters a and b (min value for b is b parameter)
10: Meta index to render_modifier1
11: Meta index to render_modifier2
12: Meta index to render_modifier3
meta_min_stepMinimum value of the meta index
meta_max_stepMaximum value of the meta index
meta_step_diffStep size for the meta index

Display Options

The Maurer lines result has three components: the curve, the endpoints, and the line (or the “stroke” if the render_mode specifies some other shape). Display of each of these can be controlled individually. Note that there is no “show_line” to control the density of the line display; they will have whatever density is left over (1 – show_points – show_curve).

show_pointsDensity of the endpoint display, from 0 (hide endpoints) to 1 (show only endpoints)
show_curveDensity of the curve display, from 0 (hide curve) to 1 (show only the curve)
line_thicknessThickness of the displayed lines
point_thicknessThickness of the displayed endpoints
curve_thicknessThickness of the displayed curve


This information has all been created by Rick Sidwell as a guide to the more popular variations used in fractal flames, and very generously allowed me to reproduce it here. Not all of the variations are included with JWildfire, but a great many are, so it is worthwhile learning about them.
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

See Also...

You may be interested in ...

Leave a Comment