源码:

https://github.com/srchea/Terrain-Generation

https://github.com/IceCreamYou/THREE.Terrain

菱形正方形算法(diamond square algorithm)

随机地形生成中,我们面临的问题就是给出一个位置(x,z),如何找到它的高度y,使其成为我们想要的地形。如果仅仅是随机给出一共y的话,那么地形必然是遍布尖峰和悬崖,而本篇文章用到的算法可以很好地解决这个问题。

下面这张图很好地解释了这个算法。

算法可分为如下几步:

  1. 在一个大正方形上,随机生成左上,左下,右上,右下点的高度,如第一幅图
  2. 正方形步骤,以上述四点的平均值加上一个噪音得到正中心点的高度,第二幅图。
  3. 菱形步骤,左边中间的点以正中,左上,左下三个点如果自己不是边界的话再加上自己左边的点,取平均值加噪音算出高度,第三幅图其余三个橘点同理
  4. 这样就得到了新的四个小正方形及顶点坐标,长度减半地递归第2步

在第一份源码中,算法相关代码可在js/classes/TerrainGeneration.js中看到,效果图如下。

注意到右边信息栏了吗?是的,还能可以改变纹理与雾。此外,作者还自己写了一个js导航控制帮助移动摄像机,总之非常容易上手。

中点替换算法(midpoint displacement algorithm)

与上面菱形正方形算法非常相似。

  1. 第一步,在正方形四个顶点生成四个随机数字

2.在边界的中点根据平均值继续生成,所谓的中点替换。当然可以根据需要加上噪音,再规定一共平滑参数,去乘上噪音加到最终结果中

3.计算正中心的点

4.递归

最终效果,Demo见参考[2]

怎么样?很简单吧?

试着把第一份源码里的菱形正方形算法改成中点替换算法吧。

根据这两种算法可以生成很多好看的地形

来源:参考[3]

头图

头图效果则是第二份代码,有些复杂,但代码注释非常地详细,也可从第一个版本开始读起。

参考

[翻译]随机分形地形生成 - lookof - 博客园

中点替换算法及演示

中点替换算法

js输出一个菱形_Threejs使用菱形正方形算法,中点替换算法生成随机地形相关推荐

  1. js输出一个菱形_用js代码打印菱形

    用js代码打印菱形 Document //1.循环行数 //2.获取每一行星星的个数 //3.获取每一行空格的数量 //4.先循环每一行空格的数量,再循环每一行星星的数量 //5.每一行的空格和星星循 ...

  2. js输出一个菱形_Webpack 4入口、输出和ES6模块

    什么是Webpack? 在考虑使用任何工具之前,你需要问自己一个非常重要的问题:这个工具解决了你的什么问题.Webpack是一个模块打包器.这意味着,它的目的是(根据它们之间的依赖)合并一组模块.它的 ...

  3. js输出一个菱形_JS打印输出各种形状

    document.writeln("打印不同形状 ") //打印不同形状 document.writeln("* "); //打印一颗* document.wr ...

  4. node如何输出html页面,【自己的整理】node.js直接输出一个非常简单的HTML页面-Go语言中文社区...

    刚开始接触nodejs,先记录一下最开始用node输出一个很简单的界面 在远程服务器上先创建一个js文件 helloworld.js [root@towrabbit nodejsLearn]# vi ...

  5. java在控制台输出空心正方形,菱形,空心菱形

     使用for和if打印一个空心正方形 /*思路:要想打印一个5x5的空心正方形,首先它的第一横行和最后一行都是填满的,需要全部遍历出来,第二三四行和只有左右两条边是出来的,中间部分为空的.因此在打印第 ...

  6. 利用JS中的循环语句来实现正方形、长方形、平行四边形、三角形、菱形、空心菱形。

    利用JS来制造图形 代码 1.正方形 2.长方形 3.平行四边形 4.三角形 5.菱形 6.空心菱形 7.效果图 总结 代码 1.正方形 代码如下(示例): <script>for (va ...

  7. c语言:输出一个菱形图

    输出一个菱形图. 解:程序: #include<stdio.h> int main() { int i, j; char diamond[][5] = { {' ',' ','*'},{' ...

  8. C语言存储编码输出,C语言怎么输出一个菱形

    C语言怎么输出一个菱形 C语言是计算机的高级语言,在IT行业被众多的人们是使用,由于IT行业的热门,使用以及学习C语言的人越来越多,掌握一些C语言基本的语言是非常重要的,只有基础知识扎实了,才能在C语 ...

  9. 输出一个菱形星星图案

    输出一个菱形星星图案 代码 <?php //当满足$center>=$row时,图案能够完全显示; $row = 10; $center = 10; $rowLength = 2 * $c ...

最新文章

  1. linux远程关闭不中断
  2. android blcr 编译,BLCR 基本环境搭建【zz~】
  3. 10个遥远但近在人间的天堂!
  4. Spring MVC的DispatcherServlet – Java开发人员应该知道的10件事
  5. SQL SERVER中查询无主键的SQL
  6. GridLayout将布局管理器设置为三行一列
  7. atom对比 vscode_几款前端IDE工具:Sublime、Atom、VSCode比较
  8. 如何保持最佳 MacBook 温度?
  9. 商业软件、共享软件和自由软件
  10. 自我觉察的心理测试软件,看见自己|自我觉察的11个妙招
  11. 启蒙||那些人,那些剧||爱情+文学+英语
  12. chrome 插件 页面请求转发_使用chrome扩展程序及jsonp实现跨域访问
  13. Yielding Processes
  14. gitlab项目的备份与迁移
  15. STM32L0系列的ADC用法
  16. 恒指均线流区间突破法的构建
  17. 【C语言】scanf函数格式控制符
  18. 裁员降薪经济寒冬下的企业舆情危机攻略
  19. Webbrowser 使用IE 最高版本
  20. 关于神经网络每次预测结果不一样的问题

热门文章

  1. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (一)
  2. Assertion desc failed at src/libswscale/swscale_internal.h:668
  3. c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法
  4. 数据结构大总结系列之B树和R树
  5. 贝叶斯推断及其互联网应用(二):过滤垃圾邮件
  6. Windows/Linux高精度计时器(C++)
  7. python 多态 知乎_Python函数接口的一些设计心得
  8. 盘启动盘_[装机]推荐唯二的两个开源免费的启动盘工具,轻松创建USB启动盘
  9. β射线与哪些物质可产生较高的韧致辐射_辐射防护试题库(无评分标准)
  10. git 代码回退_「Vue 入门系列」第三期,适合新手入门的 Git 使用教程