如何实现菱形算法?

时间:2011-11-27 23:56:07

标签: algorithm language-agnostic terrain procedural-generation

我正在读这个:http://www.gameprogrammer.com/fractal.html#diamond

它说:

  

这是迭代细分例程的起点,   这有两个步骤:

     

钻石步骤:取四个方格的正方形,在两个对角线相交的方形中点处生成一个随机值。该   通过平均四个角值来计算中点值   随机数量。当你有多个钻石时,这会给你钻石   正方形排列成网格。

     

方形步骤:取每个钻石的四个点,在钻石的中心生成一个随机值。计算中点   通过对角点值求平均值,再加上生成的随机量   在与用于金刚石步骤的范围相同的范围内。这给你正方形   试。

我不明白这一点。如何将每个方格的中点制作成钻石?如何将每颗钻石的中点变成正方形?

有人可以提供与语言无关的代码吗?

编辑:

步骤1:你有一个网格,并使四个角落均匀高度:

* ┬ ┬ ┬ *
├ ┼ ┼ ┼ ┤
├ ┼ ┼ ┼ ┤
├ ┼ ┼ ┼ ┤
* ┴ ┴ ┴ *

第2步:你取正方形的中点并将其设置为所有4个角的平均值加上一个随机值:

* ┬ ┬ ┬ *
├ ┼ ┼ ┼ ┤
├ ┼ * ┼ ┤
├ ┼ ┼ ┼ ┤
* ┴ ┴ ┴ *

现在怎样?我在任何地方都看不到钻石

1 个答案:

答案 0 :(得分:2)

将两个正方形放在一起:“当你在网格中有多个正方形时,这会给你钻石。”广场上方/下方也是如此。

平方步骤产生一组新的正方形,偏离第一个正方形,顶点由钻石的中点定义。