math – 如何绘制正多边形,使一条边与X轴平行?

我知道要从中心点绘制正多边形,您可以使用以下内容:

for (int i = 0; i < n; i++) {  
    p.addPoint((int) (100 + 50 * Math.cos(i * 2 * Math.PI / n)),
               (int) (100 + 50 * Math.sin(i * 2 * Math.PI / n))
              );
}

但是,无论如何都要更改此代码(不添加旋转)以确保始终绘制多边形,以使最上边或最下边与180度线平行?例如,通常,上面的代码为五边形或正方形(分别为n = 5和4)会产生类似于:

我正在寻找的是:

 

是否有任何数学方法可以实现这一目标?

你必须添加Pi / 2-Pi / n

k[n_] := Pi/2 - Pi/n;
f[n_] := Line[
   Table[50 {Cos[(2 i ) Pi/n + k[n]] ,Sin[(2 i) Pi/n + k[n]]}, {i,0,n}]];

GraphicsGrid@Partition[Graphics /@ Table[f[i], {i, 3, 8}], 3]

编辑

回答你的评论,我会解释我是如何得出这个公式的.看下图:

如您所见,我们希望一侧的中点与Pi / 2对齐.那么……什么是α?很明显

2 α = 2 Pi/n (one side) -> α = Pi/n

编辑2

如果您希望底边与x轴对齐,请添加3 Pi / 2- Pi / n而不是…

相关文章
相关标签/搜索