Math 多边形的点公式

Math 多边形的点公式,math,polygon,Math,Polygon,我试图用画布生成一个可变大小的多边形,但我在计算其中一些点时遇到了问题,这里的红色点: 这是我当前的代码: 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],

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

这是我当前的代码:

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)的画布坐标。

什么是
size
表示的?六边形从一边到另一边或从角到角的宽度?记住六边形由六个60-60-60三角形组成。三角形高度的长度是边的长度乘以sqrt(3)/2。如果
size
是角到角,则表示其中一个三角形边的长度的两倍。从这些信息中,你应该能够找到答案。不需要三角,因为角度“很好”。)谢谢,所以公式是size*sin(2*Math.PI/6)。但是为什么你得到的是50.000000000036而不是50?这些……036和……012来自哪里?@AnnaK。浮点计算不可避免地涉及舍入误差。当您将四舍五入到整数画布坐标时,这并不重要。我就不说了,尽管有足够的兴趣的人可以深入研究用于实现
sin
cos
的算法,并回答为什么会出现这些特定的舍入错误的问题。