FractalPark
ExoticMedium

Circle Inversion

A reciprocal quadratic map that swaps near and far at every step: small values fly outward, large ones return toward the origin.

Open in Explorer
Circle Inversion fractal with concentric rings and bright radial spines around a central pole
The Circle Inversion parameter plane: nested rings, axial spines, and the pole at the origin.

Overview

Circle Inversion trades familiar quadratic growth for a reciprocal quadratic step: take 1/z², then shift it by c. It looks like a small swap. The behavior is not.

In ordinary polynomial iteration, once an orbit grows beyond a certain size it keeps heading away from the origin. Here that logic turns inside out: near zero becomes enormous, and an enormous value comes back near zero. Then c decides where that exchanged value lands.

The picture is radial, with nested rings and sharp axial traces. The origin is a pole of order 2—a point where the map is undefined—and its pull reaches across the parameter plane.

The Mathematics

Reciprocal quadratic iteration

z(n+1) = 1 / z(n)^2 + c

At each step, the map takes the reciprocal of z²—geometric inversion through the unit circle with a doubled angle—then shifts the result by the complex parameter c. That inversion gives the formula its name; it is classical circle inversion applied to z² rather than to z.

Try c = 0 and start at z₀ = 2. Then z₁ = 1/4 = 0.25, z₂ = 1/(0.0625) = 16, z₃ = 1/256 ≈ 0.0039. The orbit ricochets between large and small values rather than settling at a fixed point. For c = 0.5, start at z₀ = 1: z₁ = 1/1 + 0.5 = 1.5, z₂ = 1/2.25 + 0.5 ≈ 0.944, z₃ = 1/0.892 + 0.5 ≈ 1.62. This orbit oscillates without diverging, suggesting c = 0.5 belongs to the bounded set. Escape needs a different test from the quadratic case: a huge value may collapse on the next step, so the bailout must allow for this alternation.

History

The map z → 1/z² + c sits near the broader rational family known as McMullen maps, z → zⁿ + λ/zⁿ. Curt McMullen introduced that family in the late 1980s, showing rational maps whose parameter spaces contain several kinds of hyperbolic components, including ones with Sierpiński-carpet Julia sets.

With n = 2, λ = 1, and a translation parameter c, this gives the Circle Inversion map. Its name comes from 1/z², which inverts the complex plane with respect to the unit circle and doubles the angle. Robert L. Devaney and others later studied the McMullen family, tracing how escape loci and Julia sets change with parameters. FractalPark renders exactly this map — the n = 2, λ = 1 case with c as the translation parameter.

Visual Characteristics

Concentric bands and radial spines run outward from the pole at the origin. The bands mark regions whose orbits stay bounded or escape at different rates, making nested rings like a target or the ripples from a dropped pebble.

Sharp axial structures form distinct spokes. They come from the inversion’s angular part: 1/z² doubles z’s angle, creating preferred directions where the dynamics line up. The reciprocal quadratic form gives this parameter plane a more rigid radial symmetry than most.

Remix and Examples

Start from the canonical Document

Open the same approved formula state used by this guide, then change the view, coloring, transforms, or animation in the interactive Explorer.

Frequently Asked Questions

Why is the origin special?

The origin is a pole of order 2: 1/z² is undefined at z = 0 because division by zero creates a singularity. An orbit landing exactly there cannot continue; one passing nearby gets a very large next value. That is why the rendered image grows rings and spines around the origin.

How does FractalPark handle values near zero?

The renderer clips the denominator at a small epsilon value to prevent division by zero. The pole still leaves its rings and spines visible, while the calculation stays numerically stable. Its effect remains part of the rendered structure.

References

Source walkthrough

  1. frm-v1:decba7b7f3d2b3e121f53906a98d62d32743da89d72ea79c2aa1ebd5f5aa2e37:init/0

    This cited initialization node performs only: if ismand: z = 0; otherwise z = pixel.

  2. frm-v1:decba7b7f3d2b3e121f53906a98d62d32743da89d72ea79c2aa1ebd5f5aa2e37:loop/0

    This cited first loop node performs only: z2 = z * z.

  3. frm-v1:decba7b7f3d2b3e121f53906a98d62d32743da89d72ea79c2aa1ebd5f5aa2e37:bailout

    This cited bailout node tests only: |z| <= 256.

Syntax features

initialization-flow

The initialization annotation isolates if ismand: z = 0; otherwise z = pixel rather than a later initialization statement. This is specific to circleInversion.

iteration-flow

The iteration annotation isolates the first loop assignment z2 = z * z; circleInversion squares z before the guarded component inversion. This is specific to circleInversion.

bailout-test

The termination annotation identifies the exact continuation comparison |z| <= 256. This is specific to circleInversion.

Parameter experiment

Steps

  1. Render circleInversion with the pinned parameter-plane baseline: center (0, 0), zoom 0.25, rotation 0, and 96 iterations.
  2. Keep center (0, 0), zoom 0.25, rotation 0, and 96 iterations fixed except for iterations, render once at 48 iterations, and compare it with the 96-iteration baseline.

What to observe

Record whether the 48- versus 96-iteration comparison changes anything, and note the source limit |z| <= 256. This is the circleInversion comparison.

Exercise

For circleInversion, use the three annotations to distinguish the single-node operations if ismand: z = 0; otherwise z = pixel, z2 = z * z, and |z| <= 256; explain why no neighboring statement belongs to the loop annotation.

Completion check

Name all 3 annotation IDs, then state exactly that the cited loop node is z2 = z * z and the cited bailout node is |z| <= 256. This completes the circleInversion reading.

Sources and rights

Grounded in runtime source revision decba7b7f3d2b3e121f53906a98d62d32743da89d72ea79c2aa1ebd5f5aa2e37 and the publication decision for 6c1385a9-2d23-5816-90d1-2752905fc353.

rightsStatus is project-owned; implementationBasis is project-owned; publicationDecision is publish; decisionReason is publish-project-owned-native-recipe. These records describe this project decision only and do not assert broader rights in any third-party original.

Formula Record

circleInversion

This canonical FractalPark implementation is published and runnable.

Deterministic preview of circleInversion

Canonical source

Language
frm-like/1
Standard library
1
Profile mode
parameter-plane
Profile center
0, 0
Profile zoom
0.25
Profile iterations
96
Profile evidence
family

Parameters

No declared parameters

Canonical source

This verified canonical revision is read-only. Remix creates a separate editable fork.

Loading canonical source…

Source and implementation

Formula ID
6c1385a9-2d23-5816-90d1-2752905fc353
Canonical name
circleInversion
Original name
circleInversion
Historical source
FractalPark
Current implementation
Project-owned

This is a FractalPark project-owned implementation. The linked file is the pinned canonical Definition.

Rights or attribution concern?

Send the Formula ID and supporting evidence. The maintainer can hold or withdraw the implementation while the claim is reviewed. contact@fractalpark.com