aboutsummaryrefslogtreecommitdiffstats
path: root/src/libnoiseforjava/util/NoiseMap.java
blob: b0636f2bea4b521d50303516f00b163d06234ad3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
 * Copyright (C) 2003, 2004 Jason Bevins (original libnoise code)
 * Copyright  2010 Thomas J. Hodge (java port of libnoise)
 * 
 * This file is part of libnoiseforjava.
 * 
 * libnoiseforjava is a Java port of the C++ library libnoise, which may be found at 
 * http://libnoise.sourceforge.net/.  libnoise was developed by Jason Bevins, who may be 
 * contacted at jlbezigvins@gmzigail.com (for great email, take off every 'zig').
 * Porting to Java was done by Thomas Hodge, who may be contacted at
 * libnoisezagforjava@gzagmail.com (remove every 'zag').
 * 
 * libnoiseforjava is free software: you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 * 
 * libnoiseforjava is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * libnoiseforjava.  If not, see <http://www.gnu.org/licenses/>.
 * 
 */

package libnoiseforjava.util;

import libnoiseforjava.exception.ExceptionInvalidParam;

public class NoiseMap
{
   /// Implements a noise map, a 2-dimensional array of floating-point
   /// values.
   ///
   /// A noise map is designed to store coherent-noise values generated by a
   /// noise module, although it can store values from any source.  A noise
   /// map is often used as a terrain height map or a grayscale texture.
   ///
   /// The size (width and height) of the noise map can be specified during
   /// object construction.
   ///
   /// The getValue() method can be used to access individual
   /// values stored in the noise map.
   ///


   /// The height of the noise map.
   int height;

   /// The width of the noise map.
   int width;

   /// The array of doubles holding the noise map values
   double[][] noiseMap;

   double borderValue;

   public NoiseMap (int width, int height) throws ExceptionInvalidParam
   {
      setSize (width, height);
      noiseMap = new double [width][height];
      borderValue = 0.0;
   }

   /// Returns a value from the specified position in the noise map.
   ///
   /// @param x The x coordinate of the position.
   /// @param y The y coordinate of the position.
   ///
   /// @returns The value at that position.
   ///
   /// This method returns the border value if the coordinates exist
   /// outside of the noise map.
   public double getValue (int x, int y)
   {
      if (x >= 0 && x < width && y >= 0 && y < height)  
         return noiseMap[x] [y];
      // The coordinates specified are outside the noise map.  Return the border
      // value.
      else
         return borderValue;
   }

   public void setSize (int width, int height) throws ExceptionInvalidParam
   {
      if (width < 1 || height < 1)
         // Invalid width or height.
         throw new ExceptionInvalidParam ("Invalid parameter in NoiseMap");
      else
      {
         this.width  = width;
         this.height = height;
      }
   }

   /// Sets a value at a specified position in the noise map.
   ///
   /// @param x The x coordinate of the position.
   /// @param y The y coordinate of the position.
   /// @param value The value to set at the given position.
   ///
   /// This method does nothing if the noise map object is empty or the
   /// position is outside the bounds of the noise map.
   public void setValue (int x, int y, double value)
   {
      if (x >= 0 && x < width && y >= 0 && y < height)
         this.noiseMap[x][y]= value;
   }

   /// Returns the value used for all positions outside of the noise map.
   ///
   /// @returns The value used for all positions outside of the noise
   /// map.
   ///
   /// All positions outside of the noise map are assumed to have a
   /// common value known as the <i>border value</i>.
   public double getBorderValue ()
   {
      return borderValue;
   }

   /// Returns the height of the noise map.
   ///
   /// @returns The height of the noise map.
   public int getHeight ()
   {
      return height;
   }

   /// Returns the width of the noise map.
   ///
   /// @returns The width of the noise map.
   public int getWidth ()
   {
      return width;
   }

   /// Sets the value to use for all positions outside of the noise map.
   ///
   /// @param borderValue The value to use for all positions outside of
   /// the noise map.
   ///
   /// All positions outside of the noise map are assumed to have a
   /// common value known as the <i>border value</i>.
   public void setBorderValue (double borderValue)
   {
      this.borderValue = borderValue;
   }

    public double[][] getNoiseMap() {
        return noiseMap;
    }

    public void setNoiseMap(double[][] noiseMap) {
        this.noiseMap = noiseMap;
    }

}