Пример #1
0
        public static CPoint New(PointF pt, CProjection projection)
        {
            double c0 = 0;

            switch (projection)
            {
            case CProjection.C1C2:
                double c1 = pt.X;
                double c2 = pt.Y;
                var    q  = c1 * c1 + c2 * c2;
                var    s  = 1 - q;
                if (s > 0)
                {
                    c0 = Math.Sqrt(s);
                    return(new CPoint(c0, c1, c2)
                    {
                        IsNormal = true
                    });
                }
                return(new CPoint(c0, c1, c2));

            case CProjection.C0C1:
                break;

            case CProjection.C0C2:
                break;

            default:
                throw new ArgumentOutOfRangeException("projection", projection, null);
            }
            throw new NotSupportedException();
        }
Пример #2
0
        public static Color GetColorReversed(CPoint pt, CProjection projection)
        {
            var rp = pt.RG(projection);
            int cnt;
            var end = pt.ReverseTrackEndPoint(Config.ReserverInterestedPoint, projection, out cnt);

            if (cnt >= Config.Count)
            {
                return(Config.Black);
            }
            var   last = end;
            var   p    = Config.ReserverInterestedPoint;
            Color clr;

            if (last.C0 > 0)
            {
                clr = rp.G < 0
                            ? (last.C1 < p.C1 ? Config.Yellow : Config.Green)
                            : (last.C1 < p.C1 ? Config.Red : Config.Blue);
            }
            else
            {
                clr = rp.G < 0
                            ? (last.C1 > p.C1 ? Config.Yellow : Config.Green)
                            : (last.C1 > p.C1 ? Config.Red : Config.Blue);
            }
            var resClr = clr;

            return(resClr);
        }
Пример #3
0
        public void Project(CProjection projection)
        {
            var oppositize = (projection.HasFlag(CProjection.C0C1) && C2 < 0) || (projection.HasFlag(CProjection.C0C2) && C1 < 0) || (projection.HasFlag(CProjection.C1C2) && C0 < 0);

            if (oppositize)
            {
                ToOpposite();
            }
        }
Пример #4
0
        public CPoint C(CProjection projection)
        {
            switch (projection)
            {
            case CProjection.C1C2:
                return(new CPoint(1, -R, R * R - G));

            case CProjection.C0C2:
                return(new CPoint(R * R - G, -R, 1));
            }
            throw new NotSupportedException();
        }
Пример #5
0
        public RGPoint RG(CProjection projection)
        {
            switch (projection)
            {
            case CProjection.C1C2:
                return(RGProjC1C2());

            case CProjection.C0C1:
                return(RGProjC0C1());

            case CProjection.C0C2:
                return(RGProjC0C2());
            }
            throw new NotSupportedException();
        }
Пример #6
0
        public CPoint ReverseIterated(CProjection projection)
        {
            var c0C2MinusC1           = C0 * C2 - C1 * C1;
            var c0MinusLambdaMinus1C1 = C0 - RgSettings.LambdaMinus1 * C1;
            var c1MinusLambdaMinus1C2 = C1 - RgSettings.LambdaMinus1 * C2;

            var c0 = c0MinusLambdaMinus1C1 * c0MinusLambdaMinus1C1 + RgSettings.NLambdaMinus2 * c0C2MinusC1;
            var c1 = RgSettings.LambdaMinus1 * c0MinusLambdaMinus1C1 * c1MinusLambdaMinus1C2 + RgSettings.NLambdaMinus2 * c0C2MinusC1;
            var c2 = RgSettings.LambdaMinus2 * c1MinusLambdaMinus1C2 * c1MinusLambdaMinus1C2 + RgSettings.NLambdaMinus2 * c0C2MinusC1;

            var res = new CPoint(c0, c1, c2);

            res.Project(projection);
            return(res);
        }
        public CPoint DirectIterated(CPoint source, CProjection projection, RGProcessor processor)
        {
            var c1MinusC0     = source.C1 - source.C0;
            var c2MunusC1     = source.C2 - source.C1;
            var c0C2MinusC1Sq = source.C0 * source.C2 - source.C1 * source.C1;
            var n1            = processor.OneDivN;

            var c0 = c1MinusC0 * c1MinusC0 + n1 * c0C2MinusC1Sq;
            var c1 = processor.Lambda * (c1MinusC0 * c2MunusC1 + n1 * c0C2MinusC1Sq);
            var c2 = processor.Lambda2 * (c2MunusC1 * c2MunusC1 + n1 * c0C2MinusC1Sq);

            var res = new CPoint(c0, c1, c2);

            res.Project(projection);
            return(res);
        }
