Algorithm 随机正多边形生成器

Algorithm 随机正多边形生成器,algorithm,Algorithm,我正在寻找一种方法,在给定的矩形或圆的扇形内生成一组随机的有边但规则的多边形。为了更好地解释,我给定的2d空间应该有一个随机排列的正多边形,具有不同数量的边,因此,例如,如果两个六边形被一个长度等于其边的矩形分隔,则整个空间不能只填充更多的六边形,可能需要一些三角形,等等 我在寻找万花筒效果的一部分 我不确定我是否理解这些要求,但您可以通过随机生成以下数字来生成随机正多边形: 半径0到任意值 中心的x和y必须在边的半径范围内 点数3到任意值 旋转0到360度 为了防止重叠,可以针对每个现有多边形

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


我在寻找万花筒效果的一部分

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

半径0到任意值 中心的x和y必须在边的半径范围内 点数3到任意值 旋转0到360度 为了防止重叠,可以针对每个现有多边形测试每个新多边形,如果中心之间的距离小于半径之和,则拒绝新多边形


绘制多边形是一个简单的三角练习。

您正在寻找平铺算法。例如,请参阅和第页以了解开始。

另一种方法,我可以想到: 首先决定需要多少对象。说‘不’

在二维空间中随机选择3个点

利用3个点得到一个虚拟三角形

现在选择另一个点,使该点位于虚拟三角形之外。现在,通过将该点连接到前一个虚拟三角形的2个点,然后依次形成N个虚拟三角形,形成另一个虚拟三角形。如果虚拟三角形交叉,则忽略较大的试验,并将由于交叉点而形成的三角形作为新的虚拟三角形

现在,为所有虚拟三角形生成一个内切圆,该内切圆将永远无法与另一个虚拟三角形相交,因为所有虚拟三角形都是在不与上述任何三角形相交的情况下形成的

利用虚拟圆将360度等分,形成任意数量的规则边。
现在,您可以绘制随机规则多边形,在平面上生成N个随机点,并提取对象的凸包(即,如果所有多边形都应为凸面)


如果其中一个点位于另一个多边形内,则可以在生成凸包之前简单地拒绝。如果不是,您仍然需要将生成的多边形与它附近的其他多边形进行测试。如果您需要经常这样做,空间数据结构可能是一个需要研究的问题。

请参阅:

我是否正确解释了这一点,因为您不希望任何重叠或空白?@Svante,是的,虽然从技术上讲,最后一块可用的空白空间将自动形成多边形。是的,但空间越满,被拒绝的多边形越多。这可能没关系-如果空间足够满,可以说20个随机多边形全部被拒绝,您可能会决定是时候停止了。不,这不会生成规则多边形。直接生成规则多边形,甚至任意凸多边形要比查找凸壳容易得多。并不是说找到凸面外壳太难,这是不必要的。最初我不想要多边形之间的空间,但我喜欢这样。背景可以是一个很好的渐变或纹理,或者其他什么。