如何调整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
相关产品推荐
相关产品推荐

