Come rappresentare una struttura di dati tridimensionale (o più) in un terminale?

4

Sto lavorando su una libreria che consente la creazione e la manipolazione di Vettori (elenchi con una lunghezza nota), Matrici (elenchi di elenchi con dimensioni note) e ordine tre, quattro ecc. Tensors (liste di liste di liste ... con dimensioni conosciute).

Ora, stampare una struttura dati monodimensionale o bidimensionale sullo schermo è semplice. Ma mi chiedo se ci sia un buon modo per rappresentare una griglia tridimensionale di valori per l'utente per l'ispezione.

Faccio questa domanda qui perché sembra la domanda che un altro programmatore avrebbe affrontato prima di me.

Come rappresentare una griglia dimensionale di tre o più dimensioni in un terminale in modo leggibile?

    
posta Qqwy 07.07.2016 - 22:59
fonte

3 risposte

4

Considerando la solita rappresentazione 2D (esempio con zyx):

000 001 002 003 004
010 011 012 013 014
020 021 022 023 024

potresti prendere in considerazione l'estensione dello schema al 3D, se la 3a dimensione non è troppo profonda (ad esempio 2 o 3):

000 001 002 003 004
  100 101 102 103 104
    200 201 202 203 204
010 011 012 013 014
  110 111 112 113 114
    210 211 212 213 214
020 021 022 023 024
  120 121 122 123 124
    220 221 222 223 224

L'idea è di assicurare che i separatori di colonna della 2a (e se possibile 3a profondità) NON siano ALLINEATI con il separatore di colonna della prima profondità, in modo da rendere visivamente chiaro che non sono le stesse dimensioni.

Il suggerimento di diverse dimensioni verrebbe rinforzato se fosse possibile utilizzare un COLORE diverso per ciascuna profondità. Ad esempio bianco per la prima profondità, verde per la seconda, blu per la terza. Potresti mettere a punto un po 'i colori secondo i tuoi gusti, ma il meglio sarebbe usare uno schema sfumato, passando da colori più chiari o più scuri (per suggerire che più scura è la serie, più profonda è la profondità:

    
risposta data 16.07.2016 - 21:50
fonte
2

Per le tre dimensioni, mostrerei due dimensioni e una profondità. Considera questo 5 tensore profondo

5 (top)
[1, 2, 3
 5, 6, 7] 

Hit + ingrandisce 1

4
[10, 11, 12
 13, 14, 15] 

Colpire - ti riporta in cima, ecc.

Penso che potresti gestire 4 dimensioni aggiungendo il colore. Ma oltre il 4 è abbastanza difficile in una libreria grafica! Ma uno potrebbe mostrare più matrici affiancate:

5 (top)
0,              1,
[1, 2, 3        [9, 8, 9
 5, 6, 7]        7, 7, 7]
    
risposta data 07.07.2016 - 23:12
fonte
2

Ho affrontato questa stessa situazione molti anni fa mentre stavo imparando la programmazione grafica usando Borland C ++ su Windows95. Dovevo conoscere le coordinate dei punti del cubo. Questo è qualcosa di simile a quello che ho fatto e ha funzionato.

Supponendo che l'asse Z si stenda di fronte a te e il piano XY sia rivolto verso di te, Y essendo verticale, ho diviso il cubo in una serie di forme XZ 'L'. Poi ho raddrizzato la 'L' per ottenere una linea retta. L'angolo della 'L' sarebbe un punto Y, mentre tutti i punti X e Z saranno su entrambi i lati. Ho delimitato il punto Y in qualche modo per riconoscere facilmente la struttura. Con questa configurazione, hai praticamente "sbucciato" il cubo, e devi attraversare su e giù, e lontano e vicino per ispezionare tutti i valori. Ho semplicemente stampato da vicino a lontano, dall'alto verso il basso. Il paragrafo dei numeri sembrava molto bello allora, come una sorta di misterioso codice alieno. All'inizio sembra piuttosto tedioso e confuso, ma mi sono subito abituato.

Non l'ho reso interattivo, ma se lo desideri, dovresti bloccarlo e sbloccarne uno e attraversarlo nell'altro modo.

Ho lavorato solo su forme regolari come cubo e tetraedro, quindi non sono sicuro di quanto sarebbe efficace per una patata irregolare o con dimensioni superiori.

    
risposta data 16.07.2016 - 20:43
fonte

Leggi altre domande sui tag