>>> For MoI4beta only<<<
Link to Jos Leys paper with description and pictures of Doyle spirals:
www.josleys.com/articles/HexCirclePackings.pdf
I've been studying the Doyle spirals extensively, and to assist with understanding, wrote a simple script to expand a 3 circle Doyle cell into a Doyle flower,
and by much repetition, into a Doyle spiral. The script requires 3 starter circles, preferably with coherent sizes.
A coherent starter set of 3 circles for (p,q) = (3,8) is attached in the zip. The attractor point of the spiral is at (0,0).
The script employs a "new" input method, double clicking on circles. Circle TanTan factory is used, the basis of the Circle TanTan command in MoI.
The first click of the double click selects the first Circle TanTan point. The second click selects the circle, and the point can be the same point as the first click.
The second click automatically fulfills the second prompt.
(The two clicks can be separate.)
Next, for the third prompt, is another double click. The first (3rd) click selects the second TanTan point of the second circle. The second (4th) click selects the second circle, and the point can be the same point as the first (3th) click.
The second (4th) click automatically fulfills the fourth prompt
(The two clicks can be separate.)
The fifth click selects the opposite circle.
Then a NEW tangent circle will appear.
The selection relies on the same tantan picking as Circle TanTan, so if the new circle does not appear, or is in the wrong place, try again.
The creating of the new circle is very reliable, but occasionally the new circle is in the wrong place, due to incorrect TanTan approximate points being selected.
Doyle flower script, by Brian McMillin, July 2019.
A terminal deselect of the circles may be in order?
The script can be put in the %AppData% command folder, to be accessible via custom.ui.
The script uses two MoI4Beta methods .isCircle, and .conicRadius, and so does not work in MoI3.
The traditional Doyle flower begins with 3 externally mutually tangent circles:
Circle C with radius R0. Circle C centered at (x,y) = (1,0).
Circle A with radius R1. Radii are nonzero.
Circle B with radius R2.
A and B also are complex numbers in the Argand plane, and A and B are the centers of circles A and B.
New Circle C3 will be tangent to C and B, and R3 = R0*R2/R1.
With attractor point w0 located at the origin, R0 will be less than 1 unit.
General form for a new circle petal in "cheek" or "cleft" of two adjoining circles:
Let 3 externally mutually tangent circles C0, C1, and C2, have radii of R0, R1, and R2, respectively. There is a "cheek" areas formed by the pair of adjacent circles, C0 and C1, where a tan/tan circle C3, of radius R3, may be added. Let the circle opposite the cheek of adjCircle1 (C0), and adjCircle2 (C1), be labelled oppCircle (C2). Then for new tan/tan circle C3, its radius = R3.
R3 = radius_adjCircle1 * radius_adjCircle2 / radius_oppCircle.
(There are two more "cheek" areas, where circles C4 and C5 may be created, with differently defined combinations of adjacent and opposite circles.)
To avoid eventual overlapping/crossing non-disjoint circles, to insure coherent Doyle spirals, the spiral arm counts "p" and "q" must be used to calculate with numeric methods the complex number center values for the centerpoints of A and B, as well as the radius of the center circle of the flower.
The Doyle flower script is a learning tool.
Next to be done is DoylePQ script to numerically solve for the coherency condition.
and then also, a script to built the Doyle spiral.
Then maybe a moebius transform and double spiral...
Also, a script to replace circles with spheres of matching radii, orient-able, would be helpful.
A javascript implementation, both of coherency and spiral building.
https://github.com/robinhouston/doyle-spirals
For given values of p and q, the 5 numbers from his numeric Doyle solver can be pasted into MoI Circle center command, to create the coherent circles A, B, and C.
First plot circle C of radius "r", located at center (1,0) in Top View. Then Tab copy paste the two numbers (x,y) for the center of circle A. The z coordinate is automatically zero.
Similarly for circle B.
His solver almost looks like it coud be #include in a MoI script, maybe by deleting a few ()? But there is no license.
There is also a mathematica implementation. (With MIT license, per the site.)
I've finally figured out all of the equations. The 3 papers/implementations use the SAME equations, but the notation varies.
I've also written a seven page pdf. It starts getting repetitious after a while:-)
- Brian