Superformula

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Some superformula samples: a = b = 1; m, n1, n2 and n3 are shown in picture

The superformula is a generalization of the superellipse and was first proposed by Johan Gielis in 2003.[1] Gielis suggested that the formula can be used to describe many complex shapes and curves that are found in nature.

In polar coordinates, with r the radius and \varphi the angle, the superformula is:

r\left(\varphi\right) =
\left(
        \left|
                \frac{\cos\left(\frac{m\varphi}{4}\right)}{a}
        \right| ^{n_2}
+
        \left|
                \frac{\sin\left(\frac{m\varphi}{4}\right)}{b}
        \right| ^{n_3}
\right) ^{-\frac{1}{n_{1}}}.

By choosing different values for the parameters a, b, m, n_1, n_2, n_3, different shapes can be generated.

The formula was obtained by generalizing the superellipse, named and popularized by Piet Hein, a Danish mathematician.

Extension to higher dimensions[edit]

It is possible to extend the formula to 3, 4, or n dimensions, by means of the spherical product of superformulas. For example, the 3D parametric surface is obtained by multiplying two superformulas r1 and r2. The coordinates are defined by the relations:

 x = r_1(\theta)\cos\theta \cdot r_2(\phi)\cos\phi,
 y = r_1(\theta)\sin\theta \cdot r_2(\phi)\cos\phi,
 z = r_2(\phi)\sin\phi,

where \phi (latitude) varies between −π/2 and π/2 and θ (longitude) between −π and π.

Plots[edit]

Sf2d.png

A GNU Octave program for generating these figures:

  function sf2d(n,a)
    u=[0:.001:2*pi];
    raux=abs(1/a(1).*abs(cos(n(1)*u/4))).^n(3)+abs(1/a(2).*abs(sin(n(1)*u/4))).^n(4);
    r=abs(raux).^(-1/n(2));
    x=r.*cos(u);
    y=r.*sin(u);
    plot(x,y);
  end



3D superformula: a = b = 1; m, n1, n2 and n3 are shown in the pictures.

A GNU Octave program for generating these figures:

 function sf3d(n, a)
  u=[-pi:.05:pi];
  v=[-pi/2:.05:pi/2];
  nu=length(u);
  nv=length(v);
    for i=1:nu
    for j=1:nv
      raux1=abs(1/a(1)*abs(cos(n(1).*u(i)/4))).^n(3)+abs(1/a(2)*abs(sin(n(1)*u(i)/4))).^n(4);
      r1=abs(raux1).^(-1/n(2));
      raux2=abs(1/a(1)*abs(cos(n(1)*v(j)/4))).^n(3)+abs(1/a(2)*abs(sin(n(1)*v(j)/4))).^n(4);
      r2=abs(raux2).^(-1/n(2));
      x(i,j)=r1*cos(u(i))*r2*cos(v(j));
      y(i,j)=r1*sin(u(i))*r2*cos(v(j));
      z(i,j)=r2*sin(v(j));
    endfor;
  endfor;
  mesh(x,y,z);
 endfunction;

References[edit]

External links[edit]