我一直在使用 Perlin 噪声和径向渐变的组合来生成岛屿 - 正如这个很棒的 Reddit 答案中所概述的那样。它工作得很好,但显然这些岛屿都是圆形的,我想要更多种类。
我想知道是否有一种将几何形状方程转换为梯度方程的通用方法。例如。一个方程,它的形状就像欧几里得距离对于一个圆。这可能吗?很明显吗?
我一直在使用 Perlin 噪声和径向渐变的组合来生成岛屿 - 正如这个很棒的 Reddit 答案中所概述的那样。它工作得很好,但显然这些岛屿都是圆形的,我想要更多种类。
我想知道是否有一种将几何形状方程转换为梯度方程的通用方法。例如。一个方程,它的形状就像欧几里得距离对于一个圆。这可能吗?很明显吗?
为几何形状或水平集( wiki ) 定义隐式曲面基本上就是您所要求的。例如,半径为 R 的圆的隐式曲面为
f(x,y) = x^2 + y^2 - R^2
请注意,当 f(x,y) = 0 时,它定义了圆的表面。当 f(x,y) < 0 时,则 x^2 + y^2 < R^2,即点 (x,y) 在以原点为中心的圆内。最后 f(x,y) > 0 表示点 (x,y) 在圆外。为了从中创建图像,您需要遍历每个像素并评估 f(x,y),同时找到最小值和最大值,然后将整个图像缩放到 0 到 1 之间的范围。
这在技术上不会给你距离。圆是一种特殊情况,因为它的方程 (x^2 + y^2)是距原点的平方距离函数。这确实为您提供了您最有可能寻找问题的效果 - 内部为负,内部为正(反之亦然),而幅度则根据给定点到表面的距离进行缩放。
对于您为几何形状提出的任何方程,您需要在一侧获取所有项以形成 f(x,y)。例如,取 x*y = log(x)。这可以变成 x*y - log(x) = 0,所以 f(x,y) = x*y - log(x)。