我一直试图理解噪音很长一段时间,我想我终于找到了一个可以向我解释的地方。我已经看了很长时间的复杂算法,所以我决定对噪音的形成进行简单的英语解释。
http://flafla2.github.io/2014/08/09/perlinnoise.html
https://www.youtube.com/watch?v=MJ3bvCkHJtE
这是我使用过的两个来源。
我的问题是,噪声似乎只是我给出的两个点之间的插值(当两个点都在一个点之下时),当点数高于一时,数字很快就会增长到数万亿。
我的输入是,(。95,02)或(10.38,39.04)
我试图实现一个非常基本的版本,所以很容易理解。这是我的代码:
package perlinNoise;
public class Perlin {
int grads[][] = {{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}};
public double perlin (double x, double y) {
int unitX = (int)x & 255; // decide unit square
int unitY = (int)y & 255; // decide unit square
double relX = x-Math.floor(x); // relative x position
double relY = y-Math.floor(y); // relative y position
// bad pseudorandom gradient
int[] gradTL = grads[(unitX+unitY)%8];
int[] gradTR = grads[((unitX+1)+unitY)%8];
int[] gradBL = grads[(unitX+(unitY+1))%8];
int[] gradBR = grads[((unitX+1)+(unitY+1))%8];
// distance from edges to point, relative x and y inside the unit square
double[] vecTL = {relX,relY};
double[] vecTR = {1-relX,relY};
double[] vecBL = {relX,1-relY};
double[] vecBR = {1-relX,1-relY};
double tl = dot(gradTL,vecTL);
double tr = dot(gradTR,vecTR);
double bl = dot(gradBL,vecBL);
double br = dot(gradBR,vecBR);
double u = fade(relX);
double v = fade(relY);
double x1 = lerp(tl,tr, u);
double y1 = lerp(bl,br, u);
return lerp(x1,y1, v);
}
public double dot(int[] grad, double[] dist) {
return (grad[0]*dist[0] + grad[1]*dist[1]);
}
public double lerp(double start, double end, double rate){
return start+rate*(end-start);
}
public double fade(double t) {
return t*t*t*(t*(t*6-15)+10);
}
}
如果有经验丰富的人可以提供一些建议,我们将不胜感激。
答案 0 :(得分:0)
您获得巨大数字值的原因> 1是由于您的export class ButcherShop extends React.Component {
功能:
fade
我不完全确定你打算它与值有关> 1,但正如所写,它为值0到10提供以下内容:
public double fade(double t) {
return t*t*t*(t*(t*6-15)+10);
}