如何在Mathematica中编写绘制指定参数n角星的star函数?
Mathematica 绘制n角星的实现方案
核心函数说明
你提到的Graphics、Line、Table都是必需的,另外还需要用到三角函数Cos/Sin完成极坐标到直角坐标的转换,以及GCD(按需)处理不同样式星形的顶点步长:
Graphics:作为图形渲染容器,承载所有绘图元素Line:定义连接顶点的闭合线段,是构成星形的核心元素Table:批量生成所有顶点的坐标,替代手动逐个计算Cos/Sin:将极坐标(角度、半径)转换为Mathematica绘图需要的直角坐标GCD:自动筛选合法的星形步长(实现通用n角星时使用)
示例代码实现
1. 支持自定义步长的通用版本
此版本允许指定步长k(k需与n互质且1<k<n/2,不同k会生成不同样式的n角星):
star[n_, k_] := Graphics[ Line[Table[ {Cos[Pi/2 - 2 Pi k i/n], Sin[Pi/2 - 2 Pi k i/n]}, {i, 0, n} (* 生成n+1个点,最后一个与第一个重合,保证图形闭合 *) ]], PlotRange -> {{-1.1, 1.1}, {-1.1, 1.1}}, (* 扩大范围避免边缘被截断 *) Axes -> True, AxesOrigin -> {0, 0} (* 确保坐标轴中心在(0,0) *) ] (* 调用示例:绘制标准5角星(步长k=2) *) star[5, 2] (* 调用示例:绘制7角星(步长k=3) *) star[7, 3]
2. 自动选择步长的简化版本
如果不需要自定义步长,此版本会自动选择符合条件的最小步长,生成最常见的n角星样式:
star[n_] := Module[{k}, (* 筛选出与n互质且在合理范围的最小步长k *) k = First[Select[Range[2, Floor[n/2]], GCD[#, n] == 1 &]]; Graphics[ Line[Table[ {Cos[Pi/2 - 2 Pi k i/n], Sin[Pi/2 - 2 Pi k i/n]}, {i, 0, n} ]], PlotRange -> {{-1.1, 1.1}, {-1.1, 1.1}}, Axes -> True, AxesOrigin -> {0, 0} ] ] (* 调用示例:自动生成5角星 *) star[5] (* 调用示例:自动生成9角星 *) star[9]
代码细节说明
- 起始点
(0,1)对应的极坐标角度是π/2(90度),代码以此为基准,通过2 Pi k i/n计算每个顶点的角度偏移 - 半径固定为1,所以
Cos和Sin的结果直接作为直角坐标值 Table生成n+1个点是为了让最后一个点和第一个点重合,确保星形闭合
内容的提问来源于stack exchange,提问作者user13170084
相关产品推荐
相关产品推荐

