Domanda

Suoni come ho avuto l'idea, ma cant sembra ottenere l'attuazione corretta. eI hanno un cluster (un ArrayList) con più punti, e voglio calcolare la distanza media. Es: Punti in gruppo (A, B, C, D, E, F, ..., n), distanza AB, distanza AC, AD distanza, ... Distanza A, N, distanza (B, C) Distanza ( B, D) ... Distanza (B, N) ...

Grazie in anticipo.

È stato utile?

Soluzione

Non si vuole raddoppiare contare qualsiasi segmento, così il vostro algoritmo dovrebbe essere un doppio ciclo for. Il ciclo esterno va da A a M (non c'è bisogno di controllare N, perché ci sarà più nulla per la connessione a), di volta in volta da loop curPoint a N, calcolando ogni distanza. È possibile aggiungere tutte le distanze, e dividere per il numero di punti (n-1) ^ 2/2. Dovrebbe essere abbastanza semplice.

Non ci sono algoritmi standard per migliorare su questo che io sappia, e questo non è un problema ampiamente studiato. Direi che si potrebbe ottenere una stima abbastanza ragionevole (se una stima è utile) campionando distanze da ogni punto ad una manciata di altri. Ma questa è una supposizione.

(Dopo aver visto il tuo esempio di codice) Ecco un altro tentativo:

public double avgDistanceInCluster() { 
    double totDistance = 0.0; 
    for (int i = 0; i < bigCluster.length - 1; i++) { 
        for (int j = i+1; j < bigCluster.length; j++) { 
            totDistance += distance(bigCluster[i], bigCluster[j]);
        }
    }
    return totDistance / (bigCluster.length * (bigCluster.length - 1)) / 2; 
}

Si noti che il limite per il primo ciclo è diverso. Distanza tra due punti è probabilmente sqrt((x1 - x2)^2 + (y1 -y2)^2).

Altri suggerimenti

Grazie per tutto l'aiuto, a volte dopo aver spiegato la domanda sulla risposta forum appena comparsa per la vostra mente. Questo è quello che finisce per fare.

Ho un gruppo di punto, e ho bisogno di calcolare la distanza media di punti (coppie) nel cluster. Quindi, questo è quello che ho fatto. Sono sicuro che qualcuno sarà disponibile con una risposta migliore in caso affermativo si prega di rilasciare una nota. Grazie in anticipo.

/**
 * Calculate avg distance between points in cluster
 * @return
 */
public double avgDistanceInCluster() {
    double avgDistance = 0.0;
    Stack<Double> holder = new Stack<Double>();
    for (int i = 0; i < cluster.size(); i++) {
        System.out.println(cluster.get(i));
        for (int j = i+1; j < cluster.size(); j++) {
            avgDistance = (cluster.get(i) + cluster.get(j))/2; 
            holder.push(avgDistance);
        }
    }
    Iterator<Double> iter = holder.iterator();
    double avgClusterDist = 0;
    while (iter.hasNext()) {
        avgClusterDist =+ holder.pop();
        System.out.println(avgClusterDist);
    }
    return avgClusterDist/cluster.size();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top