来源
机器人工作空间着色,实现形象的展示。
matlab实现方法
这里介绍两个实现着色的函数,patch, fill
。这两个函数具体使用方法查看帮助。 我使用的是patch。官方帮助文档上有一个示例如下
x = [2 5; 2 5; 8 8];
y = [4 0; 8 2; 4 0];
c = [0; 1];
figure
patch(x,y,c)
我这里主要关注渐变色填充,也就是上面的c
矩阵。他官方示例中只有几个点,看起来不明显,可以把要着色区域划分密集些。下面是我自己的例子。
Z = [
transpose( Pos_2D{1,3} );
transpose( Z_fit );
transpose( fliplr( Pos_2D{end,3} ) );
];
X = [
transpose( Pos_2D{1,2} );
transpose( X_fit );
transpose( fliplr( Pos_2D{end,2}) );
];
C = transpose( linspace(0,1,length(Z)) ); % 设置着色矩阵
patch(Z,X,C);
patch(Z,-1*X,C);
实例中,由于我是对称图形,我先给区域一着色,然后对称给区域二着色。区域一着色顺序已经用手画的箭头表示出来了, 也就是上面代码中 矩阵X与Y的顺序。patch函数会自动把这个区域封闭起来,fill函数需要再输入的矩阵第一个坐标和最后一个坐标相同,即手动封闭区域。
patch函数中的坐标矩阵X,Y要求,它们是列矩阵, 而且这些坐标是可以按顺序连接起来,形成图形。如果做包顺序不对,行程的图形会很乱, 所以代码中使用几个函数把坐标矩阵处理成 列矩阵,可以顺序连接。否则可能变成畸形。
注意
在使用patch时,遇到下面这个图形的现象, 即颜色变化不怎么均匀,其实上面那一幅图也有这个现象,只是不明显罢了。解决了很久也没得到怎么样是一条弧线上颜色完全一样然后水平方向逐级变化。
目前解决办法:
把左右两侧弧线之间的过渡线条(下图红色着色)上的数据密度调大,得到下图样式,自己基本可以接受这样的渐变颜色。