Блог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

11.07.2020, 14:13 [1320 просмотров]


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

К этой статье пока нет комментариев, Ваш будет первым