2012-01-11 3 views
8

Ho una matrice, cioè un elenco di liste non irregolare, e dato un elenco di coordinate, ad esempio in forma di {{0,0},{1,1},{2,2},...{5,5}}, voglio tracciare un percorso in quella matrice e mostra graficamente i risultati. Una banda colorata per il percorso è abbastanza buona.Come tracciare un tracciato graficamente in una matrice in matematica

Per favore aiutami a scrivere tale funzione in Mathematica. Molte grazie!

+0

Non so se siete a conoscenza, ma abbiamo una [proposta] (http://area51.stackexchange.com/proposals/37304/mathematica? referrer = hWeRiD9Qz0oIDM_9uBjtlA2) per creare un nuovo sito specifico mathematica nella rete Stack Exchange. Si prega di creare un account su Area51 e impegnarsi a tale proposta per aiutarlo a lanciarlo in beta. – abcd

risposta

15

Ecco una possibilità.

pos = {{1, 1}, {1, 2}, {2, 2}, {3, 3}, 
    {3, 4}, {3, 5}, {4, 5}, {5, 5}}; 
mat = HankelMatrix[8]; 
display = Map[Pane[#,{16,20},Alignment->Center]&, mat, {2}]; 
display = MapAt[Style[#, Background -> Yellow]&, display, pos]; 
Grid[display, Spacings->{0,0}] 

enter image description here

Delineando le voci con un tubo, come lei, è più difficile. Può essere fatto, però, se siamo disposti a scendere ai primitivi grafici.

mat = IdentityMatrix[8]; 
pos = {{1, 1}, {1, 2}, {2, 2}, {3, 3}, 
    {3, 4}, {3, 5}, {4, 5}, {5, 5}}; 
pos = Map[{#[[1]], -#[[2]]} &, pos]; 
outline = {CapForm["Round"], JoinForm["Round"], 
    {AbsoluteThickness[30], Line[pos]}, 
    {AbsoluteThickness[28], White, Line[pos]}}; 
disks = Table[{Darker[Yellow, 0.07], Disk[p, 0.25]}, 
    {p, pos}]; 
numbers = MapIndexed[Style[Text[#, {#2[[1]], -#2[[2]]}, 
    {-0.2, 0.2}], FontSize -> 12] &, mat, {2}]; 
Graphics[{outline, disks, numbers}, ImageSize -> 300] 

enter image description here

+0

+1; sembra che sia stato in ritardo di 18 minuti oltre ad avere una soluzione più brutta! (Ho completamente dimenticato 'MapAt') ... – acl

+0

+1. Sembra fantastico. Mi sto solo chiedendo se faccio 'pos = {{1, 1}, {1, 2}, {2, 2}, {2, 3}, {3, 3}, {3, 4}, {3, 5}, {4, 5}, {5, 5}, {5, 4}, {5, 3}}; Grid [MapAt [ Stile [Riquadro [#, {16, 20}, Allineamento -> Centro], Sfondo -> Giallo] &, IdentityMatrix [10], pos], Spaziature -> {0, 0}] 'Ho una grafica molto disordinata in quanto la spaziatura è incasinata. Come sistemarlo? –

+0

inoltre, è possibile utilizzare una cosa simile a una valvola (o una scatola) per rappresentare quel percorso? Voglio dire, disegnare solo il contorno (come 'EdgeForm') di quale sia la tua regione gialla, o mantenere il colore, ma mostrare con una linea spessa nera per il contorno della regione. –

8

forse ho capito male la domanda, ma questo è quello che ho pensato che stavi chiedendo:

coords = Join @@ Array[List, {3, 4}] 
{{1, 1}, {1, 2}, {1, 3}, {1, 4}, {2, 1}, {2, 2}, {2, 3}, {2, 4}, {3, 
    1}, {3, 2}, {3, 3}, {3, 4}} 

path = RandomSample[coords, Length[coords]] 
{{1, 2}, {3, 3}, {2, 2}, {2, 4}, {3, 1}, {1, 4}, {1, 3}, {2, 1}, {3, 
    4}, {3, 2}, {2, 3}, {1, 1}} 

labels = Text[StyleForm[#], #] & /@ coords; 


Graphics[Line[path], Epilog -> labels] 

enter image description here

10

Un'altra possibilità, utilizzando ItemStyle:

m = RandomInteger[10, {10, 10}]; 
c = {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {5, 6}, {5, 7}, {4, 8}}; 
Grid[m, ItemStyle -> {Automatic, Automatic, Table[i -> {16, Red}, {i, c}]}] 

che finisce per assomigliare a questo:

Mathematica graphics