C/C++编程笔记:游戏开发中的噪声算法详解,游戏编程常用技术(14)

在二维空间下 , 取n为2即可 。 这样变换之后 , 我们就可以按照之前方法判断该点所在的超立方体 , 在二维下即为正方形 。

原理

1.坐标偏斜:把输入点坐标进行坐标偏斜 。

x'=x+(x+y+...)?K1

y'=y+(x+y+...)?K1

其中 , K1=n+1√?1n

2.找到顶点:对偏斜后坐标下取整得到输入点所在的超立方体xi=floor(x')

yi=floor(y')...我们还可以得到小数部分xf=x'?xiyf=y'?yi...

我们把之前得到的(xfyf...)中的数值按降序排序 , 来决定输入点位于变形后的哪个单形内 。 这个单形的顶点是由按序排列的(0 0 … 0)到(1 1 … 1)中的n+1个顶点组成 , 共有n!种可能性 。

我们可以按下面的过程来得到这n+1个顶点:从零坐标(0 0 … 0)开始 , 找到当前最大的分量 , 在该分量位置加1 , 直至添加了所有分量 。 这一步的算法复杂度即为排序复杂度O(n2) 。

推荐阅读