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); }
/// <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) { }