当前位置:  开发笔记 > 编程语言 > 正文

如何从Isolines生成三维表面?

如何解决《如何从Isolines生成三维表面?》经验,为你挑选了1个好方法。

我有一组等值点(或等高点),如下所示:

alt text http://www.rcad.eu/triang&isolines%20example1.jpg

等值线上的每个点都有各自的X,Y和Z坐标.由于它们是等值线,这意味着每个点将具有唯一的XY对,但同一条线上的点将具有相同的Z坐标.

现在,是否有任何算法或任何软件包(在C#或C++或MATLAB中)可用于将等值线点插入完整的三维表面?

P/S:我不仅对最终输出感兴趣,我对获取插值曲面数据感兴趣,以便我可以自己绘制曲面.

编辑:C++解决方案也受到欢迎.



1> gnovice..:

在MATLAB中,您可以使用函数griddataTriScatteredInterp类(注意:从R2013a开始scatteredInterpolant是推荐的替代方案).这两种方法都允许您将规则间隔数据的表面拟合到一组非均匀间隔点(尽管griddata在较新的MATLAB版本中不再推荐使用).以下是每种方法的使用方法:

griddata:

[XI,YI,ZI] = griddata(x,y,z,XI,YI)

其中x,y,z每个代表每个点的笛卡尔坐标向量(在这种情况下是轮廓线上的点).行向量XI和列向量YI是笛卡尔坐标,其中griddata插入ZI拟合曲面的值.为矩阵返回的新值XI,YI是相同的传递的结果XI,YImeshgrid创建点的均匀网格.

TriScatteredInterp 类:

[XI,YI] = meshgrid(...);
F = TriScatteredInterp(x(:),y(:),z(:));
ZI = F(XI,YI);

其中x,y,z再次表示每个点的笛卡尔坐标向量,只是这次我使用冒号整形操作 (:)来确保每个都是列向量(所需的格式TriScatteredInterp).F然后使用XI,YI您必须使用的矩阵评估插值meshgrid.

示例和比较

下面是一些示例代码及其生成的结果图,用于使用上述两种方法从轮廓数据重建曲面.使用以下contour函数生成轮廓数据:

% First plot:

subplot(2,2,1);
[X,Y,Z] = peaks;  % Create a surface
surf(X,Y,Z);
axis([-3 3 -3 3 -8 9]);
title('Original');

% Second plot:

subplot(2,2,2);
[C,h] = contour(X,Y,Z);  % Create the contours
title('Contour map');

% Format the coordinate data for the contours:

Xc = [];
Yc = [];
Zc = [];
index = 1;
while index < size(C,2)
  Xc = [Xc C(1,(index+1):(index+C(2,index)))];
  Yc = [Yc C(2,(index+1):(index+C(2,index)))];
  Zc = [Zc C(1,index).*ones(1,C(2,index))];
  index = index+1+C(2,index);
end

% Third plot:

subplot(2,2,3);
[XI,YI] = meshgrid(linspace(-3,3,21));  % Generate a uniform grid
ZI = griddata(Xc,Yc,Zc,XI,YI);          % Interpolate surface
surf(XI,YI,ZI);
axis([-3 3 -3 3 -8 9]);
title('GRIDDATA reconstruction');

% Fourth plot:

subplot(2,2,4);
F = TriScatteredInterp(Xc(:),Yc(:),Zc(:));  % Generate interpolant
ZIF = F(XI,YI);                             % Evaluate interpolant
surf(XI,YI,ZIF);
axis([-3 3 -3 3 -8 9]);
title('TriScatteredInterp reconstruction');

在此输入图像描述

请注意,两个结果之间几乎没有差异(至少在此比例下).还要注意,由于这些点处的轮廓数据的稀疏性,插值曲面在拐角附近具有空区域.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有