Ho un array di punti non ordinati che chiamo Area di Ricerca. Quello che vorrei fare è estrarre dall'area di ricerca un gruppo di punti adiacenti.
Per verificare quali sono i punti adiacenti uso la funzione trovaAdiacenti(p,area); a cui passo il punto da cui partire e il vettore contenente tutti i punti cioè l'area di ricerca; questa funzione mi ritorna solo i punti che sono vicini al punto dato, tale vicinanza è determinata da una distanza fissa. Come fare per ottenere l'intera regione? Cioè come fare per cercare i punti adiacenti dei punti adiacenti dei punti adiacenti, la struttura che ho in mente mi ricorda un albero non binario e mi suona più ricorsiva che iterativa ma non riesco a implementare una soluzione.
Grazie a tutti in anticipo.
Alcune funzioni che ho creato e che potrebbero tornare utili per una soluzione sono:
removeEqualPoints(vet,toRemove); Confronta due vettori e rimuove dal primo i punti presenti nel secondo (toRemove).
puntoInVet(p,vet); Controlla se il punto dato si trova nel vettore. Ritorna vero o falso.
Riporto un codice che ho realizzato da poco che probabilmente non funziona:
Codice: Seleziona tutto
//findAdia è trovaAdiacenti
function cercaRegione(vet) {
var toVisit = new Array();
let ad = findAdia(vet[0],vet);
var bg = new Array();
bg.push(ad[0]);
toVisit = ad;
let n=0;
while(toVisit.length>1){
for(let i=n;i<bg.length;i++){
ad=findAdia(bg[i],vet);
for(let j=0;j<ad.length;j++){
if(puntoInVet(ad[j],bg)==true){
ad.splice(j,1);
}
}
for(x=0;x<ad.length;x++){
if(puntoInVet(ad[x],toVisit)==false){
toVisit.push(ad[x]);
}
}
if(ad.length>=2){
if(puntoInVet(ad[1],bg)==false){
bg.push(ad[1]);
}
}else{
if(ad.length>0){
if(puntoInVet(ad[0],bg)==false){
bg.push(ad[0]);
}
}
}
}
n++;
toVisit = removeEqualPoint(toVisit,bg);
if(toVisit.length>1){
bg.push(toVisit[0]);
}
}
return bg;
}