Как графически отследить путь в матрице в Mathematica - PullRequest
8 голосов
/ 11 января 2012

У меня есть матрица, т. Е. Не разорванный список списков, и, учитывая список координат, например, в виде {{0,0},{1,1},{2,2},...{5,5}}, я хочу проследить путь в этой матрице и показать результаты графически.Цветная полоса для пути достаточно хороша.

Пожалуйста, помогите мне написать такую ​​функцию в Mathematica .Большое спасибо!

Ответы [ 3 ]

15 голосов
/ 11 января 2012

Вот одна из возможностей.

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

Выделение записей с помощью трубки, как вы описываете, сложнее.Это может быть сделано, если мы хотим перейти к графическим примитивам.

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

10 голосов
/ 11 января 2012

Другая возможность, используя 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}]}]

Что в итоге выглядит следующим образом:

Mathematica graphics

8 голосов
/ 11 января 2012

Я, возможно, неправильно понял вопрос, но я подумал, что вы просили:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...