微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建随机2D凹面多边形景观JavaScript

我正在用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)通过向外生长,将每个图形相关的空间充实,解决冲突,而不是阻塞.

您可能想要说服自己,最终几何体的周边列表可以通过图形的半边缘遍历生成,就像用一只手在墙上走迷宫一样.

原文地址:https://www.jb51.cc/js/429661.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