MATLAB-等高线函数contour以及提取轮廓数据

MATLAB-等高线函数contour以及提取轮廓数据MATLAB-等高线函数contour以及提取轮廓数据

[c,h] = contour(___);  % 返回等高线矩阵c和等高线对象h

c为等高线矩阵,返回为二行多列矩阵。每组中的第1列第1行顶部是等高线层级,第1列第2行是该

等高点的数据个数。组中的后续列是 (x, y) 坐标。第1行为 x 坐标,第2行为 y 坐标。

h为等高线对象,可以设置其属性,例如,线宽,颜色。

MATLAB-等高线函数contour以及提取轮廓数据

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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注