private void tsmiLoad_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader("data.txt"); miClear_Click(null, null); height = double.Parse(sr.ReadLine()); int n = int.Parse(sr.ReadLine()); for (int i = 0; i < n; i++) circles.Add(new Circle { Value = double.Parse(sr.ReadLine()) }); #region Шаг 1. Создаём начальную модель, состоящую из сторон прямоуольника. !!!Потом переделать на полосу!!! List<Geometric2d> borders = new List<Geometric2d>(); borders.Add(new Plane2d { Pole = new Point2d { X = ClientRectangle.Width / 2, Y = height }, Normal = new Vector2d { X = 0, Y = -1 } }); borders.Add(new Plane2d { Pole = new Point2d { X = 0, Y = height / 2 }, Normal = new Vector2d { X = 1, Y = 0 } }); borders.Add(new Plane2d { Pole = new Point2d { X = ClientRectangle.Width / 2, Y = 0 }, Normal = new Vector2d { X = 0, Y = 1 } }); vertex = Vertex<Geometric2d>.CreateClosenessModel(borders[0], borders[1], borders[2]); vertex.BreakCrosBy(new Plane2d { Pole = new Point2d { X = ClientRectangle.Width, Y = height / 2 }, Normal = new Vector2d { X = -1, Y = 0 } }); // Добавить четвёртую сторону. #endregion #region Шаг 2. Устанавливаем для полученных троек круги Делоне. !!Нужно ли автоматизировать!! vertex.SetCircleDelone(new Circle { Pole = new Point2d { X = height / 2, Y = height / 2 }, Value = height / 2 }); vertex.Cros.SetCircleDelone(new Circle { Pole = new Point2d { X = ClientRectangle.Width - height / 2, Y = height / 2 }, Value = height / 2 }); vertex.Prev.Cros.SetCircleDelone(new Circle()); vertex.Cros.Prev.Cros.SetCircleDelone(new Circle()); #endregion triples = vertex.GetTriples(); //vertex = vertex.Cros; Invalidate(); }
public MainForm() { InitializeComponent(); region = new Polygon2d(); region.Add(new Point2d()); region.Add(new Point2d { X = ClientRectangle.Width }); region.Add(new Point2d { X = ClientRectangle.Width, Y = ClientRectangle.Height }); region.Add(new Point2d { Y = ClientRectangle.Height }); #region Шаг 1. Создаём начальную модель, состоящую из сторон прямоугольника. // TODO: Переделать на многольник. List<Plane2d> borders = new List<Plane2d>(); for (int i = 0; i < region.Count; i++) borders.Add(new Plane2d { Pole = region[i].Copy, Normal = (region[i + 1] - region[i])._I_(false) }); vertex = Vertex<Geometric>.CreateClosenessModel(borders[0], borders[1], borders[2]); vertex.BreakCrosBy(borders[3]); #endregion #region Шаг 2. Устанавливаем для полученных троек круги Делоне. !!Нужно ли автоматизировать?!! vertex.SetCircleDelone(new Circle { Pole = new Point2d { X = ClientRectangle.Width - ClientRectangle.Height / 2, Y = ClientRectangle.Height / 2 }, Scalar = ClientRectangle.Height / 2 }); vertex.Cros.SetCircleDelone(new Circle { Pole = new Point2d { X = ClientRectangle.Height / 2, Y = ClientRectangle.Height / 2 }, Scalar = ClientRectangle.Height / 2 }); //vertex.SetCircleDelone(Assistant.КРУГ_ДЕЛОНЕ(borders[0], borders[1], borders[2])); //vertex.Cros.SetCircleDelone(Assistant.КРУГ_ДЕЛОНЕ(borders[2], borders[3], borders[0])); vertex.Prev.Cros.SetCircleDelone(new Circle()); vertex.Cros.Prev.Cros.SetCircleDelone(new Circle()); #endregion rand = new Random(); triples = ClosenessModelExt<Geometric, Circle>.GetTriples(this.vertex); }
public PlacingWithCloseModel(double height, Circle[] circles, double eps) : base(height, 0, circles, eps) { length = 2 * height; #region Шаг 1. Создаём начальную модель, состоящую из сторон прямоугольника. !!!Потом переделать на полосу!!! Geometric2d border_1 = new Plane2d { Id = -1, Pole = new Point2d { X = 0, Y = 2 * height / 2 }, Normal = new Vector2d { X = 0, Y = -1 } }; Geometric2d border_2 = new Plane2d { Id = -2, Pole = new Point2d { X = 0, Y = 1 * height / 2 }, Normal = new Vector2d { X = 1, Y = 0 } }; Geometric2d border_3 = new Plane2d { Id = -3, Pole = new Point2d { X = 0, Y = 0 * height / 2 }, Normal = new Vector2d { X = 0, Y = +1 } }; Geometric2d border_4 = new Plane2d { Id = -4, Pole = new Point2d { X = length, Y = height / 2 }, Normal = new Vector2d { X = -1, Y = 0 } }; vertex = Vertex<Geometric2d>.CreateClosenessModel(border_1, border_2, border_3); vertex.BreakCrosBy(border_4); #endregion #region Шаг 2. Устанавливаем для полученных троек круги Делоне. !Для полосы можно не автоматизировать. Для многоугольника необходимо придумать автоматизацию. vertex.SetCircleDelone(new Circle { Pole = new Point2d { X = height / 2, Y = height / 2 }, Scalar = height / 2 }); vertex.Cros.SetCircleDelone(new Circle { Pole = new Point2d { X = length - height / 2, Y = height / 2 }, Scalar = height / 2 }); vertex.Prev.Cros.SetCircleDelone(new Circle { Pole = new Point2d { X = -height / 2, Y = height / 2 }, Scalar = 0 }); vertex.Cros.Prev.Cros.SetCircleDelone(new Circle { Pole = new Point2d { X = double.PositiveInfinity /*length + height / 2*/, Y = height / 2 }, Scalar = 0 }); #endregion length = 0; vertex = vertex.Cros.Next.Cros.Next; triples = vertex.GetTriples(); }
private void miStripInfo_Click(object sender, EventArgs e) { FormTemp ft = new FormTemp() { Width = this.Width, Text = "Введите ширину полосы", Info = height.ToString() }; ft.ShowDialog(this); try { height = double.Parse(ft.Info); } catch { } #region Шаг 1. Создаём начальную модель, состоящую из сторон прямоуольника. !!!Потом переделать на полосу!!! List<Geometric2d> borders = new List<Geometric2d>(); borders.Add(new Plane2d { Pole = new Point2d { X = ClientRectangle.Width / 2, Y = height }, Normal = new Vector2d { X = 0, Y = -1 } }); borders.Add(new Plane2d { Pole = new Point2d { X = 0, Y = height / 2 }, Normal = new Vector2d { X = 1, Y = 0 } }); borders.Add(new Plane2d { Pole = new Point2d { X = ClientRectangle.Width / 2, Y = 0 }, Normal = new Vector2d { X = 0, Y = 1 } }); vertex = Vertex<Geometric2d>.CreateClosenessModel(borders[0], borders[1], borders[2]); vertex.BreakCrosBy(new Plane2d { Pole = new Point2d { X = ClientRectangle.Width, Y = height / 2 }, Normal = new Vector2d { X = -1, Y = 0 } }); // Добавить четвёртую сторону. #endregion #region Шаг 2. Устанавливаем для полученных троек круги Делоне. !!Нужно ли автоматизировать!! vertex.SetCircleDelone(new Circle { Pole = new Point2d { X = height / 2, Y = height / 2 }, Value = height / 2 }); vertex.Cros.SetCircleDelone(new Circle { Pole = new Point2d { X = ClientRectangle.Width - height / 2, Y = height / 2 }, Value = height / 2 }); vertex.Prev.Cros.SetCircleDelone(new Circle()); vertex.Cros.Prev.Cros.SetCircleDelone(new Circle()); #endregion triples = vertex.GetTriples(); //vertex = vertex.Cros; Invalidate(); }