问题
我假设每个人都知道这个问题,忘了关闭一个支架,或者只是觉得总是打开一个开括号( [ {然后再手动关闭它会很烦人)]}.
因此,这可能是一个问题:
是否有一个技巧可以立即打开支架的打开和关闭部分,这样你就可以简单地在中间书写?我知道这可以在notepad ++中使用,但我更喜欢在matlab编辑器中编写,而不是必须在窗口之间切换,以测试我的部分代码.
我想有一个简单的解决方案,但我无法在网上找到任何东西,我认为这可能是一个有趣的问题,不仅仅适合我!
编辑
发布服务请求后,很明显没有可能达到matlab R2016a.它可能会在未来的matlab版本中考虑,所以我们可以期待最好的.
问题:
我有一个三维点云,每个块的质心代表一个块.为简单起见,这个例子只是二维的.如图所示,我想根据参数包含感兴趣的块.在这种情况下块1,6,5,4.为了进一步处理它们,我需要通过使用alpha形状或凸包来找到它们周围最小的船体.我有每个质心的坐标,我知道块扩展,所以我可以通过以下方式轻松找到块的边缘点:
xdimension=5;
ydimension=5;
block1=[5 15 1];
block2=[5 10 0];
block3=[5 5 0];
block4=[10 5 1];
block5=[10 10 1];
block6=[10 15 1];
block7=[15 5 0];
block8=[15 10 0];
block9=[15 15 0];
blocks=[block1;block2;block3;block4;block5;block6;block7;block8;block9]
dimension=[xdimension/2 ydimension/2];
point1=[1 1].*dimension;
point2=[1 -1].*dimension;
point3=[-1 1].*dimension;
point4=[-1 -1].*dimension;
i=size(blocks,1);
point1=repmat(point1,i,1);
point2=repmat(point2,i,1);
point3=repmat(point3,i,1);
point4=repmat(point4,i,1);
edges1=[blocks(:,1:2)+point1, blocks(:,3)] ;
edges2=[blocks(:,1:2)+point2, blocks(:,3)];
edges3=[blocks(:,1:2)+point3, blocks(:,3)];
edges4=[blocks(:,1:2)+point4, blocks(:,3)];
edges=[edges1;edges2;edges3;edges4];
x=edges(edges(:,3)==1,1);
y=edges(edges(:,3)==1,2);
K=convhull(x,y)
scatter(edges(:,1), edges(:,2))
hold on
plot(x(K),y(K),'r-')
hold off
Run Code Online (Sandbox Code Playgroud)
这会产生类似于此处的图片.
题
如何查询第2和第3块凸包所包含的曲面(或我的实际问题中的体积)?我需要包含的每个单独块的精确表面/体积,除了我指定的那些(这里有二进制指示器).请注意,这是一个示例,我正在寻找如何独立于示例的想法.我真的很感激一些帮助,因为我主要陷入困境,我不知道如何解决它.
问题
我正在生成一个条形图,并希望显示条形本身上方每个条形的高度(Ydata)。因此,对于下面的图片为例,我希望在图表上方有标签。我找不到解决方案。供您参考,我使用的是 Matlab R2016a。
代码
目前我正在使用以下代码来创建我的图表。
x={ '-5-0' '0-5' '5-10' '10-15' '15-20' '20-25' '25-30' '30-35' '35-40' '40-45' '45-50' '50-55'};
before= [0 27 28 18 9 6 5 3 2 1 1 0]
after= [27 28 18 9 6 5 3 2 1 1 0 0]
y=[before',after']
h=figure;
hold on
yyaxis left
l1=bar([1:12],y,'grouped');
hYLabel=ylabel('Tonnage [%]');
yyaxis right
hylabel=ylabel('Tonnage [%]');
l1(1).FaceColor = [ 0 0.447 0.7410];
l1(1).EdgeColor = [ 0 0.447 0.7410];
l1(2).FaceColor =[0.85 0.325 0.098]
l1(2).EdgeColor =[0.85 0.325 0.098]
hTitle=title('Test');
hXLabel …Run Code Online (Sandbox Code Playgroud) 我有一个多线的情节,我想在框下面显示图例(southoutside).问题是目前我的传奇太长了,无法放在一条线上.因此问题是我如何在传奇中获得换行符?
目前我生成的图例如下:
hLegend = legend([l1,l2,l3,l4], 'This is a very, very long legend text', 'Test2', ...
'A bit longer', 'This is quite long');
set(hLegend,'Fontsize',8,'Location', 'southoutside', 'Orientation','horizontal');
Run Code Online (Sandbox Code Playgroud)
那么这会发生:
如你所见,我有四行(可能会有更多),第一行有一个很长的名字.
我希望以这种方式保持方向以减少所需的图形空间,并且如果图例超出图片宽度(即之前l3或l4此处用黄色或紫色线表示),我想要设置自动换行符.
有什么想法吗?我使用的宽度为15.75厘米.
编辑
非常感谢到目前为止的答案.虽然这两个答案都提供了将图例分成两行的机会,但我的主要问题仍然存在.如果假设现在,该地块有更多然后四行,可以说20,我想有传说南边,它使用最小的空间的方式水平,是有办法不拆的传说中的一个图例文本,但后一个条目.我生成了一个新的数字,通常描绘了我正在寻找的东西(它在Paint中制作,因此它只是显示了一般的想法).
编辑2
columnlegend遗憾的是,Matlab文件交换中可用的包不支持图中的图例(至少说明中没有指定选项,它只列出以下可能的位置:'NorthWest','NorthEast','SouthEast','SouthWest "
感谢帮助.
问题
有没有一种聪明的方法来添加不具有相同列长度的数组/向量,只需将零添加到太短的列中?我有包含多个变量的加法/减法.
以便:
a=[ 1; 2; 3]; b=[1;5]
a+b=[2; 5; 3]
Run Code Online (Sandbox Code Playgroud)
要么:
a-b=[0;-3;3]
Run Code Online (Sandbox Code Playgroud)
代替:
使用+ Matrix尺寸时出错必须同意.
我做了什么
b(numel(a),1) = 0;
Run Code Online (Sandbox Code Playgroud)
如果添加一些变量,这样可以正常工作,但是在重复多个变量时会非常烦人,特别是如果您不知道哪个变量最长.因此,问题是否有更容易的快速方法来添加不同的列长度.
编辑
问题实际上是,如果有一种方法可以自动执行此操作,而不仅仅是"只需几个"变量.