0

假设您有一个 3d 立方体盒子,每个立方体有 3 个索引:(x,y,z)和 1 个附加属性来指定它是代表陆地还是空气。

假设我们有一个 3d 数组来表示这个立方体盒子,每个立方体都是 3d 数组中的一个元素。

例如,下面的数组将代表一块碗状的土地:

y=0:        
0 0 0 0 0     
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1

y=1:
0 0 0 0 0
0 0 0 0 0
1 0 0 0 1
1 1 1 1 1

y=2:
0 0 0 0 0
0 0 0 0 0
1 0 0 0 1
1 1 1 1 1

y=3:
0 0 0 0 0  
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1

什么是算法,给定一个选择框,它会生成具有f频率和平均高度的山丘h,平均高度v变化?

我们可以假设bonding box的最低层是“基线”,或“海平面”。

function makeTrees(double frequency, int height, double variation)
{
    //return 3d array.
}

我正在编写一个我的世界 MCEdit过滤器插件:P

4

2 回答 2

2

最简单的方法是将问题分解为三个部分:

  1. 编写一个例程来为一个高度为 h 的小山生成立方体。从把它变成一个简单的圆锥体开始(玩顶点角,直到你找到看起来令人愉悦的东西)

  2. 使用您选择的随机数生成器在 hv 和 h+v 之间生成一组 n 个高度

  3. 在你的立方体上随机放置 n 座山。它们是否相交并不重要——事实上,它会导致一个更好看的范围。

但是,我也建议放弃这种方法,只需在边界立方体内生成分形地形,然后将其离散化。您可以使用分形生成器的参数来限制高度和方差。

于 2011-08-26T05:29:05.727 回答
1

假设您想要频率的正弦山丘f(或者更确切地说,波数 f,因为“频率”通常用于时间量)作为r = sqrt(x^2+y^2)中心半径的函数:

定义一个阈值函数,如下所示:

在此处输入图像描述

任何元素(x,y,z)都是z < z_m土地,其余的都是空气。

于 2011-08-26T07:24:19.037 回答