Ejemplo n.º 1
0
        public List<KeyValuePair<double[], double>> GetMeshPointsCvt(int rows, int columns, double[] max, double[] min, List<double[]> edgepnts)
        {
            List<KeyValuePair<double[], double>> vals = new List<KeyValuePair<double[], double>>();
               double deltax = max[0] - min[0];
               double deltay = max[1] - min[1];

               if (m_threaded)
               {
                    try
                    {
                         meshArray.Clear();
                         int start, end, i;
                         for (i = 0; i < meshThreadcount; i++)
                         {
                              meshDoneEvents[i] = new ManualResetEvent(false);
                              start = (rows * i) / meshThreadcount;
                              end = ((i + 1) * rows) / meshThreadcount;
                              MeshThread mt = new MeshThread(this, rows, start, end, columns, deltax, deltay, min, meshDoneEvents[i], edgepnts, true);
                              meshArray.Add(mt);
                              ThreadPool.QueueUserWorkItem(mt.ThreadPoolCallback, i);
                         }

                         // Wait for all threads in pool to finish.
                         foreach (var e in meshDoneEvents) e.WaitOne();
                         meshArray.ForEach(delegate(MeshThread m) { vals.AddRange(m.CvtResult); });
                    }
                    catch (Exception e)
                    {
                         string message = e.Message;
                    }
               }
               else
               {
                    int i, j;
                    double x, y, k = 0;
                    double[] d = new double[3];
                    double[] dd = new double[3];
                    for (i = 0; i < rows; i++)
                    {
                         x = (double)i / (double)(rows - 1) * deltax + min[0];
                         for (j = 0; j < columns; j++)
                         {
                              y = (double)j / (double)(columns - 1) * deltay + min[1];
                              double[] p = new double[3] { x, y, 0 };
                              Gaussian(ref p, ref d, ref dd, ref k);
                              vals.Add(new KeyValuePair<double[], double>(p, k));
                         }
                    }
               }

               return vals;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// evenly spaced
        /// </summary>
        /// <param name="rows"></param>
        /// <param name="columns"></param>
        /// <param name="max"></param>
        /// <param name="min"></param>
        /// <returns></returns>
        //public List<double[]> GetMeshPointsInX(int rows, int columns, double[] max, double[] min)
        //{
        //     List<double[]> vals = new List<double[]>();
        //     double deltax = max[0] - min[0];
        //     double deltay = max[1] - min[1];
        //     int i, j;
        //     double x, y;
        //     for (i = 0; i < rows; i++)
        //     {
        //          y = (double)i / (double)(rows - 1) * deltay + min[1];
        //          for (j = 0; j < columns; j++)
        //          {
        //               x = (double)j / (double)(columns - 1) * deltax + min[0];
        //               double[] p = new double[3] { x, y, 0 };
        //               Value(ref p);
        //               vals.Add(p);
        //          }
        //     }
        //     return vals;
        //}
        /// <summary>
        /// unevenly spaced
        /// </summary>
        /// <param name="rows"></param>
        /// <param name="columns"></param>
        /// <param name="max"></param>
        /// <param name="min"></param>
        /// <returns></returns>
        public List<double[]> GetMeshPointsInXUneven(int rows, int columns, double[] max, double[] min)
        {
            List<double[]> vals = new List<double[]>();

               double deltax = max[0] - min[0];
               double deltay = max[1] - min[1];

               int i, j;
               double y, sx;

               List<double[]> points = new List<double[]>();

               points.Add(new double[] { 0, 0 });
               points.Add(new double[] { 1.0, 0.5 });
               points.Add(new double[] { 8.0, 5.0 });
               points.Add(new double[] { 10.0, 10.0 });

               RBFCurve rbf = new RBFCurve(null, "shaper", points, new RBFBasis.ThinPlateSpline(null), new RBFPolynomials.Linear(null), 0.0);

               shaper Shape = ((double value) =>
               {
                    double[] pnt = new double[] { 10.0*value, 0 };
                    rbf.Value(ref pnt);
                    return pnt[1]/10.0;
               });

               if (m_threaded)
               {
                    try
                    {
                         int start, end;
                         meshArray.Clear();
                         for (i = 0; i < meshThreadcount; i++)
                         {
                              meshDoneEvents[i] = new ManualResetEvent(false);
                              start = (rows * i) / meshThreadcount;
                              end = ((i + 1) * rows) / meshThreadcount;
                              MeshThread mt = new MeshThread(this, rows, start, end, columns, deltax, deltay, min, null, meshDoneEvents[i], Shape, null);
                              meshArray.Add(mt);
                              ThreadPool.QueueUserWorkItem(mt.ThreadPoolCallback, i);
                         }

                         // Wait for all threads in pool to calculate.
                         foreach (var e in meshDoneEvents) e.WaitOne();
                         meshArray.ForEach(delegate(MeshThread m) { vals.AddRange(m.Result); });
                    }
                    catch (Exception e)
                    {
                         string message = e.Message;
                    }
               }
               else
               {
                    for (i = 0; i < rows; i++)
                    {
                         y = (double)i / (double)(rows - 1) * deltay + min[1];
                         for (j = 0; j < columns; j++)
                         {
                              //x = (double)j / (double)(columns - 1) * deltax + min[0];
                              sx = Shape((double)j / (double)(columns - 1)) * deltax + min[0];
                              double[] p = new double[3] { sx, y, 0 };
                              Value(ref p);
                              vals.Add(p);
                         }
                    }
               }
               return vals;
        }
Ejemplo n.º 3
0
        public List<double[]> GetMeshPoints(int rows, int columns, double[] max, double[] min)
        {
            List<double[]> vals = new List<double[]>();
               double deltax = max[0] - min[0];
               double deltay = max[1] - min[1];

               if (m_threaded)
               {
                    try
                    {
                         int start, end, i;
                         meshArray.Clear();
                         for (i = 0; i < meshThreadcount; i++)
                         {
                              meshDoneEvents[i] = new ManualResetEvent(false);
                              start = (rows * i) / meshThreadcount;
                              end = ((i + 1) * rows) / meshThreadcount;
                              MeshThread mt = new MeshThread(this, rows, start, end, columns, deltax, deltay, min, null, meshDoneEvents[i]);
                              meshArray.Add(mt);
                              ThreadPool.QueueUserWorkItem(mt.ThreadPoolCallback, i);
                         }

                         // Wait for all threads in pool to calculate.
                         foreach (var e in meshDoneEvents) e.WaitOne();
                         meshArray.ForEach(delegate(MeshThread m) { vals.AddRange(m.Result); });
                    }
                    catch (Exception e)
                    {
                         string message = e.Message;
                    }
               }
               else
               {
                    int i, j;
                    double x, y;

                    for (i = 0; i < rows; i++)
                    {
                         x = (double)i / (double)(rows - 1) * deltax + min[0];
                         for (j = 0; j < columns; j++)
                         {
                              y = (double)j / (double)(columns - 1) * deltay + min[1];
                              double[] p = new double[3] { x, y, 0 };
                              Value(ref p);
                              vals.Add(p);
                         }
                    }
               }
               return vals;
        }