我有一张像这张照片中的3D网格。
现在我要做的是创建一个与某个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
答案 0 :(得分:1)
您可以通过简单地对插值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 );
答案 1 :(得分:1)
contour3将提供更好的界限:
[h,c]=contour3(X,Y,Z,[seaLevel seaLevel]);
seaLevel被给出两次:否则contour3认为seaLevel是自动校准的级别数。并使用seaLevel的数字高度很好地注释:
clabel(h,c);
你可以修改c来打印“sea level”而不是num2str(seaLevel)。
答案 2 :(得分:0)
如果您没有用于图像处理的MATLAB工具箱,则无法使用&#34; bwmorph&#34;功能。作为一种解决方案,您可以使用以下代码替换Shai代码的第2行,该代码重新实现参数&#39;删除&#39;的bwmorph函数。 (重新实现可能既不是很好的也不是精确的重新实现(矩阵的边界没有被使用) - 但解决方案应该是第一步。随意改进。)
shoreline= zeros(size(inside));
for i_row = 2:size(inside,1)-1
for i_col = 2:size(inside,2)-1
if(inside(i_row,i_col))
if (~( inside(i_row+1,i_col) && ...
inside(i_row-1,i_col) && ...
inside(i_row,i_col+1) && ...
inside(i_row,i_col-1)))
inside2(i_row,i_col) = 1;
end
end
end
end