Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用柏林噪波绘制高度图_Java_Image_Awt_Perlin Noise - Fatal编程技术网

Java 使用柏林噪波绘制高度图

Java 使用柏林噪波绘制高度图,java,image,awt,perlin-noise,Java,Image,Awt,Perlin Noise,我试图使一个程序将输出一个PNG文件的高度地图。我想知道是否有人能帮我把图像变成黑白,使图像的颜色变化更自然 我正在尝试让程序制作一个PNG文件,比如 导入java.awt.image.buffereImage; 导入java.awt.image.DataBufferInt; 导入java.io.File; 导入java.io.IOException; 导入javax.imageio.imageio; 公共类HeightmapGen{ 专用最终静态整数宽度=900; 专用最终静态内部高度=60

我试图使一个程序将输出一个PNG文件的高度地图。我想知道是否有人能帮我把图像变成黑白,使图像的颜色变化更自然

我正在尝试让程序制作一个PNG文件,比如

导入java.awt.image.buffereImage;
导入java.awt.image.DataBufferInt;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
公共类HeightmapGen{
专用最终静态整数宽度=900;
专用最终静态内部高度=600;
专用最终静态浮点DX=.09f;
公共静态void main(字符串[]args){
缓冲图像img;
img=新的BuffereImage(宽度、高度、BuffereImage.TYPE\u INT\u RGB);
int[]像素=((DataBufferInt)img.getRaster().getDataBuffer()).getData();
对于(int i=0;i<(宽度*高度);i++)
{
像素[i]=(int)perlin.PerlinNoise(i*DX,i*DX);
System.out.println(像素[i]);
}
试一试{
write(img,“png”,新文件(“test.png”);
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
这是噪音课

public class perlin {

private static float frequency ;
private static float amplitude ;
private static double persistence = .5;
private static double Number_Of_Octaves =8;
static float seed = 2000;

public static void setFrequency(float x)
{
    frequency = x;
}

public static void setAmplitude(float x)
{
    amplitude = x;
}

public static void setPersistence(double x)
{
    persistence = x;
}

public static void setOctaves(double x)
{
    Number_Of_Octaves = x;
}

private static float Noise(int f, int g)
 {
    int n;

    n = f + g * 57;
    n = (n<<13) ^ n;
    n = (n * (n * n * 15731 + 789221) + 1376312589);
    return (float) ( 1.0 - ( n & 0x7fffffff) / 1073741824.0);    
 }

 private  static float SmoothNoise1(int x, int y)
  {
    float corners, sides, center; 
    corners = ( Noise(x-1, y-1)+Noise(x+1, y-1)+Noise(x-1, y+1)+Noise(x+1, y+1) ) / 16;
    sides   = ( Noise(x-1, y)  +Noise(x+1, y)  +Noise(x, y-1)  +Noise(x, y+1) ) /  8;
    center  =  Noise(x, y) / 4;
    return corners + sides + center;
    }

  private static float Interpolate(float a, float b, float x)
  {
      float ft, f;
      ft = x * 3.1415927f;
    f = (float) ((1 - Math.cos(ft)) * .5);
    return    (a*(1-f) + b*f);
  }

  static public float InterpolatedNoise_1(float x, float y)
  {
  int X    = (int)x;
  float fractional_X = x - X;

  int Y    = (int)y;
  float fractional_Y = y - Y;

  float v1, v2, v3, v4, i1, i2;
  v1 = SmoothNoise1(X,     Y);
  v2 = SmoothNoise1(X + 1, Y);
  v3 = SmoothNoise1(X,     Y + 1);
  v4 = SmoothNoise1(X + 1, Y + 1);

  i1 = Interpolate(v1 , v2 , fractional_X);
  i2 = Interpolate(v3 , v4 , fractional_X);

  return Interpolate(i1 , i2 , fractional_Y);
  }

  static public float PerlinNoise(float x, float y)
  {
      float total;
      double p, n;

  total = 0;
  p = persistence;
  n = Number_Of_Octaves - 1;

  for(double i =0; i <= n ; i++)
  {
      frequency = (float) Math.pow(2, i);
      amplitude = (float) Math.pow(p, i);

      total = total + InterpolatedNoise_1(x * frequency, y * frequency) * amplitude;

  }

  return seed * total;
  }
 }
公共类柏林{
专用静态浮频;
私有静态浮动幅度;
私有静态双持久性=.5;
八度音阶的专用静态双倍音阶=8;
静态浮动种子=2000;
公共静态无效设置频率(浮点x)
{
频率=x;
}
公共静态无效设置振幅(浮动x)
{
振幅=x;
}
公共静态void setPersistence(双x)
{
持久性=x;
}
公共静态八度音阶(双x)
{
_八度音阶的数量=x;
}
专用静态浮动噪声(int f,int g)
{
int n;
n=f+g*57;

n=(n1.重命名公共类Frame{(Frame是awt.Frame的Java保留字),2.请说明您的目标1)不需要在标题中添加主标记。2)源代码中只有一行空白就足够了。
{
之后或
之前的空行
通常也是多余的。3)对代码块使用一致的逻辑缩进。代码缩进的目的是帮助人们理解程序流程。4)为了更快地获得更好的帮助,请发布一个.BTW-
//TODO自动生成的方法存根
,您应该在添加代码后删除这些注释。
public class perlin {

private static float frequency ;
private static float amplitude ;
private static double persistence = .5;
private static double Number_Of_Octaves =8;
static float seed = 2000;

public static void setFrequency(float x)
{
    frequency = x;
}

public static void setAmplitude(float x)
{
    amplitude = x;
}

public static void setPersistence(double x)
{
    persistence = x;
}

public static void setOctaves(double x)
{
    Number_Of_Octaves = x;
}

private static float Noise(int f, int g)
 {
    int n;

    n = f + g * 57;
    n = (n<<13) ^ n;
    n = (n * (n * n * 15731 + 789221) + 1376312589);
    return (float) ( 1.0 - ( n & 0x7fffffff) / 1073741824.0);    
 }

 private  static float SmoothNoise1(int x, int y)
  {
    float corners, sides, center; 
    corners = ( Noise(x-1, y-1)+Noise(x+1, y-1)+Noise(x-1, y+1)+Noise(x+1, y+1) ) / 16;
    sides   = ( Noise(x-1, y)  +Noise(x+1, y)  +Noise(x, y-1)  +Noise(x, y+1) ) /  8;
    center  =  Noise(x, y) / 4;
    return corners + sides + center;
    }

  private static float Interpolate(float a, float b, float x)
  {
      float ft, f;
      ft = x * 3.1415927f;
    f = (float) ((1 - Math.cos(ft)) * .5);
    return    (a*(1-f) + b*f);
  }

  static public float InterpolatedNoise_1(float x, float y)
  {
  int X    = (int)x;
  float fractional_X = x - X;

  int Y    = (int)y;
  float fractional_Y = y - Y;

  float v1, v2, v3, v4, i1, i2;
  v1 = SmoothNoise1(X,     Y);
  v2 = SmoothNoise1(X + 1, Y);
  v3 = SmoothNoise1(X,     Y + 1);
  v4 = SmoothNoise1(X + 1, Y + 1);

  i1 = Interpolate(v1 , v2 , fractional_X);
  i2 = Interpolate(v3 , v4 , fractional_X);

  return Interpolate(i1 , i2 , fractional_Y);
  }

  static public float PerlinNoise(float x, float y)
  {
      float total;
      double p, n;

  total = 0;
  p = persistence;
  n = Number_Of_Octaves - 1;

  for(double i =0; i <= n ; i++)
  {
      frequency = (float) Math.pow(2, i);
      amplitude = (float) Math.pow(p, i);

      total = total + InterpolatedNoise_1(x * frequency, y * frequency) * amplitude;

  }

  return seed * total;
  }
 }