Суперформула

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Декілька прикладів кривих, що описуються суперформулою для різних значень m, n1, n2 і n3 за умови a=b=1

Суперформула — узагальнений випадок рівняння плоскої кривої супереліпса (кривої Ламе), записаний у 1997 році бельгійським вченим Йоханом Джилісом (англ. Johan Gielis).

Й.Джиліс припустив, що формула може бути використана для опису багатьох складних форм і кривих, які зустрічаються в природі[1].

Запис рівняння[ред.ред. код]

У полярних координатах, для r радіуса і кута \varphi, суперформула має вигляд:

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}}}
,

де m — характеризує число фрагметів, що повторюються;

n_1, n_2, n_3 — параметри, що визначають форму;
a, b — габарити (величини півосей).

Графіки[ред.ред. код]

Інші приклади кривих, побудованих за супреформулою для вказаних m, n1, n2 і n3 при a = b = 1

Sf2d.png

Програмні реалізації побудови кривих[ред.ред. код]

GNU Octave[ред.ред. код]

Програма для генерування кривих на основі суперформули мовою програмування 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 script[ред.ред. код]

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. Геометричне місце точок відповідної поверхні може бути задане співвідношеннями:

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

де \phi змінюється у межах від -π/2 до π/2 (широта) і θ в діапазоні між та π (довгота).

Графічні побудови[ред.ред. код]

Програма у GNU Octave[ред.ред. код]

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;

Див. також[ред.ред. код]

Примітки[ред.ред. код]

  1. Gielis Johan A generic geometric transformation that unifies a wide range of natural and abstract shapes American Journal of Botany 90 (3): 333–338, 2003. ISSN 0002-9122

Посилання[ред.ред. код]