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

发布于 2024-10-27 16:13:52 字数 742 浏览 7 评论 0原文

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

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 分别)的代码将生成如下内容:

 https://i.sstatic.net/Nv6Xf.gif https://i.sstatic.net/or967.gif

当我要查找的是:

https://i.sstatic.net/Tfxs1.gif https://i.sstatic.net/BIORA.gif

有什么数学方法可以实现这一点吗?

I know that to draw a regular polygon from a center point, you use something along the lines of:

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))
              );
}

However, is there anyway to change this code (without adding rotations ) to make sure that the polygon is always drawn so that the topmost or bottommost edge is parallel to a 180 degree line? For example, normally, the code above for a pentagon or a square (where n = 5 and 4 respectively) would produce something like:

https://i.sstatic.net/Nv6Xf.gif
https://i.sstatic.net/or967.gif

When what I'm looking for is:

https://i.sstatic.net/Tfxs1.gif https://i.sstatic.net/BIORA.gif

Is there any mathematical way to make this happen?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眉目亦如画i 2024-11-03 16:13:52

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

在此处输入图像描述

You have to add 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]  

enter image description here

Edit

Answering your comment, I'll explain how I arrived at the formula. Look at the following image:

enter image description here

As you may see, we want the middle point of a side aligned with Pi/2. So ... what is α? It's obvious

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

Edit 2

If you want the bottom side aligned with the x axis, add 3 Pi/2- Pi/n instead ...

enter image description here

乖乖哒 2024-11-03 16:13:52

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

Add Math.PI / n to the angles.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文