コード例 #1
0
 public Vertex GetCetnreGravity()
 {
     Vertex p = new Vertex();
     for (int i = 0; i < g.vertexs.Length; i++) {
         p.Add(g.vertexs[i]);
     }
     p.Div(g.vertexs.Length*1.0);
     return p;
 }
コード例 #2
0
        public void getNextPosition()
        {
            Vertex[] shift;
            int length = g.n;
            shift = new Vertex[length];
            for (int r = iterator; r < iterator + step; r++)
            {
                if (r > m)
                {
                    optimumPosition = true;
                    return;
                }
                for (int i = 0; i < length; i++)
                {
                    Vertex f = new Vertex(0, 0); ;
                    for (int j = 0; j < length; j++)
                    {
                        if (i != j)
                        {
                            f.Add(FRep(g.vertexs[i], g.vertexs[j]));
                            if (g.edges[i, j] == 1)
                                f.Add(FAttr(g.vertexs[i], g.vertexs[j]));

                        }
                    }
                    shift[i] = f;
                    double t = Delta(r);
                    double d = Graph.Distance(shift[i]);
                    t = Math.Min(d, t);
                    shift[i].Mul(t / d);
                }
                if (isOptimumPosition(shift)) return;
                for (int i = 0; i < length; i++)
                {
                    g.vertexs[i].Add(shift[i]);
                    g.vertexs[i].x = Math.Min(w / 2, Math.Max(-w / 2, g.vertexs[i].x));
                    g.vertexs[i].y = Math.Min(h / 2, Math.Max(-h / 2, g.vertexs[i].y));
                }

            }
            iterator+=step;
        }
コード例 #3
0
        public void getNextPosition()
        {
            Vertex[] shift;
            int length = g.vertexs.Length;
            shift = new Vertex[length];
            for (int r = iterator; r < iterator + step; r++)
            {
                if (r > m)
                {
                    optimumPosition = true;
                    return;

                }
                for (int i = 0; i < length; i++)
                {
                    Vertex f = new Vertex(0, 0); ;
                    for (int j = 0; j < length; j++)
                    {
                        if (g.edges[i, j] == 1 && i != j)
                        {
                            f.Add(FSprings(g.vertexs[i], g.vertexs[j]));
                        }
                        else
                        {
                            if (i != j)
                                f.Add(FRep(g.vertexs[i], g.vertexs[j]));
                        }
                    }
                    shift[i] = f;
                }
                if (isOptimumPosition(shift)) return;
                for (int i = 0; i < length; i++)
                {
                    shift[i].Mul(k);
                    g.vertexs[i].Add(shift[i]);
                }

            }
            iterator += step;
        }
コード例 #4
0
 private void springEmbedder()
 {
     Vertex[] shift;
     int length = g.n;
     shift = new Vertex[length];
     used = new bool[g.n];
     List<int> random_vertex= new List<int>();
     for (int r = 0; r < 100; r++)
     {
         toFalse();
         random_vertex = GenNumberVertex();
         for (int i = 0; i < length; i++)
         {
             Vertex f = new Vertex(0, 0);
             f.Add(FGravity(random_vertex[i]));
             for (int j = 0; j < length; j++)
             {
                 if (g.edges[random_vertex[i], j] == 1 && random_vertex[i] != j)
                 {
                     f.Add(FAttr(random_vertex[i], j));
                 }
                 else
                 {
                     if (i != j)
                         f.Add(FRep(g.vertexs[random_vertex[i]], g.vertexs[j]));
                 }
             }
             f.Mul(eps);
             g.vertexs[random_vertex[i]].Add(f);
         }
     }
 }