Algorithm 随机径向岛算法

Algorithm 随机径向岛算法,algorithm,function,random,lua,trigonometry,Algorithm,Function,Random,Lua,Trigonometry,我这里有一个函数(灵感来源于islandshape工厂函数中的),它应该将一个正方形地图分为陆地和水域。 就像这样:忽略不同的生物群落 Buut,在我下面使用的函数中,整个东西看起来就像水一样。。。 --MakerRadial根据重叠的正弦波(随机径向岛)确定哪些点位于陆地或水面上 函数makeRadial(seed)--工厂函数为inside()返回相同的随机数,除非创建了新孤岛 局部凹凸=数学随机(1,6) 数学.随机种子(种子) 本地startAngle=math.random()*(

我这里有一个函数(灵感来源于islandshape工厂函数中的),它应该将一个正方形地图分为陆地和水域。 就像这样:忽略不同的生物群落

Buut,在我下面使用的函数中,整个东西看起来就像水一样。。。

--MakerRadial根据重叠的正弦波(随机径向岛)确定哪些点位于陆地或水面上
函数makeRadial(seed)--工厂函数为inside()返回相同的随机数,除非创建了新孤岛
局部凹凸=数学随机(1,6)
数学.随机种子(种子)
本地startAngle=math.random()*(2*math.pi)
局部倾角=math.random()*(2*math.pi)
局部dipWidth=math.random()*0.5+0.2
本地内部=功能(点)
如果不是点,则返回结束
局部角度=数学atan2(点y、点x)
局部长度=0.5*(数学最大值(数学绝对值(点x)、数学绝对值(点y)+点幅值))
局部r1=0.5+0.40*数学sin(星形纠缠+凹凸*角度+数学cos((凹凸+3)*角度))
局部r2=0.7-0.20*数学sin(星形纠缠+凹凸*角度-数学sin((凹凸+2)*角度))
如果math.abs(角度-倾角)<倾角宽度
或math.abs(角度-倾角+2*math.pi)r1*孤岛系数和长度
下面的函数只是将点从-1.0重新分配到1.0,并将它们插入到实际函数中

内部函数(点、大小)
本地islandshape=makeradial(*随机种子*)
返回岛形状。内部(2*(点x/尺寸-0.5),2*(点y/尺寸-0.5))
结束
该算法基于重叠正弦波创建孤岛(平滑的单个大岛,侧边几乎没有小孤岛)。但是,长度变量存在一个问题

请注意:我通过为瓷砖的每个角设置一个“水”布尔值(corner.water=not inside(corner.point)),然后根据每个角的平均值将瓷砖设置为“水”,从而区分水和陆地

无论如何,长度变量似乎总是大于r1和r2:

长度:1.1783428788185 r1:0.76499270607242 r2:0.68719228997449
长度:1.1779255270958 r1:0.76592961292669 r2:0.68729183465378
长度:1.1775082945824 r1:0.7668633458924 r2:0.68739145169441
我不是三角学专家,所以我不知道长度是否是这里的问题。。。但我认为这可能是一个因素,因为我把它从C.FYI翻译过来,point.magnity就是点到0,0的距离


提前谢谢

人工弗兰肯斯坦的长度是什么意思?它的最大值约为1.2
(1+Sqrt(2))/2
请参阅我的相关答案:关于如何做到这一点的一些想法。。。