一尘不染

计算正多边形的顶点的坐标

algorithm

我正在编写一个程序,其中我需要绘制任意数量的边的多边形,每个边都由一个动态变化的给定公式转换。其中涉及一些相当有趣的数学,但我始终坚持这一观点。

仅给出边数 ,并且理想地(但并非必须)以原点为中心,如何计算规则多边形(所有角度均相等的多边形)的顶点的坐标?

例如:一个六角形可能具有以下点(均为floats):

( 1.5  ,  0.5 *Math.Sqrt(3) )
( 0    ,  1   *Math.Sqrt(3) )
(-1.5  ,  0.5 *Math.Sqrt(3) )
(-1.5  , -0.5 *Math.Sqrt(3) )
( 0    , -1   *Math.Sqrt(3) )
( 1.5  , -0.5 *Math.Sqrt(3) )

我的方法如下所示:

void InitPolygonVertexCoords(RegularPolygon poly)

并且需要将坐标添加到此坐标(或类似的东西,如列表):

Point[] _polygonVertexPoints;

我主要对这里的算法感兴趣,但是C#中的示例将很有用。我什至不知道从哪里开始。 我应该如何实施? 可能吗?

谢谢。


阅读 897

收藏
2020-07-28

共1个答案

一尘不染

for (i = 0; i < n; i++) {
  printf("%f %f\n",r * Math.cos(2 * Math.PI * i / n), r * Math.sin(2 * Math.PI * i / n));
}

这里r是circumsribing圆的半径。对不起,语言错误否Habla C#。

基本上,任何两个顶点之间的角度为 2 pi / n ,所有顶点与原点的距离为 r

编辑: 如果您想使中心比原点多一点,请说 [x,y]

for (i = 0; i < n; i++) {
  printf("%f %f\n",x + r * Math.cos(2 * Math.PI * i / n), y + r * Math.sin(2 * Math.PI * i / n));
}
2020-07-28