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

Dan*_*ang 5 math graphics geometry polygon

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

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))
              );
}
Run Code Online (Sandbox Code Playgroud)

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

http://i.stack.imgur.com/Nv6Xf.gif http://i.stack.imgur.com/or967.gif

我正在寻找的是:

http://i.stack.imgur.com/Tfxs1.gif http://i.stack.imgur.com/BIORA.gif

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

Dr.*_*ius 8

你必须添加 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]  
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑

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

在此输入图像描述

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

2α= 2 Pi/n(单侧) - >α= Pi/n

编辑2

如果您希望底部与x轴对齐,请添加3 Pi/2- Pi/n...

在此输入图像描述