随机径向岛屿算法
2017-4-12 23:26:57
收藏:0
阅读:83
评论:0
这里有一个函数(启发自https://github.com/amitp/mapgen2/blob/master/Map.as 在岛屿形状工厂函数中),它应该将一个正方形地图分成陆地和水域。 像这样:忽略不同的生物群系
但是,在下面的函数中,整个地图似乎都只是水...
-- makeRadial 根据重叠正弦波(随机径向岛屿)决定哪些点在陆地或水域上
function makeRadial(seed)-- 工厂函数以返回对内部()相同的随机变量,除非创建新的孤岛
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))设置一个水 boolean 并根据其角落的平均值将瓦片设置为水域或陆地。
无论如何,长度变量似乎总是大于 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 语言翻译过来的。顺便说一句,point.magnitude 只是点到 0,0 的距离。
提前致谢!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

