美味的曲奇
环境信息:
  Java 16
  Voronoi 库 https://github.com/connorjclark/Java-Delaunay
  核心框架 https://github.com/Minestom/Minestom
  maven
Minestom框架需要自己写出一个完整的地形生成器


参考 https://www.mcbbs.net/forum.php?mod=viewthread&tid=692683
中最后 提到的文章 http://www-cs-students.stanford. ... gon-map-generation/
选择了Java的  Voronoi 库
但是这个库的最后更新在2015年,且没有任何文档,所以有点没看懂....

希望实现的效果是 能通过坐标确定 在 VoronoiGraph对象 中所属的 Center对象
然后然后就可以获取这个 Center对象 内封装的 高度 湿度 变量,进而进行其他实现
但是首先在 VoronoiGraph 中储存的 Center 是以 ArrayList 的形式储存的
如果按着我现在能想到的就是手动遍历比对,直到找到需求的 Center对象
然后再在Center中获取
首先Center里本身没有计算是否包括某个点
现在能想到用  Center->Corner->Point 构建一个图形对象,然后再检查是否包含
但是这 逐个分析对比检查 效率未免太低了.........
有没有大佬有更加优雅的方法来实现这一效果
或者有没有开源的Minecraft Voronoi 的地形生成器能供给参考的


roj234
看了它的地形,感觉还可以
这里给个思路吧,你可以用类似三维链表的数据结构,按照Center的位置
class Entry {
   Point pos;
   Entry up, down, north, south, east, west;
}
二分查找法找到离区块最近的pos再六边遍历直到pos不在区块内部

不过:
   add/remove 可能会烦死你
而且这个算法我觉得要改的最大的地方就是
  三角形拆分不应该一次完成
  然后留下生成的区块附近到未生成区块这一部分的点集,(已生成的可以删除)
  

roj234
而且地形生成的话,如果你只想要生成,你可以直接抄mojang的代码(自用的话
再不行RTG之类的也可以

上面的算法为什么我觉得要改: 这算法是有限世界啊

美味的曲奇
roj234 发表于 2021-8-22 15:32
而且地形生成的话,如果你只想要生成,你可以直接抄mojang的代码(自用的话
再不行RTG之类的也可以

感谢大佬,回头试试这种方法
至于有限世界的问题,在minestom的概念里使用实例(Instances)代替了世界的概念
也就是说可以更好的保存类似空岛、海岛的有限且局部的世界
只要写出来在 实例边界时或其他事件时 传送到另一个实例并生成地形 就可以用便于管理且高效的方法写出无限世界
比起传统的无限世界,这样可以直观的分辨每一个岛屿为一个对象
而且比起mojang的世界生成方案更接近真实的海陆比对于趣味生存效果应该会很不错