假设你有一个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
的山丘?
我们可以假设粘合盒的最低级别是“基线”或“海平面”。
function makeTrees(double frequency, int height, double variation)
{
//return 3d array.
}
我正在编写一个Minecraft MCEdit过滤器插件:P
答案 0 :(得分:2)
最简单的方法是将问题分解为三个部分:
编写例程以生成单个高度为h的山的立方体。首先让它变成一个简单的圆锥体(用顶角进行游戏,直到找到看起来令人愉悦的东西)
使用您选择的随机数生成器在h-v和h + v之间生成一组n个高度
在您的立方体上随机放置n座山脉。它们是否相交并不重要 - 事实上,它会导致更好的范围。
但是,我还建议放弃这种方法,只需在边界立方体中生成fractal terrain,然后将其离散化。您可以使用分形生成器的参数来限制高度和方差。
答案 1 :(得分:1)
假设您希望频率为f
的正弦山丘(或更确切地说,wavenumber f
,因为“频率”通常用于时间量),作为半径{{1来自中心:
定义一个这样的阈值函数:
任何带有r = sqrt(x^2+y^2)
的元素(x,y,z)
都将是陆地,剩下的就是空中。