public void ChooseEdge(Point bait) { List <Arista> list_temp = new List <Arista>(); Arista edge_temp = actualVertex.eL[0]; double angleBait = CalculateAngleBait(bait); double angleEdge; double angleMin = 360; foreach (Arista e in actualVertex.eL) { if (e.Destino.findRastrosById(id) <= edge_temp.Destino.findRastrosById(id)) { edge_temp = e; } } list_temp.Add(edge_temp); foreach (Arista e in actualVertex.eL) { if (edge_temp.Destino.findRastrosById(id) == e.Destino.findRastrosById(id)) { list_temp.Add(e); } } foreach (Arista e in list_temp) { angleEdge = CalculateAngleVertex(e.Destino); if ((angleEdge > angleBait ? angleEdge : angleBait) - (angleEdge < angleBait ? angleEdge : angleBait) >= 180) { if ((angleEdge > angleBait ? angleEdge : angleBait) - (angleEdge < angleBait ? angleEdge : angleBait) < angleMin) { angleMin = Math.Min(angleEdge, angleBait) + Math.Abs(Math.Max(angleEdge, angleBait) - 360); actualEdge = e; } } else if ((angleEdge > angleBait ? angleEdge : angleBait) - (angleEdge < angleBait ? angleEdge : angleBait) < angleMin) { angleMin = Math.Max(angleEdge, angleBait) - Math.Min(angleEdge, angleBait); actualEdge = e; } } actualVertex = null; }
public void Walk(Point bait) { if (actualVertex != null) { ChooseEdge(bait); } if (walkingIndex + vel < actualEdge.linea.Count) { walkingIndex += vel; } else { actualVertex = actualEdge.Destino; actualVertex.flag.Add(id); walkingIndex = 0; actualEdge = null; } }
public void addArista(Vertice Destino, Vertice Origen, List<Point> linea) { Arista e = new Arista(Destino, Origen, linea); eL.Add(e); }