Example #1
0
        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 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();
        }
Example #3
0
        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();
        }