Interrompe l'iterazione dei duplicati nel ciclo annidato

0

Sto lavorando con una tela JavaScript, e vorrei ricreare un effetto abbastanza comune che ho visto dove le particelle in movimento creano linee tra di loro quando poi si avvicinano l'una all'altra.

Il mio problema è che essenzialmente sto facendo due loop uno dentro l'altro. Si prega di vedere lo pseudo codice:

var particles = [ /* array of particles with x and y values */ ]
for(var i = 0; i < particles.length; i ++){
    for(var j = 0; j < particles.length; j ++){
        // check if j is close to i
        // if so, draw a line between them
    }        
}

Prima di tutto ho scoperto che questo avrebbe ricontrollato una particella contro se stessa. Quindi posso aggiungere:

         if(i == j) continue

Ma in realtà, ho bisogno di un ulteriore caso. Ad esempio, se ho già controllato quando i = 1 e j = 8 , non ho bisogno di controllare quando j = 1 e i = 8

Esiste un metodo comune per semplificare questa procedura di verifica? Sto perdendo un bel po 'di prestazioni con i controlli multipli.

    
posta Djave 09.12.2014 - 13:14
fonte

1 risposta

2

Il solito modo di risparmiare è qui

for(var j = i+1; j < particles.length; j++) {

Ciò risparmia la metà dei confronti nel doppio ciclo ingenuo; e se davvero devi controllare tutte le coppie possibili, non puoi salvare più di quello.

    
risposta data 09.12.2014 - 13:32
fonte

Leggi altre domande sui tag