Beispiel #1
0
        private void PictureBoxMouseDoubleClick(object sender, MouseEventArgs e)
        {
            var fr    = _stack.Peek();
            var r     = fr.Rectangle;
            var pixWd = r.Width / pictureBox.Width;
            var pixHt = r.Height / pictureBox.Height;
            var newX  = r.X + e.X * pixWd;
            var newY  = r.Y + e.Y * pixHt;

            if (_pointSelecting)
            {
                var rp  = newX;
                var gp  = newY;
                var cpt = new RGPoint(rp, gp);
                _pointSelected = cpt;
                PointNumber    = 0;
                DrawPoint();
                _pointSelecting = false;
                var tr = new TrackPoint(this, PointTrack.Count);
                tr.Show(this);
            }
            else
            {
                var newW    = 20 * pixWd;
                var newH    = 20 * pixHt;
                var newRect = new DRect {
                    X = newX, Y = newY, Width = newW, Height = newH
                };
                var newFr = new ProcessingFrame {
                    Rectangle = newRect
                };
                _stack.Push(newFr);
                Redraw();
            }
        }
Beispiel #2
0
        private void RedrawWithArea()
        {
            if (_bgWithArea != null)
            {
                _bgWithArea.Dispose();
            }
            _bgWithArea = _bg.Clone() as Bitmap;

            var initialLstPositive = (_arc ? RGPoint.GetArcPositive(_h1, _h2, _ypxsz, CProjection.UpC1C2) : RGPoint.GetTrianglePositive(_h1, _h2, _xpxsz, _ypxsz, CProjection.UpC1C2)).ToList();
            var initialLstNegative = (_arc ? RGPoint.GetArcNegative(_h1, _h2, _ypxsz, CProjection.UpC1C2) : RGPoint.GetTriangleNegative(_h1, _h2, _xpxsz, _ypxsz, CProjection.UpC1C2)).ToList();

            _areaInitialSetCPositive = initialLstPositive.Select(e => e.Key).ToList();
            _areaInitialSetCNegative = initialLstNegative.Select(e => e.Key).ToList();

            RG.FillArea(X, Y, _xpxsz, _ypxsz, _sz, Config.Yellow, _areaInitialSetCPositive, _bgWithArea, CProjection.UpC1C2);
            RG.FillArea(X, Y, _xpxsz, _ypxsz, _sz, Config.Red, _areaInitialSetCNegative, _bgWithArea, CProjection.UpC1C2);

            var iteratedPositive = RGPoint.DirectIteratedMany(_areaInitialSetCPositive, trackArea.Maximum, CProjection.C1C2).ToList();
            var iteratedNegative = RGPoint.DirectIteratedMany(_areaInitialSetCNegative, trackArea.Maximum, CProjection.C1C2).ToList();

            _iteratedAreasCPositive = iteratedPositive.Select(e => e.Key.ToList()).ToList();
            _iteratedAreasCPositive.Insert(0, _areaInitialSetCPositive);
            _iteratedAreasCNegative = iteratedNegative.Select(e => e.Key.ToList()).ToList();
            _iteratedAreasCNegative.Insert(0, _areaInitialSetCNegative);

            ChangePictureBoxPicture(_bgWithArea);
            pictureBox.Update();
        }
Beispiel #3
0
        private void _plot_MouseClick(object sender, MouseEventArgs e)
        {
            if (_plot.Image != null)
            {
                _plot.Image.Dispose();
            }
            var bmp = new Bitmap(_originalBitmap);
            var gr  = Graphics.FromImage(bmp);

            var ptF      = MapFromPlot(_plot.Size, e.Location);
            var rg       = new RGPoint(ptF.X, ptF.Y);
            var iterated = RGPoint.DirectIterations(rg, _iterations).ToList();
            var redPen   = new Pen(Color.Red);
            var bluePen  = new Pen(Color.Blue);

            for (var i = 0; i < iterated.Count - 1; i++)
            {
                var pt1 = MapToPlot(_plot.Size, new PointF((float)iterated[i].R, (float)iterated[i].G));
                var pt2 = MapToPlot(_plot.Size, new PointF((float)iterated[i + 1].R, (float)iterated[i + 1].G));
                gr.DrawEllipse(redPen, pt1.X, pt1.Y, 2, 2);
                gr.DrawEllipse(redPen, pt2.X, pt2.Y, 2, 2);
                gr.DrawLine(bluePen, pt1, pt2);
            }
            _plot.Image = bmp;
        }
