Esempio n. 1
0
        private void ChaoticPointGeneration(MyArea area, List <MyNode> result, int count, double h = -1)
        {
            MyRectangle rect      = MyRectangle.GetAreaRectangle(area);
            int         maxNodes  = count;
            Random      generator = new Random((int)DateTime.Now.Ticks);

            for (int i = 0; result.Count < maxNodes; i++)
            {
                int triesCount = (int)nudTriesCount.Value;
                do
                {
                    double x = rect.minX + generator.NextDouble() * rect.Width;
                    double y = rect.minY + generator.NextDouble() * rect.Height;
                    MyNode p = new MyNode(x, y);
                    if (PointFits(area, result, p, h))
                    {
                        p.Id = ++nodesCount;
                        result.Add(p);
                        break;
                    }
                } while (--triesCount > 0);
                if (triesCount == 0)
                {
                    break;
                }
            }
        }
Esempio n. 2
0
        private void RegularPointGeneration(MyArea area, List <MyNode> result)
        {
            MyRectangle rect = MyRectangle.GetAreaRectangle(area);

            double h = (double)nudMinDistance.Value;

            for (double x = rect.minX; x.LessOrEqual(rect.maxX); x += h)
            {
                for (double y = rect.minY; y.LessOrEqual(rect.maxY); y += h)
                {
                    MyNode p = new MyNode(x, y);
                    if (PointFits(area, result, p))
                    {
                        p.Id = ++nodesCount;
                        result.Add(p);
                    }
                }
            }
        }
Esempio n. 3
0
        private void EqualAngleGeneration(MyArea area, List <MyNode> result)
        {
            MyRectangle rect = MyRectangle.GetAreaRectangle(area);
            double      h    = (double)nudMinDistance.Value;
            bool        odd  = false;
            double      hy   = h * Math.Pow(3.0, 0.5) / 2.0;

            for (double y = rect.minY; y.LessOrEqual(rect.maxY); y += hy)
            {
                for (double x = rect.minX; x.LessOrEqual(rect.maxX); x += h)
                {
                    MyNode p = new MyNode(odd ? x + h / 2 : x, y);
                    if (PointFits(area, result, p))
                    {
                        p.Id = ++nodesCount;
                        result.Add(p);
                    }
                }
                odd = !odd;
            }
        }