БлогNot. Кривые Безье на PHP

Кривые Безье на PHP

Здесь уже были кривые Безье на JavaScript, где есть готовый метод их рисования. На PHP сделать такое тоже несложно, вот функция для создания набора кубических кривых Безье выбранным цветом рисования, проверенная в текущей версии интерпретатора 7.X. Доступность графической библиотеки GD не проверяем, теперь она, как правило, доступна всегда.

<?php
 $image = imagecreate (200, 200); //размеры рисунка
 imagecolorallocate ($image, 255, 255, 255); //фон будет белым, только для imagecreate
 $color = imagecolorallocate($image, 255, 0, 0); //цвет рисования
 $curves = [ //координаты 4 точек для каждой кривой Безье
  [100,150,0,140,0,60,100,50],
  [100,150,199,140,199,60,100,50]
 ];

 cubicbezier($image, $color, $curves, 5);
 header('Content-type: image/png');
 imagepng($image);
 imagedestroy($image);
 
 function cubicbezier($img, $col, $curves, $n = 20) {
  for ($curve = 0; $curve < count($curves); $curve++) {
   list($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3) = $curves[$curve];
   $pts = [];
   for($i = 0; $i <= $n; $i++) {
    $t = $i / $n;
    $t1 = 1 - $t;
    $a = pow($t1, 3);
    $b = 3 * $t * pow($t1, 2);
    $c = 3 * pow($t, 2) * $t1;
    $d = pow($t, 3);
    $x = round($a * $x0 + $b * $x1 + $c * $x2 + $d * $x3);
    $y = round($a * $y0 + $b * $y1 + $c * $y2 + $d * $y3);
    $pts[$i] = array($x, $y);
   }
   for ($i = 0; $i < $n; $i++) {
    imageline($img, $pts[$i][0], $pts[$i][1], $pts[$i+1][0], $pts[$i+1][1], $col);
   }
  }
 }
?>
полученный этим скриптом рисунок (сознательно выбрано малое количество точек рисования $n, равное 5)
полученный этим скриптом рисунок (сознательно выбрано малое количество точек рисования $n, равное 5)
то же при $n=20
то же при $n=20

теги: графика php алгоритм

11.07.2020, 14:13; рейтинг: 71