protected internal virtual void buildGrid(int numX, int numY, int power)
 {
   int length = numX * numY;
   double[] data1 = new double[length];
   double[] data2 = new double[length];
   double[] data3 = new double[length];
   double lower1 = 1E+20;
   for (int index = 0; index < this.xValues.Length; ++index)
     lower1 = Math.min(lower1, this.xValues[index].doubleValue());
   double upper1 = -1E+20;
   for (int index = 0; index < this.xValues.Length; ++index)
     upper1 = Math.max(upper1, this.xValues[index].doubleValue());
   double lower2 = 1E+20;
   for (int index = 0; index < this.yValues.Length; ++index)
     lower2 = Math.min(lower2, this.yValues[index].doubleValue());
   double upper2 = -1E+20;
   for (int index = 0; index < this.yValues.Length; ++index)
     upper2 = Math.max(upper2, this.yValues[index].doubleValue());
   Range range1 = new Range(lower1, upper1);
   Range range2 = new Range(lower2, upper2);
   range1.getLength();
   range2.getLength();
   double num1 = range1.getLength() / (double) (numX - 1);
   double num2 = range2.getLength() / (double) (numY - 1);
   double num3 = 0.0;
   for (int index1 = 0; index1 < numX; ++index1)
   {
     if (index1 == 0)
       num3 = lower1;
     else
       num3 += num1;
     double num4 = 0.0;
     for (int index2 = 0; index2 < numY; ++index2)
     {
       int index3 = numY * index1 + index2;
       data1[index3] = num3;
       if (index2 == 0)
         num4 = lower2;
       else
         num4 += num2;
       data2[index3] = num4;
     }
   }
   for (int index1 = 0; index1 < data1.Length; ++index1)
   {
     double num4 = 0.0;
     data3[index1] = 0.0;
     for (int index2 = 0; index2 < this.xValues.Length; ++index2)
     {
       double num5 = this.distance(this.xValues[index2].doubleValue(), this.yValues[index2].doubleValue(), data1[index1], data2[index1]);
       if (power != 1)
         num5 = Math.pow(num5, (double) power);
       double num6 = Math.sqrt(num5);
       double num7 = num6 <= 0.0 ? 1E+20 : 1.0 / num6;
       if (this.zValues[index2] != null)
       {
         double[] numArray1 = data3;
         int index3 = index1;
         double[] numArray2 = numArray1;
         numArray2[index3] = numArray2[index3] + this.zValues[index2].doubleValue() * num7;
       }
       num4 += num7;
     }
     data3[index1] = data3[index1] / num4;
   }
   this.initialize(DefaultContourDataset.formObjectArray(data1), DefaultContourDataset.formObjectArray(data2), DefaultContourDataset.formObjectArray(data3));
 }