【问题标题】:How to draw a regular polygon so that one edge is parallel to the X axis?如何绘制一个正多边形,使一条边平行于 X 轴?
【发布时间】:2011-07-24 21:49:04
【问题描述】:

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

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 分别)会产生类似:

当我正在寻找的是:

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

【问题讨论】:

  • 请允许我欢迎您来到 StackOverflow,并提醒我们通常在这里做的三件事:1) 当您获得帮助时,请尝试在您的专业领域中回答问题 2)Read the FAQs 3)当你看到好的问答时,投票给他们using the gray triangles,因为系统的可信度是基于用户通过分享他们的知识而获得的声誉。还记得接受更好地解决您的问题的答案,如果有的话,by pressing the checkmark sign

标签: math graphics geometry polygon


【解决方案1】:

你要加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(一侧)-> α = Pi/n

编辑 2

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

【讨论】:

  • 抱歉之前的删除,我弄错了,看的太晚了
  • 非常感谢! *我只是想知道,但你是怎么想出来的?
【解决方案2】:

将 Math.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,如另一个答案中所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
相关资源
最近更新 更多