2012-01-11 11 views
8

Tengo una matriz, es decir, una lista no desigual de listas, y dado una lista de coordenadas, por ejemplo en forma de {{0,0},{1,1},{2,2},...{5,5}}, quiero rastrear un camino en esa matriz y muestra los resultados gráficamente. Una banda de color para el camino es lo suficientemente buena.Cómo rastrear una ruta gráficamente en una matriz en mathematica

Ayúdenme a escribir esa función en Mathematica. ¡Muchas gracias!

+0

No sé si eres consciente, pero tenemos un [propuesta] (http://area51.stackexchange.com/proposals/37304/mathematica? referrer = hWeRiD9Qz0oIDM_9uBjtlA2) para crear un nuevo sitio matemático específico en la red Stack Exchange. Cree una cuenta en Area51 y comprométase con esa propuesta para ayudar a iniciarla en versión beta. – abcd

Respuesta

15

Aquí hay una posibilidad.

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

esbozo de las distintas entradas con un tubo, como usted la describe, es más difícil. Sin embargo, se puede hacer si estamos dispuestos a bajar a las primitivas gráficas.

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; ¡parece que tenía 18 minutos de retraso además de tener una solución más fea! (Me olvidé por completo de 'MapAt') ... – acl

+0

+1. Se ve muy bien. Me pregunto si hago 'pos = {{1, 1}, {1, 2}, {2, 2}, {2, 3}, {3, 3}, {3, 4}, {3, 5}, {4, 5}, {5, 5}, {5, 4}, {5, 3}}; Cuadrícula [MapAt [ Estilo [Panel [#, {16, 20}, Alineación -> Centro], Fondo -> Amarillo] &, IdentityMatrix [10], pos], Espaciado -> {0, 0}] 'Tengo gráficos muy desordenados porque el espaciado está mal. ¿Como arreglarlo? –

+0

también, ¿es posible usar una cosa similar a un tubo (o una caja) para representar ese camino? Quiero decir, solo dibuje el contorno (como 'EdgeForm') de su región amarilla, o mantenga el color, pero muestre con una línea gruesa negra el contorno de la región. –

8

que puede haber entendido mal la pregunta, pero esto es lo que yo pensaba que estabas preguntando por:

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

Otra posibilidad, por 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}]}] 

que termina pareciéndose a esto:

Mathematica graphics

Cuestiones relacionadas