三维随机分形地形生成(10)

时间:2025-02-21

早先还到过用迭代实现这个例程比递归好。原因是:一个递归实现可能翻采用如下形式:

执行 diamond 步;

执行 square 步;

减小随机数范围

调用自己四次。

这是个很简洁的实现,而且毫无疑问它能工作。但它要求用不充足的数据生成某些点。为什么呢?经过第一遍之后,你将再次调用以执行 square 步,但这时并没有一个棱锥四个角的全部数据。 与之相反,我用个迭代实现,伪码如下:

当 square 边长度大于 0 时{

遍历数组,对每个正方形表达执行 diamond 步

遍历数组,对每个棱锥表达执行 diamond 步

减小随机数范围

}

这样就消除了递归实现中出现的棱锥角丢失问题。但在生成数组边界的点时还是会碰到这个问题。下图中,数组中构成棱锥角的位置用亮灰色表示。它们应该被平均以找出新的基本值,即图中黑色的点。

注意用黑色标记的两个值。它们实际上是相同的值。每次你在 square 步计算一个边界上的值时,记得同时把它保存在数组对面边上。

这意味着前面插图 e 中,我们实际上不必计算 12 个单独的值,因为其中的四个在数组相对的两条边上重复。实际上只有 8 个值需要计算。

感兴趣的读都可以练习一下:取出源代码并使用它在边界的值不重复时也能工作。这对算法正常工作是没有必要的,按我写的方式去做就成。

三维随机分形地形生成(10).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219