下面是一张图像,显示了一个等高线区域图,其中有感兴趣的区域已经通过使用它们的质心连接起来。我想要实现的是只绘制一定长度的线条。目前,每个点都有一条线被绘制到其他每一点。
C=contourf(K{i});
[Area,Centroid] = Contour2Area(C);
% This converts any entries that are negative into a positive value
% of the same magnitiude
indices{i} = find( Centroid < 0);
Centroid(indices{i})=Centroid(indices{i}) * -1; %set all
% Does the same but for positive (+500)
indices{i} = find( Area > 500);
Area(indices{i})=0;
[sortedAreaVal, sortedAreaInd] = sort(Area, 'descend');
maxAreaVals = sortedAreaVal(1:10)';
maxAreaInd = sortedAreaInd(1:10)';
xc=Centroid(1,:); yc=Centroid(2,:);
hold on; plot(xc,yc,'-');
如果有一种方法只绘制低于特定阈值的线条,那将非常有用。下一步将标记和测量每一行。提前感谢您的时间。
答案 0 :(得分:2)
如果xc
和yc
是质心的x和y坐标,那么你可以这样做:
sqrt(sum(diff([x,y],1).^2,2))
这样做是取连续的[x,y]数据点之间的差异,然后计算它们之间的欧几里德距离。然后,您可以获得所需的所有信息,以选择所需的信息并标记长度。
但有一件事,这只会计算连续质心之间的距离。我是这样写的,因为它似乎是你在上面尝试做的事情。如果您有兴趣找出所有质心之间的距离,则必须循环并计算距离。 有点像:
for i=1:length(xc)-1
for j=i+1:length(xc)
% distance calculation here...
希望这有帮助。