Кривые Безье на 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=20
11.07.2020, 14:13 [1320 просмотров]