一维数据插值:vq = interp1(x,v,xq),x,v是样本点和样本点的值,xq是要插入点的坐标
例如:在黑白两个颜色之间实现渐变,A(黑):[0 0 0] ,B(白):[1 1 1](或255 255 255)
代码如下:
clear;clc;
%-----------------Bar画图----------------------------------
%x:x轴上位置坐标 1x12 double
%y:y轴坐标,柱状图高度 1x12 double
%b:存放图的变量,b.CData(1,:)时A点,b.CData(12,:)B点
x = 1:5:60;
y = [10 10 10 10 10 10 10 10 10 10 10 10];
b = bar(x,y);
b.FaceColor = 'flat';
b.CData(1,:) = [0 0 0]; %A点的RGB值
b.CData(12,:) = [1 1 1]; %B点的RGB值
%---------------------------------------------------
%-------------------插值程序--------------------------------
%插值函数:vq = interp1(x,v,xq),默认线性插值,x,v是样本点和样本点的值,xq是要插入点的坐标
%X:样本点的坐标,对应x 1x4 double
%V:样本点的颜色,对应v 4x3 double
%data:临时变量,用来存放AB两点的RGB值的差 1x3 double
%aver:存放(B-A)/3的平均值,分3份,得4个点 1x1 double
%color_interp:插入的RGB数值,对应vq 大小随x变化,x为1x12 double
X = 0:20:60; %取4个样本点
V = zeros(4,3); %给V开设空间,存放4个样本的的R,G,B值
data = b.CData(12,:)-b.CData(1,:);
for i = 1:3
if(data(i)==0) %此时A点和B点的R/G/B的某值相同
V(:,i)=b.CData(1,i);
else %在A点和B点之间平均3份,得到4个点做样本
aver = data(i)./3;
V(:,i) = b.CData(1,i):aver:b.CData(12,i);
end
end
color_interp = interp1(X,V,x);
A = zeros(12,1);
for i = 1:size(A)
b.CData(i,:) = color_interp(i,:);
end
%---------------------------------------------------
运行效果:
Matlab学习推荐:MATLAB教程_台大郭彦甫(14课)