如图所示,我正在使用mArrow3功能来显示平面的方向。 但是,有时任何飞镖都表现得很奇怪。
我正在使用的代码:
drawnow;
xExt = abs(diff(get(gca, 'XLim')));
yExt = abs(diff(get(gca, 'YLim')));
zExt = abs(diff(get(gca, 'ZLim')));
mArrow3([0 0 0],[xExt / 1, 0, 0], 'lineWidth', 2,'color','red','facealpha', 0.1);
mArrow3([0 0 0],[0, yExt / 1, 0], 'lineWidth', 2,'color','red','facealpha',0.1);
mArrow3([0 0 0],[0, 0, zExt / 1], 'lineWidth', 2,'color','red','facealpha',0.1);
text(xExt, 0, 0, 'Vx','FontSize',12);
text(0, yExt, 0, 'Vy','FontSize',12);
text(0, 0, zExt, 'Vz','FontSize',12);
你能否就这个问题给我任何暗示?
答案 0 :(得分:1)
根据mArrow3
(MATLAB FEX)的内联文档,控制线条外观的三个属性是:
% properties: 'color': color according to MATLAB specification
% (see MATLAB help item 'ColorSpec')
% 'stemWidth': width of the line
% 'tipWidth': width of the cone
如您所见,'lineWidth'
不是其中一种选择。要理解为什么看到上述行为,可以查看函数定义,看看如果函数调用中没有传递这些值会发生什么:
%% default parameters
if ~exist('stemWidth','var')
ax = axis;
if numel(ax)==4
stemWidth = norm(ax([2 4])-ax([1 3]))/300;
elseif numel(ax)==6
stemWidth = norm(ax([2 4 6])-ax([1 3 5]))/300;
end
end
if ~exist('tipWidth','var')
tipWidth = 3*stemWidth;
end
如您所见,如果未提供stemWidth
和tipWidth
,则mArrow3
会根据轴限制和stemWidth
对其值进行标准化。
那为什么不抛出错误呢?如果您进一步查看函数定义,可以查看错误检查:
%% draw
fv.faces = f;
fv.vertices = v;
h = patch(fv);
for propno = 1:numel(propertyNames)
try
set(h,propertyNames{propno},propertyValues{propno});
catch
disp(lasterr)
end
end
这样做是使用try/catch block至set您传递的属性不是'color'
,'stemWidth'
或'tipWidth'
。如果它们不是patch
对象的有效属性,set
将抛出一个错误,该错误被捕获并显示以防止函数完全错误输出。如果您查看Patch
properties,则会看到'lineWidth'
is a valid property,因此set
不会出错。但是,它控制了补丁边缘的宽度,我猜测它不是你想要调整的属性。