See what a complex function does to the plane.

Type f(z) and every point of the complex plane gets colored by where it lands: hue shows the phase (argument) of f(z), brightness shows its magnitude, with rings marking each doubling in size. Pan and zoom in real time. For the rational-function presets, poles and zeros are marked exactly, using the same root finder as the rest of the site. Runs in a WebGL shader when your browser supports it, with an automatic slower fallback when it doesn't — either way, nothing leaves your browser, and every expression still goes through the same whitelisted parser with no eval.

Each ring marks |f(z)| doubling. Turn to 0 for flat shading, or up for sharper bands.

View

Drag to pan, scroll (or pinch) to zoom, click to inspect a point.

z (clicked) —
f(z) —
|f(z)| —
arg f(z) —

Click anywhere on the plot to inspect that point.

Still no eval, ever

f(z) is parsed by the exact same tokenizer → parser → whitelist as every other tool here. The only new step is a second, typed code generator that turns that same validated tree into a GLSL shader — nothing about the "never eval" guarantee changes.

Scoped on purpose

Functions without a well-defined complex meaning (asin, sinh, floor, atan2, mod, min/max, and the pow(...) form) are only allowed on real-valued sub-expressions, with a clear message if you try otherwise — rather than silently guessing at a generalization.

Bounded by design

Zoom is capped before it hits float32's precision wall, the no-WebGL fallback renderer caps its resolution so it can't hang your browser, and poles/zeros are only ever shown for presets whose exact coefficients are known — never guessed from arbitrary typed input.

View all math tools