This function creates and displays 2D Apollonian gaskets.
In mathematics, an Apollonian gasket or Apollonian net is a fractal generated from three circles, any two of which are tangent to one another
The method used to create the Apollonian gasket is based on circle inversion, which is a geometrical transformation acting with a reference circle that modifies points.
In the plane, the inverse of a point P in respect to a circle of center O and radius R is a point P' such that P and P' are on the same ray going from O, and OP times OP' equals the radius squared
OP * OP' =R²
All circles are created using the inversion properties of circles.
Input: This function takes 6 arguments (each argument is optional)
- a positive integer, which corresponds to the number of circles on the first level of the apollonian packing. (3 at least)
- a positive integer, which corresponds to the number of levels of the apollonian. Higher the number of level is, more numerous the circles will be. 10 levels is a quite high value.
- an interger (0 or 1), which allows to display(1) or not(0) the inversion circles
- an integer (0 or 1), which indicates whether or not a metapost file is created within the results.
- an integer (0 or 1), which indicates whether or not a SVG file is created within the results.
- a string which indicates the filename in which results will be printed.
Output: a struture that contains all informations on created circles on each level:
- S(1) contains all data on level 1, coordinates centers and
radius of each circle
Nice code, but it fails the Apollonian rule when starting with four or more circles. As can be seen in the posted sample image, the second and higher-level circles are not tangent to three circles on the previous level. Something is wrong in the way the inverse-circles are calculated; I haven't tracked down just what.
Nice piece of work.
An SVG script has been added.
The plot function has been updated, resulting in fast plot, and lower size picture.