Tôi nghĩ rằng bạn có thể làm một cái gì đó như thế này (cẩn thận - não biên dịch mã ...)
figure;
patch('faces', edges, 'vertices', points, 'edgecolor', 'b');
axis equal;
đâu edges
phải là ma trận Nx2
của các chỉ mục và points
phải là ma trận tọa độ Mx3
(chuyển vị trí của mảng points
).
Từ kinh nghiệm của tôi, gọi trực tiếp patch
có thể nhanh hơn đáng kể so với các cuộc gọi lặp lại đến plot
.
Để đưa ra một số ý tưởng, thời gian để tạo ra 1.000 đoạn thẳng được tạo ra một cách ngẫu nhiên, sử dụng của tôi MATLAB 7.1 như sau (phải thừa nhận là cũ!):
- Calling
patch
: 0.03 giây.
- Gọi
plot
: 0,5 giây.
EDIT: Một cách để có được những hành xử cạnh màu như bạn muốn (chỉ định một màu duy nhất cho mỗi cạnh) là giới thiệu đỉnh trùng lặp như sau:
này hoạt động xung quanh vấn đề này mà cạnh màu sắc chỉ có thể được xác định gián tiếp thông qua dữ liệu màu đỉnh. Nếu chúng ta chỉ dựa vào các màu đỉnh thì tất cả các cạnh chia sẻ một đỉnh chung có thể kết thúc với màu được gán cho đỉnh đó - hãy xem 'phẳng' edgecolour mô tả here.
%% a "star" shape, so that we can really see what's going on
%% with the edge colours!!
pp = [0,0,0; 1,-1,0; 1,1,0; -1,1,0; -1,-1,0];
ee = [1,2; 1,3; 1,4; 1,5];
%% important - only 1 colour known per edge, not per vertex!!
cc = (1:size(ee,1))';
%% setup a new set of vertices/edges/colours with duplicate vertices
%% so that each edge gets it's correct colour
nnum = 0;
pnew = zeros(2 * size(ee, 1), 3); %% new vertices
enew = zeros(1 * size(ee, 1), 2); %% new edge indices
cnew = zeros(2 * size(ee, 1), 1); %% new edge colours - via vertices
for j = 1 : size(ee, 1)
n1 = ee(j, 1); %% old edge indices
n2 = ee(j, 2);
enew(j, 1) = nnum + 1; %% new edge indicies into pnew
enew(j, 2) = nnum + 2;
pnew(nnum + 1, :) = pp(n1, :); %% create duplicate vertices
pnew(nnum + 2, :) = pp(n2, :);
cnew(nnum + 1) = cc(j); %% map single edge colour onto both vertices
cnew(nnum + 2) = cc(j);
nnum = nnum + 2;
end
%% Draw the set efficiently via patch
tic
figure;
hold on;
patch('faces', enew, 'vertices', pnew, 'facevertexcdata', cnew, ...
'edgecolor', 'flat', 'facecolor', 'none');
plot(pnew(:,1), pnew(:,2), 'b.');
axis equal;
toc
Nó sẽ đẹp hơn nếu MATLAB cho phép bạn trực tiếp xác định dữ liệu cạnh màu - nhưng nó dường như không ủng hộ điều đó ...
Hope this helps.
Cảm ơn! Có cơ hội nào bạn cũng có thể chỉ cho tôi cách tôi có thể gửi một mảng các màu để mỗi cạnh có màu sắc khác nhau không? – olamundo
@noam: Có một vài tùy chọn tô màu khác nhau, tùy thuộc vào những gì bạn muốn. Bạn có thể sử dụng tham số ''facevertexcdata'' để thiết lập các màu được nội suy từ các đỉnh - gõ' edit trimesh' để có được một ý tưởng dọc theo các dòng này. Nếu bạn chỉ muốn một vài màu phẳng (''b', 'k', 'r', vv') tôi đoán bạn có thể phá vỡ các cạnh thành một vài nhóm khác nhau và chọn một màu duy nhất cho mỗi nhóm - tôi giả sử ở đây bạn có nhiều cạnh hơn màu sắc. Có thể có các tùy chọn khác - kiểm tra tài liệu ... –
Tôi thực sự cần phải tô màu từng cạnh với màu khác nhau, nhiều màu (Nói rằng tôi đang hiển thị ứng suất gây ra trên tất cả các dầm hỗ trợ của một số cấu trúc). Vì vậy, tôi cần phải xác định màu sắc của cạnh, không phải bởi đỉnh, và tôi không thể phá vỡ các cạnh thành nhiều nhóm khác nhau vì có rất nhiều màu sắc ... – olamundo