Пример #8
0
 public static Image GetBg(int width, int height, CProjection proj)
 {
     if (proj.HasFlag(CProjection.C0C1))
     {
         return(GetBgC0C1(width, height));
     }
     if (proj.HasFlag(CProjection.C1C2))
     {
         return(GetBgC1C2(width, height));
     }
     if (proj.HasFlag(CProjection.C0C2))
     {
         return(GetBgC0C2(width, height));
     }
     throw new NotSupportedException();
 }
Пример #9
0
 public RGPoint RG(CProjection projection)
 {
     if (projection.HasFlag(CProjection.C0C1))
     {
         return(RGProjC0C1());
     }
     if (projection.HasFlag(CProjection.C0C2))
     {
         return(RGProjC0C2());
     }
     if (projection.HasFlag(CProjection.C1C2))
     {
         return(RGProjC1C2());
     }
     throw new NotSupportedException();
 }
        private CPoint ReverseIterated(CPoint source, CProjection projection, RGProcessor processor)
        {
            var c0MinusLambdaMinus1C1      = source.C0 - processor.LambdaMinus1 * source.C1;
            var c1MinusLambdaMinus1C2      = source.C1 - processor.LambdaMinus1 * source.C2;
            var c0C2MinusC1Sq              = source.C0 * source.C2 - source.C1 * source.C1;
            var nLambdaMinus2C0C2MinusC1Sq = processor.NLambdaMinus2 * c0C2MinusC1Sq;

            var c0 = c0MinusLambdaMinus1C1 * c0MinusLambdaMinus1C1 + nLambdaMinus2C0C2MinusC1Sq;
            var c1 = processor.LambdaMinus1 * c0MinusLambdaMinus1C1 * c1MinusLambdaMinus1C2 + nLambdaMinus2C0C2MinusC1Sq;
            var c2 = processor.LambdaMinus2 * c1MinusLambdaMinus1C2 * c1MinusLambdaMinus1C2 + nLambdaMinus2C0C2MinusC1Sq;

            var res = new CPoint(c0, c1, c2);

            res.Project(projection);
            return(res);
        }
Пример #11
0
        public RGPoint DirectTrackEndPoint(RGPoint crit, CProjection projection, out int cnt)
        {
            var          pt  = this;
            const double max = double.MaxValue;
            var          d   = max;
            var          i   = 0;

            while (d > Config.Acc && i < Config.Count)
            {
                pt.IterateDirect();
                d = pt.DistanceTo(crit);
                i++;
            }
            cnt = i;
            return(pt);
        }
Пример #12
0
        public CPoint DirectIterated(CProjection projection)
        {
            var c1MinusC0     = C1 - C0;
            var c2MunusC1     = C2 - C1;
            var c0C2MinusC1Sq = C0 * C2 - C1 * C1;
            var n1            = RgSettings.OneDivN;

            var c0 = c1MinusC0 * c1MinusC0 + n1 * c0C2MinusC1Sq;
            var c1 = RgSettings.Lambda * (c1MinusC0 * c2MunusC1 + n1 * c0C2MinusC1Sq);
            var c2 = RgSettings.Lambda2 * (c2MunusC1 * c2MunusC1 + n1 * c0C2MinusC1Sq);

            var res = new CPoint(c0, c1, c2);

            res.Project(projection);
            return(res);
        }
Пример #13
0
        public IEnumerable <CPoint> DirectTrack(CPoint crit, CProjection projection)
        {
            var          pt  = this;
            const double max = double.MaxValue;
            var          d   = max;
            var          i   = 0;
            var          res = new List <CPoint>();

            while (d > Config.Acc && i < Config.Count)
            {
                res.Add(pt);
                pt = pt.DirectIterated(projection);
                d  = pt.DistanceTo(crit);
                i++;
            }
            return(res);
        }
Пример #14
0
        public void Project(CProjection projection)
        {
            var sign = 1;

            if (projection.HasFlag(CProjection.Down))
            {
                sign = -1;
            }
            var oppositize = false;

            oppositize =
                (projection.HasFlag(CProjection.C0C1) && C2 * sign < 0) ||
                (projection.HasFlag(CProjection.C0C2) && C1 * sign < 0) ||
                (projection.HasFlag(CProjection.C1C2) && C0 * sign < 0);

            if (oppositize)
            {
                ToOpposite();
            }
        }
Пример #15
0
        public static Color GetColorDirect(RGPoint pt, CProjection projection)
        {
            var rp = pt;
            int cnt;
            var end = pt.DirectTrackEndPoint(Config.ReserverInterestedPointRg, projection, out cnt);

            if (cnt >= Config.Count)
            {
                return(Config.Black);
            }
            var last = end;
            var p    = Config.ReserverInterestedPointRg;
            var clr  = rp.G < 0
                            ? (last.R < p.R ? Config.Yellow : Config.Green)
                            : (last.R < p.R ? Config.Red : Config.Blue);

            var resClr = clr;

            return(resClr);
        }
