Last active
September 9, 2018 22:16
-
-
Save TommasoBelluzzo/067f3f781916bfa76f5551c7a0500fc7 to your computer and use it in GitHub Desktop.
A script for creating color maps with multiple gradients.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% [INPUT] | |
% c1 = A vector of three floats [0,1] representing the first RGB color. | |
% c2 = A vector of three floats [0,1] representing the second RGB color. | |
% c3 = A vector of three floats [0,1] representing the third RGB color. | |
% n1 = An integer [0,512] representing the span of the first gradient (c1 and c2). | |
% n2 = An integer [0,512] representing the span of the second gradient (c2 and c3). | |
% | |
% [OUTPUT] | |
% cmap = An (n1+n2)-by-3 matrix of floats representing the colormap. | |
% [NOTES] | |
% Setting n1 or n2 to 0 produces a colormap with a single gradient. | |
function cmap = create_colormap(varargin) | |
persistent p; | |
if (isempty(p)) | |
p = inputParser(); | |
p.addRequired('c1',@(x)validateattributes(x,{'double','single'},{'vector','numel',3,'real','finite','>=',0,'<=',1})); | |
p.addRequired('c2',@(x)validateattributes(x,{'double','single'},{'vector','numel',3,'real','finite','>=',0,'<=',1})); | |
p.addRequired('c3',@(x)validateattributes(x,{'double','single'},{'vector','numel',3,'real','finite','>=',0,'<=',1})); | |
p.addRequired('n1',@(x)validateattributes(x,{'numeric'},{'scalar','integer','real','finite','>=',0,'<=',512})); | |
p.addRequired('n2',@(x)validateattributes(x,{'numeric'},{'scalar','integer','real','finite','>=',0,'<=',512})); | |
end | |
p.parse(varargin{:}); | |
res = p.Results; | |
cmap = create_colormap_internal(res.c1,res.c2,res.c3,res.n1,res.n2); | |
end | |
function cmap = create_colormap_internal(c1,c2,c3,n1,n2) | |
c2_r = c2(1); | |
c2_g = c2(2); | |
c2_b = c2(3); | |
cmap = [linspace(c1(1),c2_r,n1); linspace(c1(2),c2_g,n1); linspace(c1(3),c2_b,n1)]; | |
cmap(:,end+1:end+n2) = [linspace(c2_r,c3(1),n2); linspace(c2_g,c3(2),n2); linspace(c2_b,c3(3),n2)]; | |
cmap = cmap'; | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment