2D几何形状的渐变

时间:2013-08-24 19:41:09

标签: math graphics geometry

我一直在使用Perlin噪声和径向渐变的组合生成岛屿 - 如this awesome Reddit answer中所述。它运作得很好,但很明显这些岛屿都是圆形的,我想要更多种类。

我想知道是否存在将几何形状的方程转换为梯度方程的一般方法。例如。一个方程,它的形状是欧几里德距离对于一个圆。这可能吗?这是显而易见的吗?

1 个答案:

答案 0 :(得分:0)

为几何形状定义隐式曲面,或Level Setwiki),基本上是您要求的。例如,半径为R的圆的隐式曲面是

f(x,y)= x ^ 2 + y ^ 2 - R ^ 2

注意,当f(x,y)= 0时,它定义圆的表面。当f(x,y)< 0,然后x ^ 2 + y ^ 2 <0。 R ^ 2,表示点(x,y)位于以原点为中心的圆内。最后f(x,y)> 0表示点(x,y)在圆外。为了创建一个图像,您需要迭代每个像素并评估f(x,y),同时找到最小值和最大值,然后将整个图像缩放到0到1之间的范围。 / p>

这在技术上不会给你距离。圆是一种特殊情况,因为它的方程(x ^ 2 + y ^ 2)距离原点的平方距离函数。这确实可以为您提供最有可能找到问题的效果 - 内部为负,内部为正(反之亦然),而幅度为w.r.t.到达给定点到表面的距离。

对于你想出几何形状的任何等式,你需要在一侧获得所有项以形成f(x,y)。例如,取x * y = log(x)。那可以变成x * y - log(x)= 0,所以f(x,y)= x * y - log(x)。