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(); }
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); }
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(); } }
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(); }
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(); }
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); }
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(); }
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); }
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); }
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); }
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); }
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(); } }
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); }
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(); } }
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(); } }
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(); } }
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)))); }
private static Color GetBgColor(CPoint pt, CProjection projection) { var rp = pt.RG(projection); return(rp.G < 0 ? Config.Green : Config.Blue); }
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); }
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(); } }
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(); }