Beispiel #4
0
        private void FillPoint(RGPoint p1, Color clr)
        {
            var np    = NPt(p1);
            var gr    = Graphics.FromImage(pictureBox.Image);
            var bgClr = RG.GetColorDirect(new RGPoint(p1), CProjection.UpC1C2);
            var blend = RG.Blend(clr, bgClr);

            gr.TryDraw(g => g.FillEllipse(new SolidBrush(clr), np.X - 2, np.Y - 2, 4, 4));
            gr.TryDraw(g => g.DrawRectangle(new Pen(blend), np.X - 10, np.Y - 10, 20, 20));
        }
Beispiel #5
0
        bool InTriangle(RGPoint rg)
        {
            if (rg.G > 0)
            {
                return(false);
            }
            var c = RgSettings.Const;

            if (
                (rg.G >= rg.R - c && rg.R <= c && rg.R >= 0) ||
                (rg.G >= -rg.R - c && rg.R > -c && rg.R <= 0)
                )
            {
                return(true);
            }
            return(false);
        }
Beispiel #6
0
        private void FillPixel(Bitmap bmp, double x, double y)
        {
            var r     = x;
            var g     = y;
            var pt    = NPt(r, g);
            var cpt   = new RGPoint(r, g);
            var color = RG.GetColorDirect(cpt, CProjection.UpC1C2);

            SetPixel(bmp, pt.X, pt.Y, color);
            var orig = new RGPoint(r, g);

            if (InTriangle(orig))
            {
                var oneIteration = orig.DirectIterated();
                var pt1          = NPt(oneIteration.R, oneIteration.G);
                if (pt1.X >= 0 && pt1.Y >= 0 && pt1.X < bmp.Size.Width && pt1.Y < bmp.Size.Height)
                {
                    var clrR = Math.Max(0, color.R - 50);
                    var clrG = Math.Max(0, color.G - 50);
                    var clrB = Math.Max(0, color.B - 50);
                    SetPixel(bmp, pt1.X, pt1.Y, Color.Black);
                }
            }
        }
Beispiel #7
0
        private void RedrawWithLines()
        {
            if (_bgWithLines != null)
            {
                _bgWithLines.Dispose();
            }
            _bgWithLines = _bg.Clone() as Bitmap;
            _rline1      = RGPoint.ParabolaDirect(_a, _b, _rmin, _rmax, _rstep).ToList();
            _line1       = _rline1.Select(rg => rg.Value.CDirect).ToList();

            /*
             * _criticalLine = RGPoint.CriticalLineDirect(_rmin, _rmax, _rstep, _a, _b).ToList();
             */
            if (DrawTransformedLine)
            {
                _rline2 = new List <RGPoint>();
                foreach (var rp1 in _rline1)
                {
                    var r  = rp1.Value.R;
                    var r1 = RgSettings.Lambda * ((_a - _b - 1 + RgSettings.NMinus1) / (1 - RgSettings.NMinus1)) *
                             ((r - _a1) / (r - _b1));
                    var g1  = (r1 - _a11) / (r1 - _b11) * Math.Pow(r1 + RgSettings.Lambda, 2);
                    var rp2 = new RGPoint {
                        R = r1, G = g1
                    };
                    _rline2.Add(rp2);
                }
                _line2 = _rline2.Select(rg => rg.CDirect).ToList();
            }
            else
            {
                _rline2 = new List <RGPoint>();
                _line2  = new List <CPoint>();
            }


            if (_bgWithLines != null)
            {
                var gr = Graphics.FromImage(_bgWithLines);

                for (var i = 0; i < _rline1.Count - 1; i++)
                {
                    var rpt1 = _rline1[i];
                    var rpt2 = _rline1[i + 1];
                    var c1   = rpt1.Value.CDirect;
                    var c2   = rpt2.Value.CDirect;
                    var pen  = new Pen(rpt1.Color);
                    RG.DrawLine(X, Y, _xpxsz, _ypxsz, _sz, pen, c1, c2, gr, CProjection.UpC1C2);
                }

                if (DrawTransformedLine)
                {
                    for (var i = 0; i < _line2.Count - 1; i++)
                    {
                        var c1 = _line2[i];
                        var c2 = _line2[i + 1];
                        RG.DrawLine(X, Y, _xpxsz, _ypxsz, _sz, Config.WhitePen, c1, c2, gr, CProjection.UpC1C2);
                    }
                }

                /*
                 * for (var i = 0; i < _criticalLine.Count - 1; i++)
                 * {
                 *  var pt1 = _criticalLine[i];
                 *  var pt2 = _criticalLine[i];
                 *  RG.DrawLine(X, Y, _xpxsz, _ypxsz, _sz, Config.FuchsiaPen, pt1, pt2, gr, CProjection.UpC1C2);
                 * }
                 * */

                gr.Save();
            }
            ChangePictureBoxPicture(_bgWithLines);
            pictureBox.Update();
        }
