随机但正多边形发生器

时间:2008-12-11 15:14:33

标签: algorithm

我正在寻找一种在给定矩形或圆形扇区内生成一组随机边,但有规则的多边形的方法。为了更好地解释,我给定的2d空间应该具有随机排列的具有不同数量边的正多边形,因此,例如,如果两个六边形由长度等于其边的矩形分开,则整个空间不能仅填充更多六边形,可能需要一些三角形等。

我正在寻找一种万花筒效果的片段。

5 个答案:

答案 0 :(得分:3)

您正在寻找平铺算法。例如,请参阅Penrose TilerTilings and Tesselations页面作为开始。

答案 1 :(得分:3)

另一种方法,我可以想到: 首先确定你想要多少个物体。说'N'

在2D空间中随机选择3个点。

利用3个点来获得虚拟三角形。

现在选择另一个点,使得该点位于虚拟三角形之外。现在形成另一个虚拟三角形,将此点连接到前一个虚拟三角形的2个点,然后重新形成“N”个虚拟三角形。加入虚拟三角形,然后忽略较大的三角形并将由于交叉点而形成的三角形作为新的虚拟三角形

现在虚拟地生成一个INSCRIBED Circle到所有虚拟三角形,这些虚拟三角形将永远不能与另一个虚拟三角形相交,因为所有虚拟三角形都是通过不与上面任何三角形交叉而形成的。

通过将360度降低到相等的切片,利用虚拟圆圈形成任意数量的常规边。 现在您可以绘制随机的正多边形

答案 2 :(得分:2)

我不确定我是否理解这些要求,但您可以通过随机生成以下数字来生成随机的正多边形:

  • 半径(0到任意)
  • 中心的x和y(必须在边缘半径范围内)
  • 点数(3到什么)
  • 旋转(0到360)

为防止重叠,您可以针对每个现有多边形测试每个新多边形,如果中心之间的距离小于半径之和,则拒绝新多边形。

绘制多边形是一个简单的三角运动。

答案 3 :(得分:1)

答案 4 :(得分:0)

在平面上生成N个随机点并提取对象的凸包(即,如果所有多边形都应该是凸的)。

如果其中一个点位于另一个多边形内,则可以在生成凸包之前轻易拒绝。如果不是,您仍然需要针对其附近的其他多边形测试生成的多边形。 (如果您需要经常这样做,可能需要考虑空间数据结构)。