我正在尝试使用画布生成一个可变大小的多边形,但我在计算其中一些点时遇到问题,这里的红点是:
这是我目前的代码:
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 / 4
和size / 2
是错误的...是否有某种公式来计算那些棘手的4点,这样多边形完全适合圆圈?
答案 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
绘制时,您会得到:
公式给出标准笛卡尔坐标。显然,您可以舍入到整数并进行一些变量更改以获得Canvas坐标(0,0)左上角。