首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP GD库绘制心形曲线:从笛卡儿心脏线到像素级渲染

     編輯:PHP 相關知識

PHP GD库绘制心形曲线:从笛卡儿心脏线到像素级渲染

利用PHP GD库可生成各种数学曲线图形。本文展示两种绘制心形的方法:多边形拟合法与极坐标像素绘制法,均输出GIF图片。

方法一:笛卡儿心脏线多边形拟合

笛卡儿心脏线参数方程:
x = 2*sin(t) - sin(2t)
y = 2*cos(t) - cos(2t)

<?php
// 1. 计算360个点坐标
$str = [];
for ($t = 0; $t < 360; $t++) {
    $rad = deg2rad($t);
    $y = 2*cos($rad) - cos(2*$rad);
    $x = 2*sin($rad) - sin(2*$rad);
    $x += 3; $y += 3;          // 平移至正坐标
    $x *= 70; $y *= 70;        // 缩放
    $x = round($x); $y = round($y);
    $str[] = $x;
    $y = $y + 2*(180 - $y);    // Y轴翻转(图像坐标系原点左上)
    $str[] = $y;
}

// 2. 创建画布并绘制
$im = imagecreate(400, 400);
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
imagepolygon($im, $str, 360, $red);      // 绘制多边形
imagestring($im, 5, 190, 190, "love", $red); // 写文字

// 3. 输出
header('Content-Type: image/gif');
imagegif($im);
imagedestroy($im);
?>

效果:平滑的红色心形轮廓,中心显示"love"文字。

方法二:极坐标方程像素级绘制

方程:r = (π/50)*i * (1 - sin(π/50*j)) * 40
x = r * cos(π/50*j) * sin(π/50*i) + width/2
y = -r * sin(π/50*j) + height/6

<?php
$width = 600; $height = 650;
header("Content-Type: image/gif");
$img = imagecreate($width, $height);
$bg_color = imagecolorallocate($img, 0, 0, 0);
$red = imagecolorallocate($img, 255, 0, 0);

for ($i = 0; $i <= 100; $i++) {
    for ($j = 0; $j <= 100; $j++) {
        $r = M_PI/50 * $i * (1 - sin(M_PI/50 * $j)) * 40;
        $x = $r * cos(M_PI/50 * $j) * sin(M_PI/50 * $i) + $width/2;
        $y = -$r * sin(M_PI/50 * $j) + $height/6;
        imagesetpixel($img, $x, $y, $red);
    }
}
imagegif($img);
imagedestroy($img);
?>

效果:由密集像素点组成的立体心形,视觉更细腻。

核心函数速查

函数用途
imagecreate(w,h)创建基于调色板的画布
imagecolorallocate(im,r,g,b)分配颜色,返回标识符
imagepolygon(im,points,num,color)绘制多边形,points为[x1,y1,x2,y2...]
imagesetpixel(im,x,y,color)绘制单个像素
imagestring(im,font,x,y,str,color)绘制字符串
imagegif(im)输出GIF格式
imagedestroy(im)释放资源

扩展建议

  • 使用imagecreatetruecolor支持真彩色、Alpha透明
  • 结合imagefilter添加模糊、浮雕等效果
  • 输出PNG(imagepng)支持无损压缩
  • 封装为类,参数化大小、颜色、文字,做成通用心形生成API
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved