You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整PHP SVG扇形绘制代码 使生成的分段始终处于居中位置

修复方案

你现有代码的问题出在3个地方:

  • 循环条件写错了,目前固定只循环1次,所以无论传入多少分段数,都只能画出第一个扇形
  • SVG标签的高度属性写死为200,和你定义的$size动态参数不匹配
  • 代码末尾多了一个多余的闭合大括号,会报语法错误

修改后的完整代码如下:

<?php
function segment_circle($segments, $size = 200) {
    $radius = $size / 2;
    $segment_arc = 360 / $segments;

    $generate_arc = function($start_angle, $end_angle) use ($radius) {
        $start = [
            'x' => $radius + ($radius * cos( ($end_angle - 90) * pi() / 180 )),
            'y' => $radius + ($radius * sin( ( $end_angle - 90) * pi() / 180 ))
        ];

        $end = [
            'x' => $radius + ($radius * cos( ($start_angle - 90) * pi() / 180 )),
            'y' => $radius + ($radius * sin( ($start_angle - 90) * pi() / 180 ))
        ];

        $arc = $end_angle - $start_angle <= 180 ? '0' : '1';

        return implode( ' ', [
            'M', $start[ 'x' ], $start[ 'y' ],
            'A', $radius, $radius, 0, $arc, 0, $end[ 'x' ], $end[ 'y' ],
            'L', $radius, $radius, 'Z'
        ]);
    };
?>
<svg width="<?php echo $size ?>" height="<?php echo $size ?>" viewBox="0 0 <?php echo $size ?> <?php echo $size ?>" xmlns="http://www.w3.org/2000/svg">
    <?php for ($i = 0; $i < $segments; $i++): ?>
        <?php
        $start_angle = $segment_arc * $i;
        $end_angle = $segment_arc * ($i + 1);
        ?>
        <path fill="#FFFFFF" stroke="#000" stroke-width="1" d="<?php echo $generate_arc($start_angle, $end_angle) ?>" />
    <?php endfor ?>
</svg>
<?php
}
echo segment_circle($getSegment);
?>

如果你需要调整扇形的整体起始旋转角度,再修改计算坐标时的-90参数即可,数值每加减1对应旋转1度。

内容的提问来源于stack exchange,提问作者Julia152

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:39:04