Beispiel #8
0
 private Point NPt(RGPoint p)
 {
     return(NPt(p.R, p.G));
 }
Beispiel #9
0
 public void CleanPoint(object sender, EventArgs e)
 {
     _pointSelected = null;
     _pointTrack    = null;
     RedrawScene();
 }
Beispiel #10
0
        private void RedrawWithLines()
        {
            if (_bgWithLines != null)
            {
                _bgWithLines.Dispose();
            }
            _bgWithLines = _bg.Clone() as Bitmap;
            _rline1      = RGPoint.ParabolaReversed(_a, _b, _rmin, _rmax, _rstep).ToList();
            _line1       = _rline1.Select(rg => rg.CReversed).ToList();

            _rline2 = new List <RGPoint>();
            foreach (var rp1 in _rline1)
            {
                var r   = rp1.R;
                var r1  = RgSettings.Lambda * ((_a - _b + (RgSettings.N - 1) * Math.Pow(RgSettings.Lambda, -1)) / (1 - RgSettings.N)) * ((r - _a1) / (r - _b1));
                var g1  = (r1 - _a11) / (r1 - _b11) * Math.Pow(r1 + 1, 2);
                var rp2 = new RGPoint {
                    R = r1, G = g1
                };
                _rline2.Add(rp2);
            }
            _line2 = _rline2.Select(rg => rg.CReversed).ToList();

            var nearestToB = _rline1.OrderBy(rp => Math.Abs(rp.R - _b)).FirstOrDefault();
            var nearestToL = _rline1.OrderBy(rp => Math.Abs(rp.R - -Math.Pow(RgSettings.Lambda, -1))).FirstOrDefault();

            var cNearestToB = nearestToB != null ? nearestToB.CReversed : null;
            var cNearesToL  = nearestToL != null ? nearestToL.CReversed : null;

            if (_bgWithLines != null)
            {
                var gr = Graphics.FromImage(_bgWithLines);

                var pen1 = new Pen(Config.Black);
                for (var i = 0; i < _line1.Count - 1; i++)
                {
                    var c1 = _line1[i];
                    var c2 = _line1[i + 1];
                    RG.DrawLine(X, Y, _xpxsz, _ypxsz, _sz, pen1, c1, c2, gr, CProjection.UpC0C1);
                }

                var pen2 = new Pen(Config.White);
                for (var i = 0; i < _line2.Count - 1; i++)
                {
                    var c1 = _line2[i];
                    var c2 = _line2[i + 1];
                    RG.DrawLine(X, Y, _xpxsz, _ypxsz, _sz, pen2, c1, c2, gr, CProjection.UpC0C1);
                }

                if (cNearestToB != null)
                {
                    RG.FillPoint(X, Y, _xpxsz, _ypxsz, _sz, Config.Red, cNearestToB, gr, CProjection.UpC0C1);
                }
                if (cNearesToL != null)
                {
                    RG.FillPoint(X, Y, _xpxsz, _ypxsz, _sz, Config.Yellow, cNearesToL, gr, CProjection.UpC0C1);
                }
                gr.Save();
            }
            ChangePictureBoxPicture(_bgWithLines);
            pictureBox.Update();
        }
