2012-01-11 27 views
8

Tôi có một ma trận, tức là danh sách danh sách không bị rách, và đưa ra một danh sách tọa độ, ví dụ dưới dạng {{0,0},{1,1},{2,2},...{5,5}}, tôi muốn theo dõi một đường dẫn ma trận đó và hiển thị kết quả bằng đồ thị. Một ban nhạc màu cho đường đi là đủ tốt.Làm thế nào để theo dõi một đường dẫn đồ họa trong một ma trận trong toán học

Vui lòng giúp tôi viết chức năng như vậy trong Mathematica. Cảm ơn rất nhiều!

+0

Tôi không biết nếu bạn đã biết, nhưng chúng tôi có một [đề nghị] (http://area51.stackexchange.com/proposals/37304/mathematica? referrer = hWeRiD9Qz0oIDM_9uBjtlA2) để tạo một trang web toán học cụ thể mới trong mạng Stack Exchange. Vui lòng tạo một tài khoản trên Area51 và cam kết đề xuất đó để giúp khởi chạy nó thành bản beta. – abcd

Trả lời

15

Đây là một khả năng.

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

Phác thảo các mục với một ống, như bạn mô tả, là khó khăn hơn. Nó có thể được thực hiện, mặc dù, nếu chúng ta sẵn sàng để bước xuống để đồ họa nguyên thủy.

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; có vẻ như tôi đã trễ 18 phút ngoài việc có một giải pháp xấu xí hơn! (Tôi hoàn toàn quên mất 'MapAt') ... – acl

+0

+1. Trông rất tuyệt. Tôi chỉ tự hỏi nếu tôi thực hiện 'pos = {{1, 1}, {1, 2}, {2, 2}, {2, 3}, {3, 3}, {3, 4}, {3, 5}, {4, 5}, {5, 5}, {5, 4}, {5, 3}}; Lưới [MapAt [ Kiểu [Pane [#, {16, 20}, Căn chỉnh -> Trung tâm], Nền -> Màu vàng] &, IdentityMatrix [10], pos], Spacings -> {0, 0}] 'Tôi có đồ họa rất lộn xộn trong đó khoảng cách là sai lầm. Làm thế nào để sửa chữa nó? –

+0

Ngoài ra, có thể sử dụng một ống giống như (hoặc hộp giống như) điều để đại diện cho con đường đó? Ý tôi là, chỉ vẽ đường viền (như 'EdgeForm') của vùng màu vàng của bạn, hoặc giữ màu, nhưng hiển thị với đường kẻ dày màu đen cho đường viền của vùng. –

8

tôi có thể đã hiểu lầm câu hỏi nhưng đây là những gì tôi nghĩ bạn đã yêu cầu:

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

Một khả năng khác, sử dụng 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}]}] 

nào kết thúc lên tim như thế này:

Mathematica graphics

Các vấn đề liên quan