1
小钻石方形算法
菱形正方形算法是分形地形(高度图)生成算法。您可以在此处找到不错的说明: http://www.gameprogrammer.com/fractal.html(用作参考。) http://www.playfuljs.com/realistic-terrain-in-130-lines/(很棒的JS实现,也许您可能想偷走他的渲染器。在这里看看这种算法可以实现http:// demos的功能。 playfuljs.com/terrain/。) 通常的想法是,您有4个角作为种子(a),并通过平均这四个角并添加一个随机值(例如,介于-0.5和0.5之间)来计算中心点的高度(b)。如果将其应用于网格,您将再次获得菱形网格(正方形斜面45°),并重复相同的(c,d),但随机范围会变小,例如-0.125至0.125等。 您的程序必须接受许多输入: 一个整数l=1,2,3,...,用于确定具有边长的正方形网格的大小2^l+1。在l=10你将不得不储存约一万个号码。 每个角有四个种子(浮点数) 0<h<1确定粗糙度的参数(H在链接中),该粗糙度表示随机范围最初的大小 a,b代表随机范围的初始下限和上限的参数,并h在每个细化步骤中相乘。(随机数在a和之间统一选择b。 输出必须包含完成的2d网格。 因此,粗略算法如下所示: Create a square grid with sidelength 2^l+1 Place seed values in the corners Repeat: | Perform square steps | Refine Range: a = a*h; b=b*h; | Perform diamond steps | Refine Range 您应该注意一个细节:在网格的边界处,您将只有菱形的三个顶点,因此,您也应该仅计算这三个点的平均值。 一些示例的可视化(请告诉我们您使用了哪些参数)是可选的,但值得赞赏,并且当然不会增加字节数。 可以在以下位置找到该算法的稍微变化的实现:并行投影体素地形生成器 我在javascript中创建了一个小的绘图函数,用于将2D高度图替换为灰度图像。http://jsfiddle.net/flawr/oy9kxpsx/ 如果任何人都喜欢3D并可以编写脚本以3D方式查看地图,请告诉我!=)