public static void InitKdTree(double[][] points, int bucketSize = 1, ANNSplitRule splitRule = ANNSplitRule.ANN_KD_SUGGEST)
 {
     int n = points.Length;
     int dim = points[0].Length;
     double[] data = new double[n * dim];
     for (int i = 0; i < points.Length; i++)
         for (int j = 0; j < dim; j++)
             data[i * dim + j] = points[i][j];
     InitKdTree(data, n, dim, bucketSize, splitRule);
 }
        public static void InitKdTree(double[][] points, int bucketSize = 1, ANNSplitRule splitRule = ANNSplitRule.ANN_KD_SUGGEST)
        {
            int n   = points.Length;
            int dim = points[0].Length;

            double[] data = new double[n * dim];
            for (int i = 0; i < points.Length; i++)
            {
                for (int j = 0; j < dim; j++)
                {
                    data[i * dim + j] = points[i][j];
                }
            }
            InitKdTree(data, n, dim, bucketSize, splitRule);
        }
 public static void InitKdTree(double[] points, int n, int dim, int bucketSize = 1, ANNSplitRule splitRule = ANNSplitRule.ANN_KD_SUGGEST)
 {
     fixed (double* d = points)
         InitKdTree(d, n, dim, bucketSize, splitRule);
 }
 private static extern void InitKdTree(double* data, int n, int dim, int bucketSize = 1, ANNSplitRule splitRule = ANNSplitRule.ANN_KD_SUGGEST);
 public static void InitKdTree(double[] points, int n, int dim, int bucketSize = 1, ANNSplitRule splitRule = ANNSplitRule.ANN_KD_SUGGEST)
 {
     fixed(double *d = points)
     InitKdTree(d, n, dim, bucketSize, splitRule);
 }
 private static extern void InitKdTree(double *data, int n, int dim, int bucketSize = 1, ANNSplitRule splitRule = ANNSplitRule.ANN_KD_SUGGEST);