matlab显示界面和块体模型位置

本文主要实现简单块体、球体模型和界面位置变化的显示
生成效果如图
效果图

代码

clc;
clear;
%%绘制模型位置示意图

%研究区范围 横、纵、深度方向范围
x_min = -15;
x_max = 15;
y_min = -15;
y_max = 15;
z_min = -5;
z_max = 5;

%模型参数设置
%———————————界面模型———————————
%%*********************界面类型1**********************
%同一水平高度界面(Z值一致)
surface_x_min = -15; %界面的左边界位置
surface_x_max = 0; %界面的右边界位置
dx = 1; %横向生成界面数据间隔
surface_y_min = -15; %界面的下边界位置
surface_y_max = 15; %界面的上边界位置
dy = 1; %纵向生成界面数据间隔
depth = 0; %界面深度位置
% [X,Y] = meshgrid(surface_x_min:dx:surface_x_max,surface_y_min:dy:surface_y_max);
for i = 1:((surface_x_max-surface_x_min)/dx)+1
    for j = 1:((surface_y_max-surface_y_min)/dy)+1
        X(i,j) = surface_x_min + dx*(i-1);
        Y(i,j) = surface_y_min + dy*(j-1);
        Z(i,j) = depth;
        C(i,j) = 1; %界面数值可调整
    end
end
surf(X,Y,Z,C);
%%*********************界面类型2**********************
hold on
%横向垂直界面(X值一致)
position_X = 0; % 【界面在X轴的位置】
surface_y_min = -15; %界面的下边界位置
surface_y_max = 15; %界面的上边界位置
dy = 1; %纵向生成界面数据间隔
surface_z_min = -5; %界面的深度下边界位置
surface_z_max = 0; %界面的深度上边界位置
dz = 1; %横向生成界面数据间隔

for i = 1:((surface_z_max-surface_z_min)/dz)+1
    for j = 1:((surface_y_max-surface_y_min)/dy)+1
        X1(i,j) = position_X;
        Y1(i,j) = surface_y_min + dy*(j-1);
        Z1(i,j) = surface_z_min + dz*(i-1);
        C1(i,j) = 1;
    end
end
surf(X1,Y1,Z1,C1);
%%*********************界面类型3**********************
hold on
%纵向垂直界面(Y值一致)
surface_x_min = -15; %界面的左边界位置
surface_x_max = 15; %界面的右边界位置
dx = 1; %横向生成界面数据间隔
position_Y = 0; % 【界面在Y轴的位置】
surface_z_min = -5; %界面的深度下边界位置
surface_z_max = 0; %界面的深度上边界位置
dz = 1; %横向生成界面数据间隔

for i = 1:((surface_z_max-surface_z_min)/dz)+1
    for j = 1:((surface_x_max-surface_x_min)/dx)+1
        X2(i,j) = surface_x_min + dx*(j-1);
        Y2(i,j) = position_Y;
        Z2(i,j) = surface_z_min + dz*(i-1);
        C2(i,j) = 1;
    end
end
surf(X2,Y2,Z2,C2);


%———————————块体模型———————————
%%*********************模型1**********************
p1=[0 0 0]; %%%%%%%模型【左下顶点】位置
cube_x=1; %模型块体横向宽度
cube_y=1; %模型块体纵向宽度
cube_z=1; %模型块体深度方向厚度
[x1,y1,z1] = plotcube( p1, cube_x, cube_y, cube_z );
patch(x1,y1,z1,'red'); % 'red'可根据情况更改颜色
%%*********************模型2**********************
hold on
p2=[1 1 1];  %模型【左下顶点】位置
cube_x=2; %模型块体横向宽度
cube_y=2; %模型块体纵向宽度
cube_z=1; %模型块体深度方向厚度
[x2,y2,z2] = plotcube( p2, cube_x, cube_y, cube_z );
patch(x2,y2,z2,'blue');
%%*********************模型3**********************
hold on
p3=[2 2 2];  %模型【左下顶点】位置
cube_x=3; %模型块体横向宽度
cube_y=3; %模型块体纵向宽度
cube_z=1; %模型块体深度方向厚度
[x3,y3,z3] = plotcube( p3, cube_x, cube_y, cube_z );
patch(x3,y3,z3,'black');

%一起画可以用这个
%  x=[x1 x2 x3];
%  y=[y1 y2 y3];
%  z=[z1 z2 z3];
% patch(x,y,z,'red');

%———————————球体模型———————————
%%*********************模型1**********************
radiu = 2;  %球体半径
x1 = 5;   %球体中心点X坐标
y1 = 5;   %球体中心点Y坐标
z1 = 5;   %球体中心点Z坐标
[x,y,z] = plotspheroid(radiu, x1, y1, z1); %生成球体数据
% 绘制球体
c = ones(size(x)); %生成 M×N 的全 1 矩阵,用于控制球体颜色
surf(x, y, z, c);


view(3);
hold on
axis([x_min x_max y_min y_max z_min z_max]);
xlabel('X');
ylabel('Y');
zlabel('Z');

plotcube函数引自
绘制立方体的函数

function [x,y,z] = plotcube( p1, cube_x, cube_y, cube_z )
%% p1: 立方体左下角顶点坐标
%% cube_x, cube_y, cube_z 是立方体三个方向边长
v = zeros(8,3);
v(1,:)=p1;
v(2,:)=p1+[0 0 cube_z];
v(3,:)=p1+[0 cube_y 0];
v(4,:)=p1+[0 cube_y cube_z];
v(5,:)=p1+[cube_x 0 0];
v(6,:)=p1+[cube_x 0 cube_z];
v(7,:)=p1+[cube_x cube_y 0];
v(8,:)=p1+[cube_x cube_y cube_z];

x=[v(1,1) v(1,1) v(6,1) v(8,1) v(2,1) v(1,1);
   v(2,1) v(2,1) v(5,1) v(7,1) v(4,1) v(3,1);
   v(4,1) v(6,1) v(7,1) v(3,1) v(8,1) v(7,1);
   v(3,1) v(5,1) v(8,1) v(4,1) v(6,1) v(5,1)];

y=[v(1,2) v(1,2) v(6,2) v(8,2) v(2,2) v(1,2);
   v(2,2) v(2,2) v(5,2) v(7,2) v(4,2) v(3,2);
   v(4,2) v(6,2) v(7,2) v(3,2) v(8,2) v(7,2);
   v(3,2) v(5,2) v(8,2) v(4,2) v(6,2) v(5,2)];

z=[v(1,3) v(1,3) v(6,3) v(8,3) v(2,3) v(1,3);
   v(2,3) v(2,3) v(5,3) v(7,3) v(4,3) v(3,3);
   v(4,3) v(6,3) v(7,3) v(3,3) v(8,3) v(7,3);
   v(3,3) v(5,3) v(8,3) v(4,3) v(6,3) v(5,3)];

end

plotspheroid函数
绘制球体的函数

function [x,y,z] = plotspheroid(radiu, x1, y1, z1)
% 定义球体的半径和中心点坐标
radius = radiu;
center = [x1, y1, z1];

% 生成球体的网格数据
[x, y, z] = sphere(50);

% 缩放和平移网格数据以匹配半径和中心点
x = radius * x + center(1);
y = radius * y + center(2);
z = radius * z + center(3);
end

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值