Суперформула
Суперформула — узагальнений випадок рівняння плоскої кривої супереліпса (кривої Ламе), записаний у 1997 році бельгійським вченим Йоханом Джилісом (англ. Johan Gielis).
Й.Джиліс припустив, що формула може бути використана для опису багатьох складних форм і кривих, які зустрічаються в природі[1].
У полярних координатах, для радіуса і кута , суперформула має вигляд:
де — характеризує число фрагметів, що повторюються;
- , , — параметри, що визначають форму;
- , — габарити (величини півосей).
Інші приклади кривих, побудованих за супреформулою для вказаних m, n1, n2 і n3 при a = b = 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
PHP-скрипт для генерування таких фігур:
<?php
header("Content-type: image/png");
set_time_limit(120);
$img = imagecreatetruecolor(800, 800);
$black = imagecolorallocate($img, 0, 0, 0);
imagefilledrectangle($img, 0, 0, 800, 800, $black);
$center = 400;
$PI = 2 * pi();
$a = 1;
$b = 1;
$m = 12;
$n1 = 5;
$n2 = 6;
$n3 = 48;
for($f = 0; $f <= $PI; $f += 0.0001) {
$r= pow((pow(abs(cos($m*$f/4)/$a),$n2) + pow(abs(sin($m*$f/4)/$b), $n3)), -(1/$n1));
$x = $center + $r * cos ($f) * 100;
$y = $center + $r * sin ($f) * 100;
$col = imagecolorallocate($img, 255, 255, 255);
imagesetpixel($img, $x, $y, $col);
}
print imagepng($img);
imagedestroy($img);
?>
Є можливим розширення суперформули до 3, 4, чи n вимірів, у сферичній системі координат. Наприклад тривимірне параметричне задання поверхні отримується перемноженням двох суперформул r1 and r2. Геометричне місце точок відповідної поверхні може бути задане співвідношеннями:
де змінюється у межах від -π/2 до π/2 (широта) і θ в діапазоні між -π та π (довгота).
Тривимірна суперформула для a = b = 1:
-
m=3, n1=2, n2=5, n3=7
-
m=3, n1=5, n2=5, n3=5
-
m=3, n1=30, n2=15, n3=15
-
m=7, n1=2, n2=8, n3=4
-
m=5, n1=1, n2=1, n3=1
-
m=4, n1=0.5, n2=0.5, n3=4
-
m=8, n1=0.5, n2=0.5, n3=8
-
m=4, n1=12, n2=15, n3=15
Показані вище фігури згенеровано наступним скриптом 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;
- ↑ Gielis Johan A generic geometric transformation that unifies a wide range of natural and abstract shapes [Архівовано 21 серпня 2012 у Wayback Machine.] American Journal of Botany 90 (3): 333–338, 2003. ISSN 0002-9122
- Some Experiments on Fitting of Gielis Curves by Simulated Annealing and Particle Swarm Methods of Global Optimization (англ.)
- Least Squares Fitting of Chacón-Gielis Curves By the Particle Swarm Method of Optimization (англ.)
- Superformula 2D Plotter & SVG Generator [Архівовано 31 жовтня 2009 у Wayback Machine.] (англ.)
- Interactive example using JSXGraph [Архівовано 7 жовтня 2016 у Wayback Machine.] (англ.)
- 3D Superdupershape Explorer using Processing [Архівовано 19 жовтня 2016 у Wayback Machine.] (англ.)
- Interactive 3D Superformula plotter using Processing (with code) (англ.)
- SuperShaper: An OpenCL accelerated 3D SuperShape generator with shader based visualisation (OpenGL3) (англ.)