多边形的点公式

Point formula for polygon

我正在尝试使用 canvas 生成可变大小的多边形,但我在计算其中的一些点时遇到了问题,这里是红色的:

这是我当前的代码:

var x = 0;
var y = 0;
var size = 200;

var points = [[x + (size / 2), y],
          [x + size, y + (size / 4)],
          [x + size, y + size - (size / 4)],
          [x + (size / 2), y + size],
          [x, y + size - (size / 4)],
          [x, y + (size / 4)]];

我明白了:

所以 size / 4size / 2 是错误的...是否有某种公式可以计算那些棘手的 4 个点,使多边形完全适合圆形?

最简单的就是把2*Pi分成n个偶数块,用三角函数求坐标。您应该能够将以下 Python 脚本翻译成您选择的语言:

from math import sin, cos, pi

def regularPoly(n,a,b,r):
    points = [(a,b+r)]
    theta = pi/2
    dTheta = 2*pi/n

    for i in range(1,n):
        theta += dTheta
        points.append((a + r*cos(theta), b + r*sin(theta)))

    return points

例如,

>>> hexagon = regularPoly(6,0,0,100)
>>> for x,y in hexagon: print(x,y)

0 100
-86.60254037844385 50.000000000000036
-86.6025403784439 -49.999999999999936
-1.0718754395722282e-13 -100.0
86.60254037844379 -50.00000000000012
86.60254037844395 49.99999999999985

绘制时,您得到:

这些公式给出了标准笛卡尔坐标。显然,您可以四舍五入为整数并对变量进行一些更改以获取左上角为 (0,0) 的 Canvas 坐标。