// 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)); }
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(); } }
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(); } } }
public void Connect(Process p, int fromOperationNumber) { Connected.Add(new ProcessConnected(p, fromOperationNumber)); }