21/02/23 15:33
Thejuster
Salve ragazzi,
Stavolta sono io a chiedere dei consigli o pareri sul da farsi.
Credo che avere più consigli da diversi fronti che provare a fare tutto da soli sia meglio.
Quello che sto cercando di fare ù un algoritmo di packing.
Ma non il solito e classico algoritmo. quello è abbastanza semplice da realizzare e ci sono in giro
diversi sorgenti al riguardo.
Ma quello che cerco di fare io è un tantino diverso.
Si tratta di sfruttare al meglio possibile l'area di lavoro per avere meno scarto possibile.
Uno dei miglior prodotti in circolazione è Optima ( Ma costa anche 10.000€ )
Cosa fà in pratica?
optimaiberica.es/wp-content/gallery/opty-way/…
Guardate esempio la prima parte in alto in a sinistra, ha dei ricavi bianci sopra e a destra.
Ciò significa che quei ricavi bianchi sono scarti quindi materiale inutilizzabile.
Ma sotto se vedete, ha attaccato due rettangoli senza scarto.
Quello che fà in pratica e accostare più quadrati / rettangoli possibili e in casi estremi, aggiungere gli scarti laterlamente.
Unica regola da rispettare, e il taglio verticale o orizzontale.
Non può fermarsi creando una sorta di Zig-zag ma deve essere una linea retta per tutta l'area.
ora che sia in orizzontale o in verticale l'importante è dover allineare tutti i rettangoli in modo da ottenere un taglio verticale o orizzontale netto.
come esempio in quest'altra screen
se notate bene, ogni porzione è ritagliata da un'unica retta
optimaiberica.es/wp-content/uploads/2015/09/…
Un classico bin-packing non va bene, e non funzionerebbe al mio caso perché il bin packing fa in modo di accostare rettangoli e quadrati senza badare alla retta obbligatoria che a me serve.
Avevo pensanto di agire in questo modo.
Poniamo caso di aggiungere alcuni elementi
Fatto questo, da qui in poi sto pensando a come potrei agire.
Ovvero, prendere la misura più grande disponibile e poi via via sempre a quella più piccola tipo
facendo così ottengo la lista dalla largheza piu largha a stringere via via.
Il problema ora è appunto come potrei posizionarli?
ho dato ovviamente a tutti i rect X e Y = 0 non sapendo dove piazziarli.
Escludo a priori il processo per-pixel (calcolo o verifica per pixel )
Estremamente lento già con il paking su 320 x 240 pixel figuramoci su 3200 x 2400
Consigli su come potrei agire?
So che è abbastanza complicato da ricreare un qualcosa genere.
Non pretendo di fare lo stesso algoritmo, ma avviciniarmi per un uso privato.
Stavolta sono io a chiedere dei consigli o pareri sul da farsi.
Credo che avere più consigli da diversi fronti che provare a fare tutto da soli sia meglio.
Quello che sto cercando di fare ù un algoritmo di packing.
Ma non il solito e classico algoritmo. quello è abbastanza semplice da realizzare e ci sono in giro
diversi sorgenti al riguardo.
Ma quello che cerco di fare io è un tantino diverso.
Si tratta di sfruttare al meglio possibile l'area di lavoro per avere meno scarto possibile.
Uno dei miglior prodotti in circolazione è Optima ( Ma costa anche 10.000€ )
Cosa fà in pratica?
optimaiberica.es/wp-content/gallery/opty-way/…
Guardate esempio la prima parte in alto in a sinistra, ha dei ricavi bianci sopra e a destra.
Ciò significa che quei ricavi bianchi sono scarti quindi materiale inutilizzabile.
Ma sotto se vedete, ha attaccato due rettangoli senza scarto.
Quello che fà in pratica e accostare più quadrati / rettangoli possibili e in casi estremi, aggiungere gli scarti laterlamente.
Unica regola da rispettare, e il taglio verticale o orizzontale.
Non può fermarsi creando una sorta di Zig-zag ma deve essere una linea retta per tutta l'area.
ora che sia in orizzontale o in verticale l'importante è dover allineare tutti i rettangoli in modo da ottenere un taglio verticale o orizzontale netto.
come esempio in quest'altra screen
se notate bene, ogni porzione è ritagliata da un'unica retta
optimaiberica.es/wp-content/uploads/2015/09/…
Un classico bin-packing non va bene, e non funzionerebbe al mio caso perché il bin packing fa in modo di accostare rettangoli e quadrati senza badare alla retta obbligatoria che a me serve.
Avevo pensanto di agire in questo modo.
//area globale ^m2 int area_w = 3210; int area_h = 2400; struct data { int w; //larghezza int h; //altezza int qta; //quantità } List<data> Data = new List<data>();
Poniamo caso di aggiungere alcuni elementi
Data.Add(new data() { w = 1400, h = 320, qta = 1}); //misure invertite H al posto di W Data.Add(new data() { w = 370, h = 1750, qta = 1}); //misura normale Data.Add(new data() { w = 470, h = 135, qta = 1}); //normale
Fatto questo, da qui in poi sto pensando a come potrei agire.
Ovvero, prendere la misura più grande disponibile e poi via via sempre a quella più piccola tipo
//Primo risultato var res = Data.OrderBy( x => x.w).Reverse();
facendo così ottengo la lista dalla largheza piu largha a stringere via via.
Il problema ora è appunto come potrei posizionarli?
ho dato ovviamente a tutti i rect X e Y = 0 non sapendo dove piazziarli.
Escludo a priori il processo per-pixel (calcolo o verifica per pixel )
Estremamente lento già con il paking su 320 x 240 pixel figuramoci su 3200 x 2400
Consigli su come potrei agire?
So che è abbastanza complicato da ricreare un qualcosa genere.
Non pretendo di fare lo stesso algoritmo, ma avviciniarmi per un uso privato.
Ultima modifica effettuata da Thejuster 21/02/23 15:40
mire.forumfree.it/ - Mire Engine
C# UI Designer
C# UI Designer