我正在用JavaScript(http://www.isogenicengine.com/demos/1.1.0/lander/)编写一个简单的月球着陆器克隆,而不是一个只有高点和低点的基本景观,我想要一个算法来生成随机洞穴般的空间.给定与[0,1920,1200]一起使用的矩形区域,算法应该能够生成如下图所示的内容.理想情况下,洞穴区域的任何“入口”应具有设定的宽度,以便着陆器可以“进入”它.
我认为这可能是不可能的,而我可以只绘制一堆像上面那样的图像并将像素数据转换为粗糙的多边形数据,但随机生成的水平会更酷!
对于超级硬核奖励积分,能够指定有多少类似洞穴的结构将会更加令人敬畏.
算法的输出是一个点数组,每个点都是一个包含x和y属性{x:val,y:val}的对象,当你在当前点和下一个点之间顺序绘制线条时,构成多边形.
如果某人有一个类似的JavaScript实现,也会有很多帮助!
气泡图可以被认为是以气泡为顶点的图形.在您的示例中,将“天空”(包括顶边的blob)建模为顶点.洞穴是另一个顶点,入口是边缘.从这个角度来看,很容易产生你想要的洞穴般的复杂性.
接下来的技巧是将其变成几何体.从本质上讲,你想要从图形的骨架中推出并在玩家可以导航的地方留出空白.同时,你要确保这些空隙不会向外挤出太薄,否则会消除墙壁.因此,您还需要对实体区域进行建模,并使用dual graph进行建模.双重图形位于原始“下方”,即边缘交叉表示冲突,而有利于空洞而不是实体.
总结:(1)制作具有所需功能的拓扑图. (2)为图形创建几何体,为每个顶点指定位置以及为每条边指定路径. (3)构造双图,并分配其几何. (4)通过向外生长,将每个图形相关的空间充实,解决冲突,而不是阻塞.
您可能想要说服自己,最终几何体的周边列表可以通过图形的半边缘遍历生成,就像用一只手在墙上走迷宫一样.