上周我开发了一个世界发电机(用于Minecraft mod).然而,我并不只是寻找Perlin噪音,而是基于细胞噪音.我想生成一种地下实验室,有几个不同大小的房间.
为了解释这个问题,我使用2D示例.
噪声生成器采用网格单元格位置(int x, int y
),并返回具有此结构的对象:
boolean top;
boolean right;
boolean down;
boolean left;
int roomType;
Run Code Online (Sandbox Code Playgroud)
4个布尔代表启用或禁用的墙:
它分别roomType
代表房间的类型.
最终结果应该是这样的:
这里,背景棋盘图案代表基础网格,黑色线条代表墙壁.这只是一个可以生成的简单示例,但在实际情况中,网格在x和y方向都是无限的.
我现在遇到的问题是噪声生成器只接受x和y坐标,它应该是它应该生成的网格单元的坐标.有一个种子可以为哈希函数生成更多随机种子:
long seed = 0x75fd239de48;
Random r = new Random(seed);
int seed1 = r.nextInt();
int seed2 = r.nextInt();
// etc.
Run Code Online (Sandbox Code Playgroud)
我可以使用哈希函数:,根据种子Hash.hash2D(int seed, int x, int y)
返回double
一个坐标随机.
这将提供为周围细胞生成信息的能力.
要轻松生成更大的房间,您可以设置房间的最大尺寸,并检查试图大于1x1的房间的区域.如果他们在那里,并将跨越到当前房间,房间将是另一个房间的延伸.但是,检查房间是否会延伸需要检查是否尚未延伸(否则,不需要的房间扩展看起来像是延伸到另一个房间的房间基础),这会进入无限循环.
在我的例子中,有一个给定的房间类型表,它们的大小和重量.例:
name: size [weight]
room-1: 1x1 [128]
room-2: 1x1 [128]
room-3: 2x1 [16]
room-4: 1x2 [16]
room-5: 2x2 [8]
room-6: 3x1 …
Run Code Online (Sandbox Code Playgroud) 我在设计图标时遇到了数学问题,我正在寻找一个JavaScript解决方案.
我拿了2个圆圈,每个圆圈的半径和位置都不同,还有一个点.我想知道包含两个圆圈的最小圆圈并沿着这一点.
红色圆圈是我想知道的圆圈
想要一个像这样的功能:
function calculate(c1x, c1y, c1r, c2x, c2y, c2r, px, py){
//Calculation
return {
x: outX,
y: outY,
r: outR
};
}
Run Code Online (Sandbox Code Playgroud)