Exemple #1
0
        protected override List <Point2D> GeneratePoint2DList(Parabola para)
        {
            List <Point2D> list = new List <Point2D>();

            int a     = para.a;
            int b     = para.b;
            int aSign = a < 0 ? -1 : 1;
            int bSign = b < 0 ? -1 : 1;
            int x     = 0;
            int y     = 0;
            int xprev = x;
            int yprev = y;

            int yInc = -aSign * bSign;
            // First half
            int p = -2 * yInc * a - b;

            while (Math.Abs(2 * a * x) < Math.Abs(b))
            {
                if (para.orientation == Orientation.Vertical)
                {
                    list.Add(new Point2D(x, y));
                }
                else
                {
                    list.Add(new Point2D(y, -x));
                }
                xprev = x;
                yprev = y;

                if ((b > 0 && p > 0) || (b < 0 && p < 0))
                {
                    p += yInc * -2 * a * (2 * x + 3) - 2 * b;
                    y += yInc;
                }
                else
                {
                    p += yInc * -2 * a * (2 * x + 3);
                }
                x += 1;
            }
            // Second half
            x = xprev;
            y = yprev;
            p = -2 * b * (y + yInc) - a * (2 * x * x + 2 * x + 1);
            while (y * yInc <= para.limit * yInc)
            {
                if (para.orientation == Orientation.Vertical)
                {
                    list.Add(new Point2D(x, y));
                }
                else
                {
                    list.Add(new Point2D(y, -x));
                }

                if ((a > 0 && p > 0) || (a < 0 && p < 0))
                {
                    p += -2 * b * yInc - 2 * a * (2 * x + 2);
                    x += 1;
                }
                else
                {
                    p += -2 * b * yInc;
                }
                y += yInc;
            }

            if (para.orientation == Orientation.Vertical)
            {
                list = GenerateOnYSymmetricPoint2D(list, para.pivot);
            }
            else
            {
                list = GenerateOnXSymmetricPoint2D(list, para.pivot);
            }

            return(list);
        }
Exemple #2
0
        protected override List <Point2D> GeneratePoint2DList(Parabola para)
        {
            List <Point2D> list = new List <Point2D>();

            int a     = para.a;
            int b     = para.b;
            int aSign = a < 0 ? -1 : 1;
            int bSign = b < 0 ? -1 : 1;
            int x     = 0;
            int y     = 0;
            int xprev = x;
            int yprev = y;

            int yInc = -aSign * bSign;

            // First half
            while (Math.Abs(2 * a * x) < Math.Abs(b))
            {
                if (para.orientation == Orientation.Vertical)
                {
                    list.Add(new Point2D(x, y));
                }
                else
                {
                    list.Add(new Point2D(y, -x));
                }
                xprev = x;
                yprev = y;

                x += 1;
                y  = (int)Math.Round(-a * x * x / (double)b);
            }
            // Second half
            x = xprev;
            y = yprev;
            while (y * yInc <= para.limit * yInc)
            {
                if (para.orientation == Orientation.Vertical)
                {
                    list.Add(new Point2D(x, y));
                }
                else
                {
                    list.Add(new Point2D(y, -x));
                }

                y += yInc;
                x  = (int)Math.Round(Math.Sqrt(-y * b * 1.0 / a));
            }

            if (para.orientation == Orientation.Vertical)
            {
                list = GenerateOnYSymmetricPoint2D(list, para.pivot);
            }
            else
            {
                list = GenerateOnXSymmetricPoint2D(list, para.pivot);
            }

            return(list);
        }
Exemple #3
0
 protected override List <Point2D> GeneratePoint2DList(Parabola para)
 {
     throw new NotImplementedException();
 }
Exemple #4
0
 protected abstract List <Point2D> GeneratePoint2DList(Parabola para);
Exemple #5
0
        protected override List <Point2D> GeneratePoint2DList(Parabola para)
        {
            List <Point2D> list = new List <Point2D>();

            int a = para.a;
            int b = para.b;

            if (b > 0)
            {
                a = -a;
                b = -b;
            }
            int aSign = a < 0 ? -1 : 1;
            int x     = 0;
            int y     = 0;
            int xprev = x;
            int yprev = y;

            int yInc = aSign;
            // First half
            int p = 2 * yInc * a + b;

            while (Math.Abs(2 * a * x) < Math.Abs(b) && Math.Abs(y) < Math.Abs(para.limit))
            {
                if (para.orientation == Orientation.Vertical)
                {
                    list.Add(new Point2D(x, y));
                }
                else
                {
                    list.Add(new Point2D(y, -x));
                }

                xprev = x;
                yprev = y;

                if (p > 0)
                {
                    p += yInc * 2 * a * (2 * x + 3) + 2 * b;
                    y += yInc;
                }
                else
                {
                    p += yInc * 2 * a * (2 * x + 3);
                }
                x += 1;
            }
            // Second half
            x = xprev;
            y = yprev;
            if (a > 0)
            {
                a = -a;
                b = -b;
            }
            p = 4 * a * x * (x + 1) + a + 4 * b * (y + yInc);
            while (y * yInc <= para.limit * yInc)
            {
                if (para.orientation == Orientation.Vertical)
                {
                    list.Add(new Point2D(x, y));
                }
                else
                {
                    list.Add(new Point2D(y, -x));
                }

                if (p > 0)
                {
                    p += 4 * a * (2 * x + 2) + 4 * b * yInc;
                    x += 1;
                }
                else
                {
                    p += 4 * b * yInc;
                }
                y += yInc;
            }

            if (para.orientation == Orientation.Vertical)
            {
                list = GenerateOnYSymmetricPoint2D(list, para.pivot);
            }
            else
            {
                list = GenerateOnXSymmetricPoint2D(list, para.pivot);
            }

            return(list);
        }