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

Math 如何绘制正多边形,使一条边平行于X轴?,math,graphics,geometry,polygon,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)) ); } for(inti=0;iα=π/n 编辑2 如果希望底部与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))
              );
}
for(inti=0;i
但是,是否需要更改此代码(不添加旋转)以确保始终绘制多边形,从而使最上面或最下面的边与180度线平行?例如,通常情况下,上面的五边形或正方形代码(其中n分别为5和4)会生成类似于:

当我寻找的是:


有什么数学方法可以做到这一点吗?

将Math.PI/n添加到角度。

您必须添加
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]  

编辑

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

正如你所看到的,我们希望一条边的中点与π/2对齐。所以什么是α?很明显

2α=2π/n(一侧)->α=π/n

编辑2

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


我假设你的意思是p.addPoint((int)(100+50*Math.cos((I*2+Math.PI/n)*Math.PI/n)),(int)(100+50*Math.sin((I*2+Math.PI/n)*Math.PI/n));好吧,我试了一下,它不起作用,除非我误解了你的答案。要详细说明吗?您正在添加(π/n)^2。改用
Math.cos((i*2+1)*Math.PI/n)
。顺便说一句,如果这是作业,你应该给它贴上这样的标签。事实上,我刚刚试过,它只适用于正方形和八角形,但现在已经足够好了。我对所有多边形都适用,但它强制垂直边而不是水平边(对不起,实际上没有测试它)。您需要为四分之一圆旋转添加另一个π/2,如另一个答案中所示。对于之前的删除,很抱歉,我犯了一个错误,看到它太晚了。非常感谢*我只是想知道,但是你是怎么想出来的?请允许我欢迎你来到StackOverflow,并提醒我们通常在这里做的三件事:1)当你得到帮助时,试着也给予帮助,回答你专业领域的问题2)3)当你看到好的问答时,投票给他们,因为系统的可信度是基于用户通过分享知识而获得的声誉。还记得接受更好地解决问题的答案,如果有的话,