matlab绘制球体、正方体、正四面体、圆锥体

一、球体绘制

[x, y, z] = sphere(20);
surf(x, y, z);

此处利用sphere函数,该函数会生成一个球体的顶点数据,即生成一个20x20的球面网格,调用此函数过后matlab会生成一个半径为一的单位球体,同时将各个球面顶点的坐标保存在x,y,z数组中,再通过surf函数进行球面绘制

二、正方体绘制

% 绘制正方体
cube_vertices = [
    0 0 0;
    0 1 0;
    1 1 0;
    1 0 0;
    0 0 1;
    0 1 1;
    1 1 1;
    1 0 1
];
cube_faces = [
    1 2 3 4;
    1 2 6 5;
    2 3 7 6;
    3 4 8 7;
    4 1 5 8;
    5 6 7 8
];
for i = 1:size(cube_faces, 1)
    face_vertices = cube_vertices(cube_faces(i, :), :);
    patch('Vertices', face_vertices, 'Faces', 1:4, 'FaceColor', 'blue');
end
axis equal;
view(3);

首先定义正方体的八个顶点,即cube_vertices为一个8x3的矩阵,其中每一行都分别对应顶点的x,y,z坐标点,然后正方体有6个面,而每一个面由四个顶点构成,于是cube_faces是6x4的矩阵,其中对应的1234此类数字是用来索引顶点的

然后进行绘图,而size(cube_faces,1)能够获取矩阵cube_faces的行数,即绘制的6个面,而在第一句代码处,首先利用cube_faces(i, :)进行索引得到第i行,就比如此时的i为1时,就索引到cube_ faces的第一行,而第一行有1234,故又在cube_vertices中索引第1234行即得到绘制第一面的四个顶点的具体信息

patch函数中vertices指定顶点数据,而faces指定绘制面,而facecolor则指定绘制面的颜色

axis equal和view(3)则是对最后展示的一个优化

三、圆锥体绘制

% 绘制正四面体
tetra_side = 1; % 正四面体的边长
tetra_height = sqrt(2/3) * tetra_side; % 正四面体的高度
tetra_vertices = [
    0 0 0;
    tetra_side 0 0;
    tetra_side/2 tetra_side*sqrt(3)/2 0;
    tetra_side/2 tetra_side*sqrt(3)/6 tetra_height
];
tetra_faces = [
    1 2 3;
    1 3 4;
    1 4 2;
    2 4 3
];
% 绘制正四面体立体图像
for i = 1:size(tetra_faces, 1)
    face_vertices = tetra_vertices(tetra_faces(i, :), :);
    patch('Vertices', face_vertices, 'Faces', 1:3, 'FaceColor', 'red');
end
axis equal;
view(3);

此处的四面体绘制和正方体绘制的思路相同,唯一有区别的是要根据已有的数据对四面体的顶点进行定义

四、圆锥体绘制

cone_radius = 1; % 圆锥体底面的半径
cone_height = 2; % 圆锥体的高度
theta = linspace(0, 2*pi, 100);
z = linspace(0, cone_height, 100);
[theta, z] = meshgrid(theta, z);
x = cone_radius * (1 - z / cone_height) .* cos(theta);
y = cone_radius * (1 - z / cone_height) .* sin(theta);
% 绘制圆锥体立体图像
surf(x, y, z, 'FaceColor', 'green');
axis equal;
view(3);

其中linspace函数是在0到2*pi之间产生100个点这是通俗理解,详细可查阅帮助文档,meshgrid此函数用于利用已知数值theta和z来生成网格,将其扩展成网格矩阵,此类操作能够帮助

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值