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

如何在PowerShell脚本中格式化ImageMagick参数:六边形顶点连线数组

优化后的PowerShell六边形生成脚本

先上完整的优化代码:

# Hexagon
$size = 482  # 直接用数字类型,避免字符串转数字的隐式操作
$half = $size / 2
# 初始化空数组,循环填充六边形顶点坐标
$hex = @()
for ($i = 0; $i -lt 6; $i++) {
    $angle = 2 * [math]::pi * $i / 6 + [math]::pi
    $x = $half * [math]::cos($angle) + $half
    $y = $half * [math]::sin($angle) + $half
    $hex += "$x,$y"
}

# 批量生成-draw命令数组,每个参数对拆成数组元素
$drawCommands = @()
for ($i = 0; $i -lt 3; $i++) {
    $drawCommands += "-draw", "line $($hex[$i]) $($hex[$i+3])"
}

# 调用magick工具,直接展开draw命令数组
magick -size "${size}x${size}" xc:none `
       -stroke black -fill white -draw "polygon $($hex -join ' ')" `
       -stroke black -fill none `
       $drawCommands `
       test_hex.png

针对你两个问题的优化说明

1. 正确初始化$hex数组

原来的$hex = @(0,1,2,3,4,5)属于无效操作——先填充6个无关数字,之后又逐个覆盖,完全没必要。直接用$hex = @()初始化空数组,循环中通过$hex +=添加坐标字符串,逻辑更直观。
额外优化:把角度计算单独抽成$angle变量,代码可读性提升;$size直接用数字类型,避免字符串除法的隐式转换步骤。

2. 用数组批量处理-draw参数

之前尝试直接存draw命令数组调用失败,是因为magick要求-draw和后面的命令文本是两个独立的命令行参数。解决方法是把每一组-draw "line ..."拆成数组的两个元素,生成完整的参数数组$drawCommands,调用magick时直接展开这个数组,PowerShell会自动将数组元素作为独立参数传递给magick,完美替代重复写三次-draw的冗余代码。
注意:拼接polygon参数时,必须用$($hex -join ' ')把数组元素用空格连接成字符串——如果直接写$hex,PowerShell会默认用逗号分隔数组元素,magick无法识别这种格式的顶点坐标。

生成的效果如下:

六边形效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:12:04