Conversione di numeri casuali in coordinate XY per la rappresentazione grafica

StackOverflow https://stackoverflow.com/questions/2095168

  •  21-09-2019
  •  | 
  •  

Domanda

Il mio professore ci ha dato l'incarico di verificare la differenza di tempi di esecuzione e dimensioni di ricerca utilizzando algoritmi lineari e binari, ed i dati devono essere graficamente.

Ho i metodi di ricerca messo i formati di runtime e array come punti in un ArrayList, che viene poi inviato alla classe GraphResults per la stampa. Ho bisogno di convertire i punti dati in coordinate xy prima. La dimensione di ricerca è l'asse x ed il runtime è l'asse y

Per quanto le dimensioni di ricerca sono fissati come multiplo di 128 e ci sono solo 8 dimensioni, ho usato l'interruttore per il calcolo del valore di x, ma sono alla ricerca di un modo più efficiente per convertire i tempi di esecuzione in coordinate.

In questo momento, sto usando condizionali nidificate con 5 in questo modo:

if (y<=1000) {
    if (y<= 500) { 
        if (y<= 250) {
            newy= yaxis-32; }//equals to 250ms category
        else {
            newy= yaxis-(32*2); }//500ms category
   } 
else if (y<=750) {
    newy= yaxis-(32*3);} //750ms category
else {
    newy= yaxis-(32*4);} //1000ms category
} //end of the 1000ms tests

In questo momento, i numeri che sono più di 5000ms richiedono 7 prove. C'è un modo più efficiente per assegnare un numero basato su un formato numero?

È stato utile?

Soluzione

Mentre si sta cercando di determinare la portata della misura, è possibile dividere l'importo per la dimensione gamma, seguito dal calcolo del numero che si desidera visualizzare nel grafico.

A proposito, nel codice, hai fatto un errore logico, se il valore è y <= 1000 la prima condizione restituisce true, e la seconda per y <= 750 non sarà mai valutato.

Inoltre sembra che maggiore è il campo di valori, minore sarà il punto del grafico. È che come previsto? (1000 -> Ymax - 128 mentre 1 -> Ymax - 32)

Per inciso, se si vuole confrontare i valori a intervalli irregolari, si può anche fare qualcosa di simile a una ricerca di array (pseudo codice):

int[] ranges = new int { 50, 500, 5000, 50000 };

for (int n = 0; n < ranges.length && value > ranges[n]; n++) {
}

int range = n;
int newy = yaxis - range * 32;

Si noti che l'indice di out-of-range agisce come la gamma trovato per un valore che è più grande il più grande valore nella vostra matrice.

Altri suggerimenti

Come su newy = yaxis - 32 * ((y/250)% 8);?

Vorrei riformattare il codice per qualcosa di più simile a questo:

newy = yaxis - 32 * ((y-1)/250 + 1);

In questo modo, si sta calcolando il moltiplicatore anziché scegliere manualmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top