Exemple #1
0
        public ClusterTestWorld(Camera camera)
        {
            Scene = new Scene(camera);

            Vector[] vectors = new Vector[numVisuals];

            Vector2[] bias = new Vector2[4];
            bias[0] = 2.0f * new Vector2(Rand(1.0f), Rand(1.0f));
            bias[1] = 2.0f * new Vector2(Rand(1.0f), Rand(1.0f));
            bias[2] = 2.0f * new Vector2(Rand(1.0f), Rand(1.0f));
            bias[3] = 2.0f * new Vector2(Rand(1.0f), Rand(1.0f));


            for (int i = 0; i < numVisuals; i++)
            {
                int     randIndex = (int)Rand(3.999999f);
                Vector2 pos       = new Vector2(Rand(1.0f), Rand(1.0f));// + bias[randIndex];
                vectors[i]    = new Vector(2);
                vectors[i][0] = pos.X;
                vectors[i][1] = pos.Y;
            }

            KMeans cluster = new KMeans(vectors, 3, 30);

            int[] groups = cluster.FindGroups();

            for (int i = 0; i < numVisuals; i++)
            {
                Color4 color;
                if (groups[i] == 0)
                {
                    color = Color4.Blue;
                }
                else if (groups[i] == 1)
                {
                    color = Color4.Green;
                }
                else //if (groups[i] == 2)
                {
                    color = Color4.Red;
                }
                //else //( groups[i] == 3 )
                {
                    //m = VisualFactory.tranparentColorMat;
                }

                Visual visual = VisualFactory.CircleVisual(0.05f, color, VisualFactory.FillMaterial, 0.5f);
                Visuals.Add(visual);
            }

            for (int i = 0; i < numVisuals; i++)
            {
                Visuals[i].Transform = new XForm(0, new Vector2(vectors[i][0], vectors[i][1]));
            }
        }
        public void CycleGraph(int numNodes)
        {
            for (int i = 0; i < numNodes; i++)
            {
                Graph.AddNode(new Node <NodeData, Visual>(new NodeData(new Vector2(-2 + 4.0f * Rand(1), -2 + 4.0f * Rand(1)),
                                                                       VisualFactory.CircleVisual(0.14f, Color4.Blue, VisualFactory.FillMaterial, 0.5f))));
                Graph.Nodes[i].Data.Radius = 0.14f;
            }

            for (int i = 0; i < numNodes; i++)
            {
                Graph.AddPair(Graph.Nodes[i], Graph.Nodes[(i + 1) % numNodes]);
            }
        }
        public void CompleteGraph(int numNodes)
        {
            for (int i = 0; i < numNodes; i++)
            {
                Graph.AddNode(new Node <NodeData, Visual>(new NodeData(new Vector2(-1 + 2.0f * Rand(1), -1 + 2.0f * Rand(1)),
                                                                       VisualFactory.CircleVisual(0.14f, Color4.Black, VisualFactory.FillMaterial, 0.5f))));
                Graph.Nodes[i].Data.Radius = 0.14f;
            }

            for (int i = 0; i < numNodes; i++)
            {
                for (int j = i + 1; j < numNodes; j++)
                {
                    Graph.AddPair(Graph.Nodes[i], Graph.Nodes[j]);
                }
            }
        }