当前位置: 首页> 最新文章列表> 动态生成坐标数组绘制任意边数的多边形

动态生成坐标数组绘制任意边数的多边形

M66 2025-05-29

在图像处理领域,使用PHP的GD库绘制图形是一项常见的技能。其中,imageopenpolygon 函数(正确函数名应为 imagepolygon)可以用来绘制任意边数的多边形。本文将详细介绍,如何动态生成坐标数组,并用它来绘制规则的N边形。

一、什么是 imagepolygon?

imagepolygon() 是PHP GD库中用来绘制多边形的函数。
它的基本用法如下:

bool imagepolygon(
    GdImage $image,
    array $points,
    int $num_points,
    int $color
)
  • $image 是图像资源;

  • $points 是点数组,格式如 [x1, y1, x2, y2, ..., xn, yn]

  • $num_points 是点的数量(不是数组元素数量,要除以2);

  • $color 是绘制的颜色。

二、如何动态生成坐标数组?

要绘制任意边数的多边形(比如五边形、八边形等),我们可以用简单的三角函数来生成坐标。思路如下:

  • 设定多边形中心点 (cx, cy)

  • 设定半径 r(即从中心到顶点的距离);

  • 均匀地在360°上分布每个顶点;

  • 每个顶点的坐标可以通过正弦 (sin) 和余弦 (cos) 计算得到。

公式为:

x = cx + r * cos(角度)
y = cy + r * sin(角度)

注意,PHP的 cos()sin() 接收的角度是弧度,需要用 deg2rad() 进行转换。

三、完整PHP示例

下面是一个完整示例,演示如何动态生成坐标并绘制一个任意边数的多边形:

<?php
// 设置图片尺寸
$width = 400;
$height = 400;

// 创建画布
$image = imagecreatetruecolor($width, $height);

// 分配颜色
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);

// 填充背景
imagefill($image, 0, 0, $white);

// 多边形参数
$number_of_sides = 7; // 例如,绘制七边形
$radius = 150; // 半径
$centerX = $width / 2;
$centerY = $height / 2;

// 生成坐标点
$points = [];
for ($i = 0; $i < $number_of_sides; $i++) {
    $angle_deg = (360 / $number_of_sides) * $i - 90; // 从顶部开始绘制
    $angle_rad = deg2rad($angle_deg);
    $x = $centerX + $radius * cos($angle_rad);
    $y = $centerY + $radius * sin($angle_rad);
    $points[] = (int)$x;
    $points[] = (int)$y;
}

// 绘制多边形
imagepolygon($image, $points, $number_of_sides, $black);

// 输出图片到浏览器
header('Content-Type: image/png');
imagepng($image);

// 销毁资源
imagedestroy($image);
?>

将上述代码保存为PHP文件(如 polygon.php),通过浏览器访问,即可看到一个规则的七边形。

四、示例说明

  • 通过调整 $number_of_sides 变量,可以绘制不同边数的多边形;

  • $radius 决定了多边形的大小;

  • 角度的偏移量(这里是 -90 度)使得第一个顶点在顶部,效果更美观;

  • 如果需要把图片保存到服务器,可以使用 imagepng($image, 'path/to/file.png')

比如,保存图片到 m66.net/uploads/polygon.png

imagepng($image, '/var/www/m66.net/uploads/polygon.png');

注意确保保存目录有写入权限!

五、总结

使用PHP的 imagepolygon 函数结合简单的三角函数运算,我们可以轻松地绘制任意边数的规则多边形。这在制作图形生成器、验证码、图表组件时都有很大的用处。未来如果想绘制带颜色填充的多边形,还可以结合 imagefilledpolygon() 函数实现。