我在这里有一个功能(灵感来自于孤岛形状工厂功能中的https://github.com/amitp/mapgen2/blob/master/Map.as ),它应该将方形地图分成陆地和水。 像这样:忽视不同的生物群落
Buut,在我下面使用的功能中,整个事情似乎只是作为水出来......
--makeRadial decides which points are on land or water based on overlapping sine waves (random radial island)
function makeRadial(seed) --factory function to return same randoms for inside(), unless new island is created
local bumps = math.random(1, 6)
math.randomseed(seed)
local startAngle = math.random() * (2*math.pi)
local dipAngle = math.random() * (2*math.pi)
local dipWidth = math.random() * 0.5 + 0.2
local inside = function (point)
if not point then return end
local angle = math.atan2(point.y, point.x)
local length = 0.5 * (math.max(math.abs(point.x), math.abs(point.y) + point.magnitude))
local r1 = 0.5 + 0.40*math.sin(startAngle + bumps*angle + math.cos((bumps+3)*angle))
local r2 = 0.7 - 0.20*math.sin(startAngle + bumps*angle - math.sin((bumps+2)*angle))
if math.abs(angle - dipAngle) < dipWidth
or math.abs(angle - dipAngle + 2*math.pi) < dipWidth
or math.abs(angle - dipAngle - 2*math.pi) < dipWidth then
r1, r2 = 0.2, 0.2
end
print("length:"..length.." < ".." r1:"..r1.." or < ".." r2:"..r2)
return length < r1 or (length > r1*ISLAND_FACTOR and length < r2)
end
return {
inside = inside
}
end
下面的函数只是将点从-1.0重新分配到1.0并将它们插入到实际函数中
function inside(point, SIZE)
local islandshape = makeradial(*random seed*)
return islandshape.inside(2*(point.x/SIZE - 0.5), 2*(point.y/SIZE - 0.5))
end
该算法根据重叠的正弦波创建一个岛(平滑的单个大岛,侧面几乎没有小岛)。但是,长度变量存在问题。
就像一张纸条:我通过在瓷砖的每个角落设置水布尔值(corner.water = not inside(corner.point))然后根据瓷砖的平均值将瓷砖设置为水来识别水中的水分。角落。
无论如何,长度变量似乎总是大于r1和r2:
length:1.1783428788185 r1:0.76499270607242 r2:0.68719228997449
length:1.1779255270958 r1:0.76592961292669 r2:0.68729183465378
length:1.1775082945824 r1:0.7668633458924 r2:0.68739145169441
我不是三角学专家,所以我不知道长度是不是这里的问题...但我认为这可能是一个因素,因为我从C.FYI翻译了这一点。幅度就是点与0,0的距离。
提前致谢!