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

