2016-10-23 17 views
5

Tôi đang cố gắng tô màu các đoạn của đường cong spline với các giá trị RGB khác nhau. Rất cám ơn @Suever, tôi có phiên bản đang hoạt động:Tăng tốc các đoạn màu của đường cong spline?

x = [0.16;0.15;0.25;0.48;0.67]; 
y = [0.77;0.55;0.39;0.22;0.21]; 
spcv = cscvn([x, y].'); % spline curve 
N = size(x, 1); 
figure; 
hold on; 
for idx = 1:N-2 
    before = get(gca, 'children'); % before plotting this segment 
    fnplt(spcv, spcv.breaks([idx, idx+1]), 2); 
    after = get(gca, 'children'); % after plotting this segment 
    new = setdiff(after, before); 
    set(new, 'Color', [idx/N, 1-idx/N, 0, idx/N]); % set new segment to a specific RGBA color 
end 
hold off; 

Bây giờ tôi đang tìm cách tăng tốc. Có thể không?

+0

Tiêu đề gây hiểu nhầm, vì nút cổ chai nằm trong chức năng phù hợp spline 'fnplt()', không có màu/kết xuất của ô. – Oleg

Trả lời

4

Không có điểm chuẩn rõ ràng trên mỗi giây, nhưng bạn có thể vectơ dễ dàng bằng cách
a. thu thập điểm vẽ và chia chúng thành 'phân đoạn' (ví dụ: sử dụng hàm buffer)
b. thiết lập các 'color' tài sản của trẻ em (nhờ @Suever để chỉ ra this can be done on an array of object handles directly)

%% Get spline curve 
x = [0.16; 0.15; 0.25; 0.48; 0.67]; 
y = [0.77; 0.55; 0.39; 0.22; 0.21]; 
spcv = cscvn ([x, y].'); 

%% Split into segments 
pts = fnplt (spcv); xpts = pts(1,:).'; ypts = pts(2,:).'; 
idx = buffer ([1 : length(xpts)]', 10, 1, 'nodelay'); % 10pt segments 
lastidx=idx(:,end); lastidx(lastidx==0)=[]; idx(:,end)=[]; % correct last segment 

% Plot segments 
plot (xpts(idx), ypts(idx), xpts(lastidx), ypts(lastidx), 'linewidth', 10); 

% Adjust colour and transparency 
Children = flipud (get (gca, 'children')); 
Colours = hsv (size (Children, 1)); % generate from colourmap 
Alphas = linspace (0, 1, length (Children)).'; % for example 
set (Children, {'color'}, num2cell([Colours, Alphas],2)); 

enter image description here

Note: Như cũng chỉ ra trong phần ý kiến ​​(nhờ @ Dev- iL), thiết lập màu sắc thành một tứ giác RGBA theo cách bạn yêu cầu (ví dụ như trái ngược với một bộ ba RGB đơn giản) là một tính năng Matlab mới hơn (cũng như bây giờ, undocumented). Mã này, ví dụ: sẽ không hoạt động trong năm 2013b.

+1

+1; Cảm ơn! Xin lỗi, tôi nên đề cập đến trong trường hợp thực sự của tôi, tôi thực sự cần RGBA thay vì RGB. Tôi không nghĩ rằng 'ColorOrder' có thể xử lý RGBA. Đã cập nhật câu hỏi. –

+0

hm, tôi chắc chắn 99% nói chung rằng thuộc tính 'màu' không thể được đặt thành vectơ 4 phần tử như vậy. –

+1

Không, thực tế nó hoạt động với thuộc tính 'color', như trong' set (new, 'Color', [idx/N, 1-idx/N, 0, idx/N]) '. Chỉ cần thử nghiệm nó trên R2016a. –

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