2012-03-26 11 views
7

Attualmente sto cercando di implementare un algoritmo di treemap in Javascript. Più in particolare l'algoritmo descritto in Squarified Treemaps. Il codice pseudo dato è simile al seguente:Implementazione di una mappa di tre dimensioni in javascript

procedure squarify(list of real children, list of real row, real w) 
begin 
    real c = head(children); 
    if worst(row, w) <= worst(row++[c], w) then 
     squarify(tail(children),row++[c], w) 
    else 
     layoutrow(row); 
     squarify(children,[], width()); 
    fi 
end 

comunque la mia JavaScript assomiglia:

var c = children[0]; 
if (worst(row, w) >= worst(row.concat(c), w)) { 
    this.squarify(children.splice(1), row.concat(c), w); 
} else { 
    layoutrow(row); 
    this.squarify(children, [], width()); 
} 

Per quanto posso dire il mio codice funziona correttamente, ma la disuguaglianza è il modo sbagliato. Presumo che sto trascurando qualcosa nella mia implementazione, o la disuguaglianza è il modo sbagliato nello pseudo codice? Grazie

+0

Forse il difetto è nella tua implementazione di 'worst()'. – gilly3

+3

Grazie per il feedback. Ho guardato abbastanza da vicino la mia implementazione del peggio e, per quanto posso dire, restituisce correttamente il peggior rapporto. È interessante notare che un [post di blog] (http://jectbd.com/?p=271) sembra avere l'ineguaglianza nell'altro modo, quindi sto iniziando a sospettare che lo pseudocodice non sia corretto. – user414310

+0

Spiacente, dovrei aver letto il post sul blog, non solo il codice. Sembra davvero che la disuguaglianza sia il modo sbagliato. – user414310

risposta

4

si desidera aggiungere c alla corrente row quando farlo migliorerà l'cioè rapporto di aspetto quando

worst(row++[c], w) < worst(row, w) 

Recentemente ho commesso un pezzo di codice su GitHub che implementa l'algoritmo a macchina e comprende pronto per l'uso JavaScript:

https://github.com/nicnguyen/treemap

0

Se siete interessati solo l'algoritmo di layout, controllare il mio pacchetto squarify NPM. Restituisce solo i dati del layout, lasciandoti libero di rendere il risultato come desideri.

Problemi correlati