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

PHP GD 庫繪製五角星:三角函數計算頂點座標完整實現

     編輯:PHP 相關知識

效果預覽

紅色背景、黃色五角星,輸出 PNG 圖片。核心邏輯:利用正五邊形幾何性質計算 5 個外頂點座標,按「跳一連線」規則繪製 5 條線段形成五角星。

完整代碼(可直接執行)

<?php
// 1. 畫布尺寸
$width  = 500;
$height = 500;

// 2. 創建真彩色圖像資源
$im = imagecreatetruecolor($width, $height);
if (!$im) die('GD 初始化失敗,請確認 php_gd2 擴展已啟用');

// 3. 分配顏色:紅色背景、黃色星星
$red    = imagecolorallocate($im, 230, 0, 0);
$yellow = imagecolorallocate($im, 255, 255, 0);

// 4. 填充背景
imagefill($im, 0, 0, $red);

/* ===== 幾何計算:正五邊形外接圓半徑 R,邊長 b =====
 * 正五邊形中心角 = 72°,頂點角 = 108°
 * 五角星由正五邊形 5 個頂點「隔一連線」形成
 * 這裡簡化:直接用三角函數計算 5 個頂點座標
 */
$b  = 100;           // 正五邊形邊長(可視為外接圓半徑近似值)
$pi = M_PI / 180;    // 角度轉弧度常數

// 星星中心點
$cx = 250;
$cy = 250;

// 計算 5 個頂點(從頂部頂點開始,順時針 72° 間隔)
$points = [];
for ($i = 0; $i < 5; $i++) {
    // 角度:-90° 為正上方,每步 +72°
    $angle = (-90 + $i * 72) * $pi;
    $points[] = [
        'x' => $cx + $b * cos($angle),
        'y' => $cy + $b * sin($angle)
    ];
}

/* ===== 繪製五角星:連接頂點 0-2, 2-4, 4-1, 1-3, 3-0 =====
 * 索引順序:0, 2, 4, 1, 3, 0
 */
$starOrder = [0, 2, 4, 1, 3, 0];
for ($i = 0; $i < count($starOrder) - 1; $i++) {
    $p1 = $points[$starOrder[$i]];
    $p2 = $points[$starOrder[$i + 1]];
    imageline($im, $p1['x'], $p1['y'], $p2['x'], $p2['y'], $yellow);
}

// 5. 輸出圖片
header('Content-Type: image/png');
imagepng($im);

// 6. 銷毀資源釋放內存
imagedestroy($im);
?>

幾何原理圖解

      頂點 0 (頂部)
          *
         / \
        /   \
       /     \
  頂點 3 *-----* 頂點 1
        \     /
         \   /
          \ /
      頂點 4 * 頂點 2
連接順序:0 → 2 → 4 → 1 → 3 → 0

關鍵函數速查

函數用途
imagecreatetruecolor(w, h)創建真彩色畫布(支援 1670 萬色),必須 GD 2.0+
imagecolorallocate(im, r, g, b)分配顏色索引,返回標識符供繪圖函數使用
imagefill(im, x, y, color)從 (x,y) 開始洪水填充
imageline(im, x1, y1, x2, y2, color)畫直線段
imagepng(im)輸出 PNG 格式到瀏覽器或文件
imagedestroy(im)釋放圖像資源內存

進階擴展建議

  • 填充五角星:用 imagefilledpolygon($im, $flatPoints, 5, $yellow),需將頂點展平為 [x0,y0,x1,y1,...] 陣列。
  • 抗鋸齒:imageantialias($im, true) 開啟線條抗鋸齒(僅對線條有效)。
  • 任意多邊形星星:參數化 points=5, skip=2 可畫五角星、六角星等。
  • 文字水印:imagettftext() 繪製 TTF 字體文字。
  • 輸出到文件:imagepng($im, 'star.png') 保存磁盤。

常見問題

  1. Call to undefined function imagecreatetruecolor() → PHP 未編譯/啟用 GD 擴展。php -m | grep gd 檢查;docker-php-ext-install gd 或 apt-get install php-gd 安裝。
  2. 圖片輸出為空/斷裂 → 輸出圖片前**不能有任何輸出**(包括空白、BOM、echo)。確保 header() 之前無輸出,或使用輸出緩衝 ob_start()。
  3. 顏色不正確 → 確保在 imagefill 後分配前景色,否則調色板索引可能衝突。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved