反距离加权法IDW C#实现

  public class PointXYZ
    {
        public  double X;
        public  double Y;
        public  double Z;
    }
    
    public class Interpolation
    {
        /// <summary>
        /// 插值算法 反距离加权法IDW 
        /// </summary>  
        /// <param name="input">离散点的XYZ</param>
        /// <param name="outpoint">插入点的XY</param> 
        /// <returns></returns>
        bool InverseDistanceWeighted(List<PointXYZ> input, PointXYZ outpoint)
        {
            try
            {                  
                double r = 0.0;                 
                double[] ri = new double[input.Count];
                foreach (PointXYZ inputpoint in input)
                {
                    r += 1.0 / Math.Sqrt(Math.Pow(inputpoint.X - outpoint.X, 2) + Math.Pow(inputpoint.Y - outpoint.Y, 2));
                }
                int i = 0;
                outpoint.Z = 0.0;
                foreach (PointXYZ inputpoint in input)
                {
                    ri[i] = 1.0 / Math.Sqrt(Math.Pow(inputpoint.X - outpoint.X, 2) + Math.Pow(inputpoint.Y - outpoint.Y, 2)) / r;
                    outpoint.Z += ri[i] * inputpoint.Z;
                }
                
                return true;
            }
            catch
            {
                return true;
            }
        }
    }

你可能感兴趣的:(C#,反距离加权法IDW,插值算法)