【问题标题】:Point formula for polygon多边形的点公式
【发布时间】:2016-08-24 21:21:22
【问题描述】:

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

这是我当前的代码:

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 点,使多边形完全适合圆形?

【问题讨论】:

  • size 代表什么?六边形从一边到另一边的宽度,还是从角到角?请记住,六边形由六个 60-60-60 三角形组成。三角形高度的长度是边的长度乘以sqrt(3)/2。如果size 是角对角,则表示其中一个三角形边长的两倍。从这些信息中,您应该能够弄清楚。不需要三角,因为角度“不错”。 :)

标签: math polygon


【解决方案1】:

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

【讨论】:

  • 谢谢,所以公式是 size * sin(2 * Math.PI/6)。但是为什么你到达那里 50.000000000036 而不是 50 ?那些 ...036 和 ...012 来自哪里?
  • @AnnaK。浮点计算不可避免地涉及舍入误差。当您四舍五入到整数画布坐标时,这并不重要。尽管有足够兴趣的人可以深入研究用于实现sincos 的算法并回答为什么那些特定的舍入错误的问题,但我会保留它。
猜你喜欢
  • 1970-01-01
  • 2011-12-19
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多