Example #1
0
        // funkcija za konektovanje naseg cvora sa novim uz odgovarajuce provere
        public void connect(int newNodeID)
        {
            var connectedNode = Platno.nodes.First(y => y.ID == newNodeID);

            // ukoliko smo vec konektovani a pokusavamo opet znaci da zapravo
            // pokusavamo da diskonektujemo nas cvor sa drugim cvorom
            // pa to ovde i radimo
            foreach (var x in Connected)
            {
                if (newNodeID == x)
                {
                    Connected.Remove(newNodeID);
                    weights.Remove(weights.Find(k => k.Key == newNodeID));
                    connectionColors.Remove(connectionColors.Find(l => l.Key == newNodeID));
                    return;
                }
            }

            // racunamo poziciju gde ce se prikazati tezina date grane i konektujemo sa tim cvorom nas cvor
            // ubacujemo i boje i tezinu
            double length = Math.Sqrt(Math.Pow(Position.X - connectedNode.Position.X, 2) + Math.Pow(Position.Y - connectedNode.Position.Y, 2)) / 8;

            Connected.Add(newNodeID);

            weights.Add(new KeyValuePair <int, double>(newNodeID, length));
            connectionColors.Add(new KeyValuePair <int, Color>(newNodeID, Color.ForestGreen));
        }
Example #2
0
        public void Generate(Point[] points, out int iter, Vector <double> start, bool regenerate = true)
        {
            int n = points.Length;

            double[] x = new double[n];
            double[] y = new double[n];
            double[] z = new double[n];
            for (int i = 0; i < n; i++)
            {
                x[i] = points[i].x;
                y[i] = points[i].y;
                z[i] = points[i].z;
            }
            Vector <double> Vx = Vector <double> .Build.DenseOfArray(x);

            Vector <double> Vy = Vector <double> .Build.DenseOfArray(y);

            Vector <double> Vz = Vector <double> .Build.DenseOfArray(z);

            double Mx = Vx.Average();
            double My = Vy.Average();
            double Mz = Vz.Average();

            Vx -= Mx;
            Vy -= My;
            Vz -= Mz;
            double x2 = Vx.DotProduct(Vx);
            double y2 = Vy.DotProduct(Vy);
            double z2 = Vz.DotProduct(Vz);
            double xy = Vx.DotProduct(Vy);
            double xz = Vx.DotProduct(Vz);
            double yz = Vy.DotProduct(Vz);

            Func <Vector <double>, Vector <double> > target = (s) => Fun(s, x2, y2, z2, xy, yz, xz);
            Func <Vector <double>, Matrix <double> > jacobi = (s) => Jacobi(s, x2, y2, z2, xy, yz, xz);

            (Vector <double> res_versor, int cnt) = MatrixExt.Fsolve(start, target, jacobi);

            this.versor = res_versor;
            iter        = cnt;
            this.d      = -(Mx * versor[0] + My * versor[1] + Mz * versor[2]);
            double dist;

            disp = 0;
            Connected.Clear();
            for (int i = 0; i < n; i++)
            {
                if ((dist = Distance(points[i])) < Control.AcceptRangePlain)
                {
                    Connected.Add(points[i]);
                    disp += dist * dist;
                }
            }
            pointnum = Connected.Count;
            if (regenerate)
            {
                Regenerate();
            }
        }
Example #3
0
        private void Connect()
        {
            if (X - 1 >= 0 && !Connected.Contains(GameEngine.Puzzle[X - 1, Y]))
            {
                if (GameEngine.Puzzle[X - 1, Y].transform.eulerAngles.z == transform.eulerAngles.z && Vector3.Distance(GameEngine.Puzzle[X - 1, Y].transform.position,
                                                                                                                       transform.position + Quaternion.Euler(transform.eulerAngles) * new Vector3(-Settings.PuzzleShift, 0)) < 0.15f)
                {
                    Connected.Add(GameEngine.Puzzle[X - 1, Y]);
                    GameEngine.Puzzle[X - 1, Y].Connected.Add(this);
                }
            }

            if (X + 1 < GameEngine.W && !Connected.Contains(GameEngine.Puzzle[X + 1, Y]))
            {
                if (GameEngine.Puzzle[X + 1, Y].transform.eulerAngles.z == transform.eulerAngles.z && Vector3.Distance(GameEngine.Puzzle[X + 1, Y].transform.position,
                                                                                                                       transform.position + Quaternion.Euler(transform.eulerAngles) * new Vector3(Settings.PuzzleShift, 0)) < 0.15f)
                {
                    Connected.Add(GameEngine.Puzzle[X + 1, Y]);
                    GameEngine.Puzzle[X + 1, Y].Connected.Add(this);
                }
            }

            if (Y - 1 >= 0 && !Connected.Contains(GameEngine.Puzzle[X, Y - 1]))
            {
                if (GameEngine.Puzzle[X, Y - 1].transform.eulerAngles.z == transform.eulerAngles.z && Vector3.Distance(GameEngine.Puzzle[X, Y - 1].transform.position,
                                                                                                                       transform.position + Quaternion.Euler(transform.eulerAngles) * new Vector3(0, -Settings.PuzzleShift)) < 0.15f)
                {
                    Connected.Add(GameEngine.Puzzle[X, Y - 1]);
                    GameEngine.Puzzle[X, Y - 1].Connected.Add(this);
                }
            }

            if (Y + 1 < GameEngine.H && !Connected.Contains(GameEngine.Puzzle[X, Y + 1]))
            {
                if (GameEngine.Puzzle[X, Y + 1].transform.eulerAngles.z == transform.eulerAngles.z && Vector3.Distance(GameEngine.Puzzle[X, Y + 1].transform.position,
                                                                                                                       transform.position + Quaternion.Euler(transform.eulerAngles) * new Vector3(0, Settings.PuzzleShift)) < 0.15f)
                {
                    Connected.Add(GameEngine.Puzzle[X, Y + 1]);
                    GameEngine.Puzzle[X, Y + 1].Connected.Add(this);
                }
            }

            IsRecu = true;
            foreach (Puzzle p in Connected)
            {
                if (!p.IsRecu)
                {
                    p.Connect();
                }
            }
        }
Example #4
0
 public void Connect(Process p, int fromOperationNumber)
 {
     Connected.Add(new ProcessConnected(p, fromOperationNumber));
 }