public static double CalcularDesperdicio(List <Stock> listaStocks, List <Rectangulo> listaPiezas) { double area1 = 0; foreach (Rectangulo pieza in listaPiezas) { area1 += pieza.W * pieza.H; } double area2 = 0, area3 = 0, area4 = 0; int i = 1; foreach (Stock stock in listaStocks) { if (stock.Arbol != null) { // Calcular las posiciones absolutas Utilitarios.CalcularPosicionesAbsolutas(stock.Arbol, 0, 0); // Convertirlo a lista List <Rectangulo> listaPiezas_Stock = Utilitarios.ConvertirALista(stock.Arbol); area2 += stock.W * stock.H; area3 += (stock.Arbol.Rect.W + stock.Arbol.Rect.H) * i; foreach (Rectangulo pieza in listaPiezas_Stock) { if (Utilitarios.SeEncuentraEnLista(pieza, stock.ListaDefectos)) { //area1 -= pieza.W * pieza.H; area4 += pieza.W * pieza.H; } } i += 3; //desperdicio += (anchoStock * altoStock - anchoOcupadoPiezas * altoOcupadoPiezas); } } return(5 * (area1 / area2) + 5 * (area1 / area3) - 5 * (area4 / area1)); }
public void Algoritmo2() { foreach (Stock stock in listaStocks) { if (stock.Arbol != null) { // Calcular las posiciones absolutas Utilitarios.CalcularPosicionesAbsolutas(stock.Arbol, 0, 0); // Convertirlo a lista List <Rectangulo> listaPiezas_Stock = Utilitarios.ConvertirALista(stock.Arbol); foreach (Rectangulo pieza in listaPiezas_Stock) { // Si la pieza cae en una región con defecto if (Utilitarios.SeEncuentraEnLista(pieza, stock.ListaDefectos)) { InsertarPiezaEnUnStock(pieza); } } } } }