我最终是想在一个矩形区域生成若干满足一定约束条件的任意四边形,前面的帖子第二条过于复杂,我简化一下:
具体要求如下:
在100*100的矩形区域内生成n个满足如下条件的四边形
1.四边形出现的位置(可以按照四边形的形心或任一顶点的坐标作为四边形的位置)在矩形区域均匀随机分布;
2.四边形四个角最大角不超过150度,最小角不小于30度,每个四边形的周长为C,C服从在[5,15]区间的均值为10方差为5的正态分布,每个四边形的每条边的长度最小不小于0.3C,最大不大于0.7C。
(看到差评很多:决定改变思路,通过控制随机半径和相邻半径间夹角范围来实现,c服从正态分布为每个随机多边形的参数,每个随机多边形半径在0.3c-c之间,相邻幅角在30度-60度之间,希望这次可以成功)
3.生成的四边形互不相交互不包含;且所有四边形要在矩形区域内,不能与矩形边界相交;
4.如果可以的话,定义一个参数d,调节任意两个四边形之间的最小距离(就是构成两个四边形上的两组点集之间的最小距离);
附上先前的代码:
(disk = Reap[
region = BoundaryDiscretizeGraphics[Rectangle[{0, 0}, {20, 10}]];
Do[p = RandomPoint[region];
rad =
If[(tem = Abs[SignedRegionDistance[region, p]]) < .2, tem,
RandomReal[{.2,
Min[{tem, Min@(Subtract @@ RegionBounds@region)/40}]}]];
region =
RegionDifference[region, DiscretizeRegion@Sow[Disk[p, rad]]],
200]][[-1, -1]];)
diskP = Polygon[(random = RandomPoint[#, 4])[[
Last@FindShortestTour[random]]]] & /@ Circle @@@ disk;
Graphics[Transpose[{RandomColor[
Hue[1/3, NormalDistribution[.6, .2], NormalDistribution[.6, .07]],
diskP // Length], diskP}]]
最终应该达到这种效果,大家的批评意见很多,可是这个问题不同于圆的问题,确实不好拆分为小问题
