matlab ribbon,MATLAB streamribbon边缘颜色

如评论中所述,没有简单的方法来照亮色带表面的某些边缘而不是其他边缘.

但是,色带表面只是由边缘上的点定义,因此只需检索这些点并重新组织它们(内联它们)即可获得3D线条的完美坐标.

要获得封闭的配置文件,我们只需要复制配置文件末尾的第一个点.

我把它打包成一个函数,它将返回一组与Ribbon句柄数组大小相同的句柄,并传输你可以发送到内部plot3函数的任何其他参数.因此使用非常简单:

因此使用与问题完全相同的代码(在变量h中检索带状表面句柄数组),添加:

hs = StreamEdges( h , 'k','Linewidth',1 ) ;

将产生:

当然,你总是会发疯并在组中设置你的线属性:

set(hs,'LineWidth',1,'Color','c')

%// or

set(hs,'LineWidth',2,'Color','r','Marker','none')

函数StreamEdges.m的代码:

function hs = StreamEdges(hribbon,varargin)

wasOnHold = ishold ; %// save hold state

hold on

hs = zeros( size(hribbon) ) ; %// initialize output handle array

for ih=1:numel( hribbon ) ;

%// retrieve X, Y, and Z data of each surface

hsurf = handle( hribbon(ih)) ; %// for pre-HG2 (2014a) versions

xx = hsurf.XData ;

yy = hsurf.YData ;

zz = hsurf.ZData ;

%// reoder coordinates to linearise surface profile (edge)

xx = [xx(:,1) ; flipud(xx(:,2)) ; xx(1)] ;

yy = [yy(:,1) ; flipud(yy(:,2)) ; yy(1)] ;

zz = [zz(:,1) ; flipud(zz(:,2)) ; zz(1)] ;

%// return double to stay compatible with pre-HG2

hs(ih) = double( plot3(xx(:),yy(:),zz(:), varargin{:} ) ) ;

end

if ~wasOnHold ; hold off ; end %// restore hold state

hs = handle(hs) ; %// convert "double" handle back to HG2 handles

该功能应该适用于版本pre-HG2(= pre 2014b)或post-HG2.它将返回的句柄数组将采用HG2格式(=真正的句柄,而不仅仅是它们的双重表示).这使您可以访问图形对象上的点表示法,即使对于HG2之前的版本也是如此.如果您对此不满意,只需注释函数的最后一行(或者为了获得旧的句柄样式,您始终可以使用函数hs = double(hs))

目标轴

除了保持状态之外,该函数将表现得像大多数高级绘图函数,这意味着它们将直接转到当前轴(gca),或者如果不存在则创建一个新的.

您可以轻松修改函数以接受轴句柄作为目标,或者只是不加修改,在参数中显式调用它:

hs = StreamEdges( h , 'Parent','target_axes_handle' , 'Color','k','Linewidth',1) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值