Beispiel #11
0
        private static void DrawParabolaReversed(double a, double b, Graphics gr, DashStyle dash = DashStyle.Dot, bool beforeTrans = true)
        {
            var rgParabola = RGPoint.ParabolaReversed(a, b, -1000, 1000, 0.1, beforeTrans);
            var rgPoints   = rgParabola as RGPoint[] ?? rgParabola.ToArray();
            var beforeB    = rgPoints.Where(rg => rg.R <= b).ToList();
            var fromBtoL   = rgPoints.Where(rg => rg.R >= b && rg.R <= RgSettings.LambdaMinus1).ToList();
            var fromLtoB   = rgPoints.Where(rg => rg.R >= RgSettings.LambdaMinus1 && rg.R <= b).ToList();
            var fromL      = rgPoints.Where(rg => rg.R >= RgSettings.LambdaMinus1).ToList();

            var cParabola1 = beforeB.Select(rg => rg.CReversed).ToList();
            var cParabola2 = fromBtoL.Select(rg => rg.CReversed).ToList();
            var cParabola3 = fromLtoB.Select(rg => rg.CReversed).ToList();
            var cParabola4 = fromL.Select(rg => rg.CReversed).ToList();

            var pen1 = new Pen(Color.Red, 2)
            {
                DashStyle = dash
            };

            for (var i = 0; i < cParabola1.Count - 1; i++)
            {
                var cp1     = cParabola1[i];
                var cp2     = cParabola1[i + 1];
                var realPen = pen1;
                DrawLine(realPen, cp1, cp2, gr);
            }
            if (cParabola1.Any())
            {
                var first = cParabola1.First();
                var last  = cParabola1.Last();
                FillPoint(Color.Red, first, gr);
                FillPoint(Color.Red, last, gr);
            }

            var pen2 = new Pen(Color.LemonChiffon, 2)
            {
                DashStyle = dash
            };

            for (var i = 0; i < cParabola2.Count - 1; i++)
            {
                var cp1     = cParabola2[i];
                var cp2     = cParabola2[i + 1];
                var realPen = pen2;
                DrawLine(realPen, cp1, cp2, gr);
            }
            if (cParabola2.Any())
            {
                var first = cParabola2.First();
                var last  = cParabola2.Last();
                FillPoint(Color.LemonChiffon, first, gr);
                FillPoint(Color.LemonChiffon, last, gr);
            }

            var pen3 = new Pen(Color.Yellow, 2)
            {
                DashStyle = dash
            };

            for (var i = 0; i < cParabola3.Count - 1; i++)
            {
                var cp1     = cParabola3[i];
                var cp2     = cParabola3[i + 1];
                var realPen = pen3;
                DrawLine(realPen, cp1, cp2, gr);
            }
            if (cParabola3.Any())
            {
                var first = cParabola3.First();
                var last  = cParabola3.Last();
                FillPoint(Color.Yellow, first, gr);
                FillPoint(Color.Yellow, last, gr);
            }

            var pen4 = new Pen(Color.DarkViolet, 2)
            {
                DashStyle = dash
            };

            for (var i = 0; i < cParabola4.Count - 1; i++)
            {
                var cp1     = cParabola4[i];
                var cp2     = cParabola4[i + 1];
                var realPen = pen4;
                DrawLine(realPen, cp1, cp2, gr);
            }
            if (cParabola4.Any())
            {
                var first = cParabola4.First();
                var last  = cParabola4.Last();
                FillPoint(Color.DarkViolet, first, gr);
                FillPoint(Color.DarkViolet, last, gr);
            }
        }