Пример #16
0
 public static void FillArea(double x, double y, double xsz, double ysz, double sz, Color clr, IEnumerable <CPoint> cpts, Bitmap bmp, CProjection projection)
 {
     if (projection.HasFlag(CProjection.C0C1))
     {
         FillAreaC0C1(x, y, xsz, ysz, sz, clr, cpts, bmp);
     }
     else if (projection.HasFlag(CProjection.C1C2))
     {
         FillAreaC1C2(x, y, xsz, ysz, sz, clr, cpts, bmp);
     }
     else if (projection.HasFlag(CProjection.C0C2))
     {
         FillAreaC0C2(x, y, xsz, ysz, sz, clr, cpts, bmp);
     }
     else
     {
         throw new NotSupportedException();
     }
 }
Пример #17
0
 public static void SetPixel(double x, double y, double xsz, double ysz, double sz, Color clr, CPoint cp1, Bitmap bmp, CProjection projection)
 {
     if (projection.HasFlag(CProjection.C0C1))
     {
         SetPixelC0C1(x, y, xsz, ysz, sz, clr, cp1, bmp);
     }
     else if (projection.HasFlag(CProjection.C1C2))
     {
         SetPixelC1C2(x, y, xsz, ysz, sz, clr, cp1, bmp);
     }
     else if (projection.HasFlag(CProjection.C0C2))
     {
         SetPixelC0C2(x, y, xsz, ysz, sz, clr, cp1, bmp);
     }
     else
     {
         throw new NotSupportedException();
     }
 }
Пример #18
0
 public static void DrawXCross(double x, double y, double xsz, double ysz, double sz, Color clr, CPoint cp1, Graphics gr, CProjection projection, int radius = 3)
 {
     if (projection.HasFlag(CProjection.C0C1))
     {
         DrawXCrossC0C1(x, y, xsz, ysz, sz, clr, cp1, gr, radius);
     }
     else
     {
         throw new NotSupportedException();
     }
 }
Пример #19
0
 public static IEnumerable <KeyValuePair <CPoint, RGPoint> > DirectIterated(IEnumerable <CPoint> points, CProjection projection)
 {
     return(points.Select(cPoint => cPoint.DirectIterated(projection)).Select(cpt => new KeyValuePair <CPoint, RGPoint>(cpt, cpt.RG(projection))));
 }
Пример #20
0
        private static Color GetBgColor(CPoint pt, CProjection projection)
        {
            var rp = pt.RG(projection);

            return(rp.G < 0 ? Config.Green : Config.Blue);
        }
Пример #21
0
        public static IEnumerable <KeyValuePair <List <CPoint>, List <RGPoint> > > DirectIteratedMany(IEnumerable <CPoint> points, int count, CProjection projection)
        {
            var lst         = new List <KeyValuePair <List <CPoint>, List <RGPoint> > >();
            var curIterated = DirectIterated(points, projection).ToList();

            lst.Add(
                new KeyValuePair <List <CPoint>, List <RGPoint> >(
                    curIterated.Select(e => e.Key).ToList(),
                    curIterated.Select(e => e.Value).ToList()
                    )
                );
            for (var i = 2; i <= count; i++)
            {
                curIterated = DirectIterated(curIterated.Select(c => c.Key), projection).ToList();
                lst.Add(
                    new KeyValuePair <List <CPoint>, List <RGPoint> >(
                        curIterated.Select(e => e.Key).ToList(),
                        curIterated.Select(e => e.Value).ToList()
                        )
                    );
            }
            return(lst);
        }
Пример #22
0
 public static void DrawLine(double x, double y, double xsz, double ysz, double sz, Pen pen, CPoint cp1, CPoint cp2, Graphics gr, CProjection projection, bool verify = true)
 {
     if (projection.HasFlag(CProjection.C0C1))
     {
         DrawLineC0C1(x, y, xsz, ysz, sz, pen, cp1, cp2, gr, verify);
     }
     else if (projection.HasFlag(CProjection.C1C2))
     {
         DrawLineC1C2(x, y, xsz, ysz, sz, pen, cp1, cp2, gr, verify);
     }
     else if (projection.HasFlag(CProjection.C0C2))
     {
         DrawLineC0C2(x, y, xsz, ysz, sz, pen, cp1, cp2, gr, verify);
     }
     else
     {
         throw new NotSupportedException();
     }
 }
Пример #23
0
        public static IEnumerable <KeyValuePair <CPoint, RGPoint> > GetArcPositive(double h1, double h2, double acc, CProjection proj)
        {
            var sgn = proj.HasFlag(CProjection.Down) ? -1 : 1;

            if (proj.HasFlag(CProjection.C0C1))
            {
                return(GetC0C1ArcPositive(h1, h2, acc, sgn));
            }
            if (proj.HasFlag(CProjection.C1C2))
            {
                return(GetC1C2ArcPositive(h1, h2, acc, sgn));
            }
            throw new NotSupportedException();
        }