[c,h] = contour(___); % 返回等高线矩阵c和等高线对象h
c为等高线矩阵,返回为二行多列矩阵。每组中的第1列第1行顶部是等高线层级,第1列第2行是该
等高点的数据个数。组中的后续列是 (x, y) 坐标。第1行为 x 坐标,第2行为 y 坐标。
h为等高线对象,可以设置其属性,例如,线宽,颜色。
clabel(c,h,'fontsize',14);
此函数为等高线上显示其对应的数值。
[c,h] = contourf(___); % 返回等高线矩阵c和等高线对象h
contourf与contour的唯一区别就是contourf的等高线图形使填充的。
如何从矩阵c中分离处数据?
函数如下:调用即可
function s=contourdata(c)
if nargin<1 || ~isfloat(c) || size(c,1)~=2 || size(c,2)<4
error('CONTOURDATA:rhs',...
'Input Must be the 2-by-N Contour Matrix C.')
end
tol=1e-12;
k=1; %记录有几条等高线
col=1; %第几列
while col<size(c,2); % while less than total columns in c
s(k).level = c(1,col);
s(k).number = c(2,col);
idx=col+1:col+c(2,col);%例如2:16
s(k).x = c(1,idx);
s(k).y= c(2,idx);
s(k).isopen = abs( diff( c(1,idx([1 end])) ) ) >tol || ... %或
abs( diff( c(2,idx([1 end])) ) ) >tol ; %diff差分函数 计算首位数值是否相同
k=k+1;%等高线条数+1
col=col+c(2,col)+1;
end
s(k)为结构体,包含以下:
s(k).level :第 k 行的等高线层级;s(k).number: 第 k 条线的坐标个数;
s(k).x: 第 k 行的 x 轴数据。 s(k).y:第 k 行的 y 轴数据。
s(k).isopen :如果第 k 个轮廓是开放的,则为1,如果是封闭的,则为0。
疑惑1:
当一条等高线的数据较多时,contour函数会将一条等高线分段处理,而且不是按顺序排列的。例如:分成2段,但是第2段拼接在第1段前面才是一个按顺序排列的完整的数据轮廓。我仿真时碰到过分成2、3、5段的,虽然可以根据规律将它们拼接在一起,但是觉得不具备普遍性。
疑惑2:
也可能出现分段中的其中一段的数据不是按顺序排列的,如x坐标:3,2,1,0,-1,-2,-3。此时需要将坐标数据反向处理。
疑惑3:
不知道这个函数提出的数据精度怎么样,因为我是用来提出隐函数的等高线的坐标数据的,所以需要知道其精度。网上没有关于这个讨论。不知道有没有大佬了解这个问题。
如果有人遇到了和我一样的问题,请留言进行讨论吧!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37459.html