如何生成仅含直角的随机规则多边形(类平面图)?
生成仅含直角的随机规则多边形的算法方案
以下是几种无需依赖GAN、直接生成目标图形的高效算法,同时也会补充GAN方案的优化思路:
1. 网格迭代切割法
这是最直观且易实现的方法,适合生成复杂度可控的直角多边形:
- 从基础矩形(最简单的直角多边形)出发
- 随机选择一条边,在边上选取一个非端点的切割点,绘制一条垂直于该边的切割线,将原多边形分割为两个新的直角多边形
- 重复上述操作:随机选择其中一个子多边形,继续进行直角切割,直到达到你想要的图形复杂度
- 注意:切割线必须严格垂直于所选边,且不能超出多边形边界,确保所有子图形始终保持全直角特性
2. 约束顶点生成法
直接按规则生成顶点序列,确保图形闭合且全直角:
- 先设定图形的坐标范围(如
x∈[0,W], y∈[0,H]) - 按顺时针/逆时针顺序生成顶点,相邻顶点的坐标变化需满足:要么仅x轴变化(水平边),要么仅y轴变化(垂直边),以此保证相邻边夹角为直角
- 强制要求顶点总数为偶数(直角多边形的边数必为偶数,这是几何特性)
- 最后将首尾顶点闭合,同时加入自交检测:确保所有边除端点外无交叉,若出现自交则重新生成部分顶点
3. L系统分形生成法
适合生成具有自相似结构的规则直角多边形:
- 定义初始公理(如
F,代表向前绘制一段边)和产生式规则,例如:- 公理:
F - 产生式:
F → F+F-F-F+F(其中+代表顺时针转90度,-代表逆时针转90度)
- 公理:
- 迭代执行产生式规则,将最终得到的字符串转换为绘图指令,即可生成自相似的直角多边形
- 调整产生式规则(如修改旋转方向、添加更多分支)和迭代次数,可生成多样化的规则图形
GAN方案优化思路
如果你坚持使用GAN,可结合上述算法提升生成质量:
- 先用上述算法生成数千至上万个标注好的直角多边形数据集(包含顶点坐标、图形掩码等信息)
- 训练GAN时,在损失函数中加入直角约束损失:检测生成图形的所有内角,若存在非直角的情况则增加损失值,强制模型学习全直角特性
- 同时加入自交检测损失,避免生成无效的自交图形
关键注意事项
- 所有直角多边形的边数必为偶数,生成时需遵守这一几何规则
- 若需要“规则性”(如对称结构),可在算法中加入对称约束(如切割时同时在对称位置进行操作)
内容的提问来源于stack exchange,提问作者user16971617
相关产品推荐
相关产品推荐

