多边形的点公式
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 / 4
和 size / 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 坐标。
我正在尝试使用 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 / 4
和 size / 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 坐标。