多边形

时间:2016-04-29 16:08:46

标签: math polygon

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

enter image description here

这是我目前的代码:

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

我明白了:

enter image description here

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

1 个答案:

答案 0 :(得分:2)

最简单的方法是将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

绘制时,您会得到:

enter image description here

公式给出标准笛卡尔坐标。显然,您可以舍入到整数并进行一些变量更改以获得Canvas坐标(0,0)左上角。