private void SetTextBoxesAndOtherData(out DCircle es, DCircle dCircle)
        {
            es            = new DCircle(dCircle);
            textBox4.Text = es.Center.x.ToString();
            textBox5.Text = es.Center.y.ToString();
            var t = es.DiamsAndArg;

            textBox1.Text        = t.Item1.ToString();
            textBox2.Text        = t.Item2.ToString();
            textBox3.Text        = t.Item3.ToString();
            numericUpDown1.Value = es.FirstNomnalsCount;
            numericUpDown2.Value = es.SecondNomnalsCount;
        }
        /// <summary>
        /// Нарисовать полумесяц, стрелки нормалей на нём и набор случайных нормалей
        /// </summary>
        /// <param name="tuple"></param>
        /// <param name="dcircle"></param>
        /// <param name="randomcount"></param>
        private void Draw(Tuple <Point[], Point[]> tuple, DCircle dcircle, int randomcount = 100)
        {
            counter = 0;
            for (int i = 1; i < chart1.Series.Count; i++)
            {
                chart1.Series.RemoveAt(i--);
            }

            Point[] p = tuple.Item1;
            Point[] n = tuple.Item2;
            chart1.Series[0].Points.Clear();
            for (int i = 0; i < p.Length; i++)
            {
                chart1.Series[0].Points.AddXY(p[i].x, p[i].y);
                MakeArrow(p[i], n[i], Color.Red, dcircle);
            }

            RandArrows(dcircle, randomcount);
        }
        private void MakeArrow(Point beg, Point Normal, Color col, DCircle circle)
        {
            chart1.Series.Add(counter++.ToString());
            chart1.Series.Last().IsVisibleInLegend = false;
            chart1.Series.Last().ChartType         = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
            chart1.Series.Last().BorderWidth       = 2;
            chart1.Series.Last().Color             = col;

            double r = Normal.Abs, s = r / 4;
            double cor = Math.Acos((Normal.x) / r) * Math.Sign(Normal.y);
            Point  p1  = new Point(s * Math.Cos(-Math.PI - corner), s * Math.Sin(-Math.PI - corner)).Turn(Point.Zero, cor);
            Point  p2  = new Point(s * Math.Cos(-Math.PI + corner), s * Math.Sin(-Math.PI + corner)).Turn(Point.Zero, cor);

            chart1.Series.Last().Points.AddXY(beg.x, beg.y);
            chart1.Series.Last().Points.AddXY(beg.x + Normal.x, beg.y + Normal.y);
            chart1.Series.Last().Points.AddXY(beg.x + Normal.x + p1.x, beg.y + Normal.y + p1.y);
            chart1.Series.Last().Points.AddXY(beg.x + Normal.x, beg.y + Normal.y);
            chart1.Series.Last().Points.AddXY(beg.x + Normal.x + p2.x, beg.y + Normal.y + p2.y);
        }
        private void RandArrows(DCircle circle, int count = 100)
        {
            if (count == 0)
            {
                return;
            }

            chart1.Series.Add(counter++.ToString());
            chart1.Series.Last().IsVisibleInLegend = false;
            chart1.Series.Last().ChartType         = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
            chart1.Series.Last().MarkerStyle       = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Star5;
            chart1.Series.Last().MarkerSize        = 8;
            chart1.Series.Last().BorderWidth       = 8;
            chart1.Series.Last().Color             = Color.Green;
            int    n   = chart1.Series.Count - 1;
            double cof = GetWindowsCoef();

            int    c = 0;
            Random r = new Random();
            double x, y, q = circle.Radius * cof;
            Point  f, p;

            while (c < count)
            {
                x = -q + r.NextDouble() * q * 2 + circle.Center.x;
                y = -q + r.NextDouble() * q * 2 + circle.Center.y;
                p = new Point(x, y);

                if (!circle.ContainPoint(p, 1.05))
                {
                    chart1.Series[n].Points.AddXY(x, y);
                    f = circle.GetNormal(p, 0.1 * q);
                    MakeArrow(new Point(p.x - f.x, p.y - f.y), f, Color.Blue, circle);
                    c++;
                }
            }
        }
 public DC(Tuple <Point[], Point[]> tuple, DCircle circle, int randomcount = 40)
 {
     InitializeComponent();
     SetTrack();
     Draw(tuple, circle, randomcount);
 }
Beispiel #6
0
 /// <summary>
 /// Создать источник по полумесяцу и нужным массивам
 /// </summary>
 /// <param name="circle"></param>
 /// <param name="normals"></param>
 /// <param name="fmas"></param>
 public Source(DCircle circle, Complex[] fmas) : this(circle.Center, circle.GetNormalsOnDCircle(), p => circle.ContainPoint(p), fmas, Type.DCircle, circle.BigCircle.radius)
 {
 }