您的位置首页生活百科

MATLAB如何在两个颜色间产生任意多个过渡色

MATLAB如何在两个颜色间产生任意多个过渡色

的有关信息介绍如下:

MATLAB如何在两个颜色间产生任意多个过渡色

根据两个颜色的RGB或者HSV,得到两者之间的任意多个过渡颜色。

目的:计算[R1, G1, B1]、[R2, G2, B2]两种颜色的N个过渡色

思路:

1.两种[R1, G1, B1]、[R2, G2, B2]颜色对应三维RGB空间中的两个点;

2.两点坐标之差[R2-R1, G2-G1, B2-B1]即为一向量V;

3.通过将向量V分为N-1段,V/(N-1);

4.则颜色[R1, G1, B1]+(i-1)*V/(N-1)表示将两个颜色间分为N个过渡色的第i个颜色;

5.上式当i=1,即为[R1, G1, B1]。当i=N,即为[R2, G2, B2]。

过渡颜色计算子程序如下:

%Matlab codes

%

function ResultColor=Transition_Two_Color(Color1,Color2,N)

%Transition_Two_Color()

% This function is used to calculate the linear transition color between two colors.

% The generated color gradually changes from the first color to the second color.

%Input:

% Color1,

% initial color, 1x3 matrix,RGB or HSV, such as [55,130,189]

% Color2,

% end color, 1x3 matrix,RGB or HSV, such as [235,25,28]

% N,

% positive integer, number of transition,such as 4

%Output:

% ResultColor,

% Nx3 matrix, the first line is the initial color, the last line is the end color

%

%

quiverC1C2=(Color2-Color1)/(N-1);%每一小段的增量

ResultColor=zeros(N,3);%每一行代表一个过渡颜色,第一行代表初始颜色,最后一行代表末端颜色

for i=1:N

ResultColor(i,:)=Color1+quiverC1C2*(i-1);%所有颜色

end

end

实例1:输出不同相位下的sin(x)

%Example 1:

%

clc;

x=1:0.1:20;

phase=[0,0.5*pi,pi,1.5*pi];

Color1=[55,130,189];

Color2=[235,25,28];

ResultColor=Transition_Two_Color(Color1,Color2,length(phase));%Get the transition color

figure;

subplot(1,2,1)%sin

for iPhase=1:length(phase)

y=sin(x+phase(iPhase));

plot(x,y,'linewidth',1.5,'color',ResultColor(iPhase,:)/256);%[R,G,B] in plot.m should convert to range 0 to 1

hold on;

end

legend({'phase=0','phase=0.5*pi','phase=pi','phase=1.5*pi'},'FontName','Times New Roman','Fontsize',16);

set(gca,'linewidth',1.5,'FontName','Times New Roman','FontSize',16);

xlabel('x');ylabel('sin(x+Phase)');

title('sin(x+Phase)');

实例1结果如下图所示。

实例2:输出不同底数的指数函数

%Example 2:

clc;

x=-5:0.1:5;

BaseNum=[-2,-1,1,2];

Color1=[55,130,189];

Color2=[235,25,28];

ResultColor=Transition_Two_Color(Color1,Color2,length(BaseNum));

for iBaseNum=1:length(BaseNum)

y=BaseNum(iBaseNum).^x;

plot(x,y,'linewidth',1.5,'color',ResultColor(iBaseNum,:)/256);%[R,G,B] in plot.m should convert to range 0 to 1

hold on;

end

set(gca,'linewidth',1.5,'FontName','Times New Roman','FontSize',16);

legend({'BaseNum=-2','BaseNum=-1','BaseNum=1','BaseNum=2'},'FontName','Times New Roman','Fontsize',16);

xlabel('x');ylabel('BaseNum\^x');

title('BaseNum\^x');

实例2结果如下图所示。