<< Chapter < Page | Chapter >> Page > |
According to Oracle's documentation, the log10 method became part of Java with the release of J2SE 5.0. Therefore, this code is notcompatible with earlier versions of Java.
Here are a couple of restrictions taken from Oracle's documentation that apply to the use of the method named log10 :
Because of the first restriction, the code in Listing 7 converts all negative values into positive values before performing the conversion. Because of thesecond restriction, no attempt is made to compute the log of elevation values of zero.
Otherwise, the code in Listing 7 is straightforward and should not require further explanation.
After converting the elevation data to log form, (or not converting as the case may be) , the code in Listing 8 calls the method named scaleTheSurfaceData to normalize the elevation data by squeezing it into the integer range between 0and 255 inclusive. When this method returns, the lowest elevation has a value of 0 and the highest elevation has a value of 255.
Listing 8. Normalize the surface elevation data. |
---|
scaleTheSurfaceData(); |
The elevation data is normalized to this range to make it easier later to form relationships between the elevation values and allowable color values.
(Recall that allowable color values range from 0 to 255.)
At this point, we will take a side trip and examine the method named scaleTheSurfaceData , which is shown in its entirety in Listing 9 .
Listing 9. The method named scaleTheSurfaceData. |
---|
double min;
double max;//This method is used to scale the surface data
// to force it to fit in the range from 0 to// 255.
void scaleTheSurfaceData(){//Find the minimum surface value.
min = Double.MAX_VALUE;for(int row = 0;row<dataHeight;row++){
for(int col = 0;col<dataWidth;col++){
if(data[row][col]<min)
min = data[row][col];}//end col loop
}//end row loop//Shift all values up or down to force new
// minimum value to be 0.for(int row = 0;row<dataHeight;row++){
for(int col = 0;col<dataWidth;col++){
data[row][col] = data[row][col] - min;}//end col loop
}//end row loop//Now get the maximum value of the shifted// surface values
max = -Double.MAX_VALUE;for(int row = 0;row<dataHeight;row++){
for(int col = 0;col<dataWidth;col++){
if(data[row][col]>max)
max = data[row][col];}//end col loop
}//end row loop//Now scale all values to cause the new
// maximum value to be 255.for(int row = 0;row<dataHeight;row++){
for(int col = 0;col<dataWidth;col++){
data[row][col] =data[row][col]* 255/max;
}//end col loop}//end row loop
}//end scaleTheSurfaceData |
While this method is rather long, it is completely straightforward and shouldn't require further explanation.
Return now to the discussion of the constructor for the ImgMod29 class.
Notification Switch
Would you like to follow the 'Digital signal processing - dsp' conversation and receive update notifications?