【问题标题】:How to implement the diamond-square algorithm?如何实现菱形平方算法?
【发布时间】:2011-11-27 23:56:06
【问题描述】:

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

它说:

这是迭代细分程序的起点, 分两步:

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

方步:取每个菱形的四个点,在菱形的中心生成一个随机值。计算中点 通过平均角值,加上生成的随机量来计算值 在与金刚石台阶相同的范围内。这给了你正方形 再次。

我不明白这一点。取每个正方形的中点如何形成钻石?取每颗钻石的中点如何形成正方形?

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

编辑:

第1步:你有一个网格,让四个角的高度一致:

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

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

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

现在呢?我在任何地方都没有看到钻石

【问题讨论】:

  • 初始迭代有些退化。如果您查看该链接中的步骤 c->d->e,应该会更清楚。
  • 只有“当你有多个正方形排列成一个网格时才会形成钻石。暂时忘记远离正方形中心点的随机扰动,你的钻石显示如下:如果你的第一个正方形 A 在左边,顶点 Atl,Atr,Abl,Abr 和中点 Ac,第二个正方形 B 在右边,顶点 Btr,Btl,Bbr,Bbl 和中心 Bc,那么你的钻石将有顶点 Ac,Atr=Btl , Bc, Bbl=Abr。小字母代表 t-top, b-bottom, l-left, r-right, c-center。

标签: algorithm language-agnostic terrain procedural-generation


【解决方案1】:

将两个正方形放在一起:“当您在网格中有多个正方形时,这会给您钻石。”正方形上方/下方相同。

平方步骤生成一组新的正方形,从第一个正方形开始偏移,顶点由菱形的中点定义。

【讨论】:

  • 哦,现在有点道理。
  • @RazorStorm 更容易在方格纸上画出整个内容。您可以玩一些有趣的小游戏。
  • 哦,这也解释了链接的含义,即递归实现没有提供有关钻石步骤的足够信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多