Суперформула (уравнение)



Суперформула является обобщением суперэллипса и впервые была выведена Йоханом Гиелисом в 2003 году. Гиелис предположил использовать формулу для описания сложных форм и кривых, которые встречаются в природе.

В полярной системе координат с радиусом r {displaystyle r} и углом φ {displaystyle varphi } суперформула выглядит так:

r ( φ ) = ( | cos ⁡ ( m φ 4 ) a | n 2 + | sin ⁡ ( m φ 4 ) b | n 3 ) − 1 n 1 . {displaystyle rleft(varphi ight)=left(left|{frac {cos left({frac {mvarphi }{4}} ight)}{a}} ight|^{n_{2}}+left|{frac {sin left({frac {mvarphi }{4}} ight)}{b}} ight|^{n_{3}} ight)^{-{frac {1}{n_{1}}}}.}

Выбирая различные значения параметров a , b , m , n 1 , n 2 , n 3 {displaystyle a,b,m,n_{1},n_{2},n_{3}} , получаются различные формы.

Формула получена путём обобщения суперэллипса, который, в свою очередь, был выведен французским математиком Габриелем Ламе, а назван и популяризирован датским математиком Питом Хейном.

Обобщение

Суперформулу можно обобщить, заменив параметр m двумя новыми параметрами y и z:

r ( φ ) = ( | cos ⁡ ( y φ 4 ) a | n 2 + | sin ⁡ ( z φ 4 ) b | n 3 ) − 1 n 1 {displaystyle rleft(varphi ight)=left(left|{frac {cos left({frac {yvarphi }{4}} ight)}{a}} ight|^{n_{2}}+left|{frac {sin left({frac {zvarphi }{4}} ight)}{b}} ight|^{n_{3}} ight)^{-{frac {1}{n_{1}}}}}

Это позволяет создавать асимметричные и вложенные структуры. В следующих примерах a , b , n 2 {displaystyle a,b,n_{2}} и n 3 {displaystyle {n_{3}}} равны 1:

Построения

Пример программы в GNU Octave для генерации этих фигур:

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

3 мерная суперформула: a = b = 1; m, n1, n2 И n3 , показаны на изображениях.

Пример программы в GNU Octave для генерации этих фигур:

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;