Processing math: 100%
home
> factoids
> superformula
The superformula is a generalisation of the circle, the ellipse,
and the superellipse, published by
Johan Gielis in 2003.
The equation of a circle of radius c is:
x^2 + y^2 = c^2 \mbox{ ; or } \left(\frac{x}{c}\right)^2 + \left(\frac{y}{c}\right)^2 = 1 \mbox{ ; or } r = c
where x = r \sin \phi and y = r \cos \phi.
The equation of an ellipse with semi-axes a and b is:
\left(\frac{x}{a}\right)^2 + \left(\frac{y}{b}\right)^2 = 1
\mbox{ ; or }
r = \left[\left(\frac{\cos\phi}{a}\right)^2 + \left(\frac{\sin\phi}{b}\right)^2\right]^{-1/2}
The superellipse
is a generalisation; the exponents can be any n, not just 2:
\left|\frac{x}{a}\right|^n + \left|\frac{y}{b}\right|^n = 1
\mbox{ ; or }
r = \left(\left|\frac{\cos\phi}{a}\right|^n + \left|\frac{\sin\phi}{b}\right|^n\right)^{-1/n}
Gielis' superformula
is a further generalisation, allowing the three occurences of the exponent n to vary independently,
and also allowing the frequency of the trigonometric functions to vary:
r = \left(\left|\frac{\cos (m\phi/4)}{a}\right|^{n_a}
+ \left|\frac{\sin (m\phi/4)}{b}\right|^{n_b}\right)^{-1/n}
With its many parameters, the superformula can describe a multitude of curves.
For example
(from the wikipedia superformula
page, individual curves labelled by (m,n,n_a,n_b), all with a=b=1)
Below is a utility (written in Processing, and using
processing.js
for execution is a browser).
The scrollbars allow variation of m,n,n_a,n_b,a,b,
plus a further parameter cy described in examples 6,7,8 below.
The buttons labelled 0..24 provide 25 predefined value sets,
displaying a range of possible superformula images.
The values of m are restricted to be multiples of \frac{1}{4};
the values of n,n_a,n_b are restricted to be multiples of \frac{1}{2}.
Predefined images (selected using the numbered buttons):
- (4, 2, 2, 2, 1, 1, 1) : A circle;
m=4 removes the frequency change;
n = n_a = n_b = 2 is the squared exponent;
a = b makes it a circle.
- (4, 2, 2, 2, 1.8, 0.5, 1) : An ellipse;
m=4 removes the frequency change;
n = n_a = n_b = 2 is the squared exponent;
a \neq b makes it an ellipse rather than a circle.
- (4, 3, 3, 3, 1.8, 0.5, 1) : A superellipse;
m=4 removes the frequency change;
n = n_a = n_b \neq 2 is the non-squared exponent.
If n = n_a = n_b = 1, the superellipse is a rhombus (see example 16);
if n = n_a = n_b \lt 1, the sides of superellipse are concave.
- (8, 2, 10, 10, 1, 1, 1) : An eight-pointed star.
- (3, 5, 18, 18, 1, 1, 1) : A three-pointed star.
- (5, 1, 2, 15, 1, 1, 1) : An asymmetric five-pointed star.
- (7, 4, 4, 17, 1, 1, 1) : An asymmetric seven-pointed star.
- (7, 4, 4, 17, 1.3, 1, 1) : An asymmetric seven-pointed star with a gap; a \neq b.
Because m is not an even integer, the frequency term means the value of r
is different when \phi = 0 and when \phi = 2\pi.
When m an odd integer, as here, it is easy to show that
r(0) = a^{n_a/n}; r(2\pi)=b^{n_b/n}.
For the curve to join up, we need a^{n_a/n}=b^{n_b/n}.
One way to achieve this is a=b=1 (as in the previous example);
another is a=b\neq 1, n_a=n_b.
- (7, 4, 4, 17, 1.3, 1, 2) : An symmetric seven-pointed star with two cycles; cy = 2.
A further way to make the curve join up for odd m is to plot \phi from 0 to 4\pi,
or 2 cycles, cy = 2.
When m is half-integral, we need cy=4; when it is quarter-integral, we need cy = 8.
Other fractional values (not supported here) would require different values of cy;
irrational values of m would never join up, no matter how large cy.
- (12, 15, 20, 3, 1, 1, 1) : A fancy dinner plate.
- (19, 9, 14, 11, 1, 1, 1) : Nineteen spike.
- (18, 9, 18, 17, 1, 1.5, 1) : Crinkly spikes.
- (17.75, 9, 18, 17, 1, 1.5, 8) : Crinkly spikey flowerhead; m=17.75,
so cy=8 for a closed curve.
- (16, 1, 1, 19, 1, 1, 1) : Crinkly, less spikey.
- (2, 1, 4, 8, 1, 1, 1) : A bean.
- (3, 5, 20, 20, 0.7, 1.2, 2) : Overlapping trefoils.
- (4, 1, 1, 1, 1.5, 1.5, 1) : The diamond (rhombus) superellipse; m=4; n = n_a = n_b = 1.
- (4, 1, 8, 8, 0.9, 0.9, 1) : A four-pointed star.
- (6, 1, 1, 1, 1.8, 1.1, 1) : A lumpy triangle: six-pointed, but very differing sizes.
- (10, 1, 1, 1, 1.8, 1.1, 1) : A lumpy starfish.
- (5, 2, 17, 4, 0.8, 1.5, 2) : A five-petalled flower.
- (9, 2, 17, 4, 0.8, 1.5, 2) : A nine-petalled flower.
- (2.5, 0.5, 0.5, 0.5, 2, 2, 2) : Rose sepals.
- (8, 0.5, 0.5, 8, 1.9, 1.05, 1) : A spikey four-leafed clover.
- (18, 0.5, 0.5, 4, 1.2, 1.1, 1) : A virus.