b1_*_*b1_ 8 language-agnostic algorithm grid multidimensional-array computational-geometry
问题
我想将网格(2D阵列)划分为随机形状的部分(想想地球的构造板块).
标准是:
我的解决方案
请注意,为了避免在其内部长出"臂"或大孔的部分,我创建了两个存储阵列:一个用于与一个单元相邻的单元,当前部件ID号,另一个用于与多个单元相邻的单元,然后我在前者之前用尽了后者.
运行我的解决方案提供以下内容:
网格大小:200
宽度:20
高度:10个
部分:7
66633333111114444466
00033331111114444466
00003331111114444466
00003331111144444660
0000333111164444660
00000336111664422600
00000336615522222200
00006655555522222200
00006655555552222220
00066655555552222220
产品号:0产品
尺寸:47
部件号:1
零件尺寸:30
产品号:2产品
尺寸:26
产品号:3产品
尺寸:22
产品号:4产品
尺寸:26
产品号:5产品
尺寸:22
产品号:6产品
尺寸:27
我的解决方案有问题:
其他想法:
结论:
所以这就是问题:我是一名初学程序员,不确定我是否以正确的方式解决了这个问题.我可以创建一些更多的"补丁"方法,将碎片部分移动到一起,并允许形成部分"跳出"死胡同,如果它们卡在它们中,但它感觉凌乱.
你会如何解决这个问题?我可以用一些性感的数学来简化一些事情吗?
谢谢
几个月前,我为一款游戏做了类似的事情,尽管它是一个矩形网格而不是一个六角形网格。理论仍然是相同的,它提出了一些大小大致相等的连续区域-一些较大,一些较小,但没有一个过小或过大。YMMV。