コード例 #1
0
ファイル: Model.cs プロジェクト: Ring-r/opt
        public static VertexClass CreateModel(Object data_prev, Object data_curr, Object data_next)
        {
            VertexClass vertex_prev = new VertexClass(data_prev, data_curr, data_next);
            VertexClass vertex_next = new VertexClass(data_next, data_curr, data_prev);

            // Установление связей между начальными тройками.
            vertex_prev.prev.SetCros(vertex_next.next);
            vertex_prev.SetCros(vertex_next);
            vertex_prev.next.SetCros(vertex_next.prev);

            return vertex_prev;
        } // Проверить! Оптимизировать!
コード例 #2
0
ファイル: Model.cs プロジェクト: Ring-r/opt
 public void Reset()
 {
     current = start;
 }
コード例 #3
0
ファイル: Model.cs プロジェクト: Ring-r/opt
 /// <summary>
 /// Установление связи с перекрёстным узлом (и наоборот).
 /// </summary>
 /// <param name="cros_vertex">Ссылка на перекрёстный узел.</param>
 protected void SetCros(VertexClass cros_vertex)
 {
     cros = cros_vertex;
     cros.cros = this;
 }
コード例 #4
0
ファイル: Model.cs プロジェクト: Ring-r/opt
 public bool MoveNextInTriple()
 {
     current = current.next;
     return current != start;
 }
コード例 #5
0
ファイル: Model.cs プロジェクト: Ring-r/opt
 public bool MoveNextInTriple(CheckedBoolFunction ChF, CheckedVoidFunction FF)
 {
     do
     {
         if (!current.Rebuild(ChF))
             return true;
         FF(current);
         current = current.next;
     } while (current != start);
     return false;
 }
コード例 #6
0
ファイル: Model.cs プロジェクト: Ring-r/opt
 public bool MoveNextInNode()
 {
     current = current.next.cros.next;
     return current != start;
 }
コード例 #7
0
ファイル: Model.cs プロジェクト: Ring-r/opt
 public bool MoveNextInNode(CheckedBoolFunction ChF)
 {
     do
     {
         if (!current.Rebuild(ChF))
             return true;
         current = current.next.cros.next;
     } while (current != start);
     return false;
 }
コード例 #8
0
ファイル: Model.cs プロジェクト: Ring-r/opt
        /// <summary>
        /// Разбиение противоположного ребра (вставка двух новых троек).
        /// </summary>
        /// <param name="data">Вставляемый объект.</param>
        public void BreakCrosBy(Object data)
        {
            // Создаём две противоположнонаправленные тройки.
            VertexClass vertex_n = new VertexClass(next.data, data, prev.data) { cros = this };
            VertexClass vertex_f = new VertexClass(prev.data, data, next.data) { cros = this.cros };

            // Устанавливаем связи между созданными тройками.
            vertex_n.prev.SetCros(vertex_f.next);
            vertex_n.next.SetCros(vertex_f.prev);

            // Устанавливаем связи со всем графом.
            vertex_n.cros.cros = vertex_n;
            vertex_f.cros.cros = vertex_f;

        }
コード例 #9
0
ファイル: Model.cs プロジェクト: Ring-r/opt
 public Enumerator(VertexClass vertex)
 {
     start = vertex;
     current = vertex;
 }
コード例 #10
0
ファイル: Model.cs プロジェクト: Ring-r/opt
        protected VertexClass(Object data_prev, Object data_curr, Object data_next)
        {
            prev = new VertexClass() { next = this, data = data_prev };
            data = data_curr;
            next = new VertexClass() { prev = this, data = data_next };

            prev.prev = next;
            next.next = prev;
        }
コード例 #11
0
ファイル: Model.cs プロジェクト: Ring-r/opt
 public TripleClass(VertexClass vertex)
 {
     Vertex = vertex;
     VertexClass.Enumerator en_vertexes = Vertex.GetEnumerator();
     do
     {
         en_vertexes.Current.Triple = this;
     } while (en_vertexes.MoveNextInTriple());
 }
コード例 #12
0
ファイル: FormMain.cs プロジェクト: Ring-r/opt
 private bool MonotonCheck(VertexClass vertex, Circle circle)
 {
     return true;
 }
コード例 #13
0
ファイル: FormMain.cs プロジェクト: Ring-r/opt
 private void ChVF(VertexClass vertex)
 {
     vertex.Triple.Update();
 }
コード例 #14
0
ファイル: FormMain.cs プロジェクト: Ring-r/opt
 private bool ChBF(VertexClass vertex)
 {
     TripleClass triple = vertex.Cros.Triple;
     if (triple == null)
         return true;
     Circle delone_circle = triple.Data;
     Circle circle = vertex.Data as Circle;
     double dx = circle.X - delone_circle.X;
     double dy = circle.Y - delone_circle.Y;
     return Math.Sqrt(dx * dx + dy * dy) - circle.R - delone_circle.R >= 0; // Находим расширенное расстояние от Circle до Circle.
 }