Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB-曲面与平面相交_Matlab_Modeling_Intersection - Fatal编程技术网

MATLAB-曲面与平面相交

MATLAB-曲面与平面相交,matlab,modeling,intersection,Matlab,Modeling,Intersection,我有一个3D网格,如图所示 function plot(x,y,z) Contour = xlsread('C:\Users\Joel\Copy\Contour','A2:D4757'); x = Contour(:,1); y = Contour(:, 2); z = Contour(:,3); F = TriScatteredInterp(x,y,z); [X,Y]=meshgrid(linspace(-600,600,300)); Z=F(X,Y); surf(X,Y,Z); end

我有一个3D网格,如图所示

function plot(x,y,z)
Contour = xlsread('C:\Users\Joel\Copy\Contour','A2:D4757');
x = Contour(:,1);
y = Contour(:, 2);
z = Contour(:,3);
F = TriScatteredInterp(x,y,z);
[X,Y]=meshgrid(linspace(-600,600,300));
Z=F(X,Y);
surf(X,Y,Z);
end

现在我要做的是创建一个平面,它将以某个Z值与曲面相交。然后我想得到这个交点的x和y坐标,并让matlab输出它们

我计划做的是这张照片是一个湖的模型。这个湖的水会蒸发掉一定的z值的水。然后我想通过获得这个交叉点的x和y坐标,看看新的海岸线会是什么样子

这是我绘制那幅画的代码

function plot(x,y,z)
Contour = xlsread('C:\Users\Joel\Copy\Contour','A2:D4757');
x = Contour(:,1);
y = Contour(:, 2);
z = Contour(:,3);
F = TriScatteredInterp(x,y,z);
[X,Y]=meshgrid(linspace(-600,600,300));
Z=F(X,Y);
surf(X,Y,Z);
end

您只需对插值的
Z
值设置阈值即可完成此操作

inside = Z < seaLevel; % binary mask of points inside water
shoreline = bwmorph( inside, 'remove' ); % a mask with only shoreline pixels eq to 1
figure;
surf( X, Y, Z, 'EdgeColor', 'none', 'FaceColor', [210,180,140]/255, 'FaceAlpha', .5 );
hold on;
ii = find( shoreline );
plot3( X(ii), Y(ii), seaLevel*ones(size(ii)), 'b', 'LineWidth', 2 );
inside=Z
轮廓3将提供更好的边界:

[h,c]=contour3(X,Y,Z,[seaLevel seaLevel]);
seaLevel给出两次:否则contour3认为seaLevel是要自动校准的级别数。要用海平面的数字高度很好地进行注释:

clabel(h,c);

您可以修改c以打印“海平面”而不是num2str(海平面)。

如果您没有用于图像处理的MATLAB工具箱,则无法使用函数“bwmorph”。作为解决方案,您可以使用以下代码替换Shai代码的第2行,该代码重新实现参数“remove”的bwmorph函数。(重新实施可能既不是非常完美,也不是精确的重新实施(不使用矩阵的边界)-但解决方案应该作为第一步。请随意改进)


我对MATLAB编码比较陌生,那么h和c到底是什么呢?我需要在任何地方申报吗?或者h和c是特定海平面值下x和y的值?比如说-246?好吧。仍然试图适应来自C++和java的MATLAB。有没有一种方法可以填充封闭的轮廓?以特定颜色对其进行着色?设置(hsurf、'FaceColor'、'interp');用hsurf=surf(X,Y,Z)计算hsurf?填充3?请阅读他们的文件。这不是你最初的问题,请编辑一下。我不知道你可以创造一个面具的表面。surf(X,Y,Z,'EdgeColor','none','FaceColor',[210180140]/255,'FaceAlpha',.5);经过XYZ的那行代码到底是怎么回事?@JoelSanchez你试过这个吗?我基本上添加了一些曲面参数来改进曲面图。是的,我添加了。我喜欢。它很整洁。另外,是否有一个地方有我们正在使用的函数/类的实际文档。比如当我查找polyarea时,它告诉我如何使用它,但是否有一个地方显示了该函数背后的编码?你可以随时在mathworks网站上查找。例如,这里有一个文档。您还可以通过键入doc surf,在Matlab中查看此文档。对于某些函数,您实际上可以看到它们的代码,只需键入
>edit bwmorph
即可,这正是我想要的!非常感谢。