matlab入门教程五 ----- 绘制空间图形

来源:互联网 发布:程序员盗600 编辑:程序博客网 时间:2024/05/20 23:30

二.空间图形绘制

对于下面的图形,已经给出了代码与详细注释,并没有给出具体画出的图形,建议初学者自己敲一下代码实现正确的图形显示

%绘制空间曲线,利用plot3
clf; %清除所有图形axis([0 20 * pi 0 20 * pi 0 20 * pi] ) %表示x轴坐标范围:0-20*pi y:0-20*pi z :0-20*pix = 0 : pi / 50 : 10 * pi;y1 = sin(x);y2 = cos(x);y3 = x;subplot(1, 2, 1), plot3(y1, y2, y3, 'r.');title('螺旋曲线');xlabel('x'), xlabel('y');grid on;x = 0.5 : 0.01 : 1.5;y1 = cos(x);y2 = sin(x);y3 = 1 ./ x;subplot(1, 2, 2), plot3(y1, y2, y3, 'b-');title('曲线');xlabel('x'), xlabel('y');grid on;
%空间曲面的绘制
x = -3 : 0.1 : 3;[X1, Y1] = meshgrid(x); %生成格点矩阵Z1 = sin(X1 + sin(Y1));subplot(1, 2, 1); mesh(X1, Y1, Z1); %mesh绘制空间曲面title('sin(x + sin(y))');x = -10 : 0.3 : 10;[X2, Y2] = meshgrid(x); %生成格点矩阵Z2 = X2 .^2 - 2 * Y2 .^2 + eps; %eps是一个很小的数字,避免出现此处为0的情况subplot(1, 2, 2); mesh(X2, Y2, Z2);title('马鞍面');

mesh,meshc meshz不同,自己对比画出图形的不同
t = -8 : 0.3 : 8;[x, y] = meshgrid(t);r = sqrt(x.^2 + y.^2) + eps; z = sin(r) ./ r;subplot(1, 3, 1); meshc(x ,y, z);title('meshc') , axis( [ -8 8 -8 8 -0.5 0.8] );subplot(1,3,2) ,meshz(x,y,z), title('meshz' ) ,axis( [ -8 8 -8 8 -0.5 0.8] );subplot(1,3,3) ,mesh(x,y,z), title('mesh') , axis( [ -8 8 -8 8 -0.5 0.8] ) ;

surf:画表面图

x = -10 : 0.3 : 10;[X2, Y2] = meshgrid(x); %生成格点矩阵Z2 = X2 .^2 - 2 * Y2 .^2 + eps; %epssubplot(1, 2, 1); mesh(X2, Y2, Z2);title('网格图');subplot(1,  2, 2); surf(X2, Y2, Z2);title('表面图');

%空间平面的绘制
t = -10 : 0.5 : 10;[x1, y1] = meshgrid(t);z1 = 5 * ones(length(t)); %ones(n)是生成阶数为n的矩阵subplot(1, 2, 1); mesh(x1, y1, z1); title('z1 = 5');t = -1 : 0.1 : 1[x2, y2] = meshgrid(t);z2 = 5 - 2 * x2 + 3 * y2;subplot(1, 2, 2); mesh(x2, y2, z2); title('2 * x2 + 3 * y2 + z2 = 5');

%求两平面的交线
x = -10 : 0.1 : 10;[x1, y1] = meshgrid(x); %生成格点矩阵z1 = x1 .^2 - 2 * y1 .^2 + eps;subplot(1, 3, 1); mesh(x1, y1, z1);title('马鞍面');a = input('a = (-50 < a < 50)'); %动态输入,在控制台输入即可z2 = a * ones(length(x)); subplot(1, 3, 2); mesh(x1, y1, z2); title('平面');r0 = abs(z2 - z1) <= 1; % r0只可能为1:表示两图形间距小于1侧认为重合 或者r0为0:不重合z3 = r0 .* z2; y3 = r0 .* y1; x3 = r0 .* x1;subplot(1, 3, 3); plot3(x3(r0 ~= 0), y3(r0 ~= 0), z3(r0 ~= 0), 'x');title('交线');

%球面
v = [ -2 2 -2 2 -2 2 ] ;subplot (1 ,2 ,1 ), sphere(30), title('半径为1的球面');axis(v); %控制坐标系%半径为3的球面[x, y, z] = sphere(30);subplot (1, 2 ,2 ) , surf( 2*x , 2*y ,2*z)title('半径为2的球面'), axis(v); %控制坐标系,上面已经讲过

%绘制柱面
r = - 1: .1: 1; subplot (1,2,1 ), cylinder(1, 50 ) , title('柱面') subplot (1 ,2 ,2 ), cylinder( sqrt(abs(r)) , 50 ) , title ('旋转曲面');


下面给出几个练习题,里面出现的语句基本已经全部在前面讲过,如果发现不懂的地方,请再去看看前面的内容

%test_1 :观察x^u当u取不同的值时的图像的特点
%方法一t = -10 : 1 : 10;[x, y] = meshgrid(t);for j = 1 : 1 : 6    z = x .^ j;    surf(x, y, z);    axis([-10 10 -10 10 -10 10]);    hold on;end
%方法二x = -10 : 0.1 : 10;for j = 1 : 1 : 6    y = x .^j;    plot(x, y);    axis([-10 10 -10 10]);    %axis equal;    xlabel('x');    ylabel('y');    hold on;end



%test_2 :观察plot与fplot画图的区别
figure(1);1x = -4 : 0.1 : 4;y = x .^2 .* sin(x);plot(x, y, 'b-');figure(2);fplot('x .^2 .* sin(x)', [-4, 4], 'r.');



%test_3 :用黄色,数据点为钻石画出3 * cos(x) * exp(sin(x))
x = 0 : 0.1 : 5;y = 3 * cos(x) .* exp(sin(x));plot(x, y, 'yd--');



%test_4:运用xlabel ylabel gtext axis legend title画出图形xsin(x), x*tan(1/x)*sin(x^3), x^3, tan(x) + sin(x)
x = -pi : pi / 50 : pi;y = x .* sin(x);plot(x, y, 'b-');hold on; %只用写一次即可x = pi : pi / 50 : 4 * pi;y = x .* tan(1 ./ x) .* sin(x .^ 3);plot(x, y, 'r-');x = 1 : 0.1 : 8;y = x .^ 3;plot(x, y, 'k-');x = 1 : 0.1 : 8;y = tan(x) + sin(x);plot(x, y, 'g-');xlabel('x'), xlabel('y'), title('xsin(x) x*tan(1/x)*sin(x^3) x^3 tan(x) + sin(x)'),axis([-5 10 -4 15]);gtext('xsin(x)'), gtext('x*tan(1/x)*sin(x^3)'), gtext('x^3'), gtext('tan(x) + sin(x)');legend('xsin(x)', 'x*tan(1/x)*sin(x^3)', 'x^3', 'tan(x) + sin(x)');


%test_6:在同一个图形窗口画出半径为一的球面,z = 4的平面马鞍面z = 2*x^2 - y^2subplot (2, 2, 1 ), sphere(30);title('半径为1的球面');axis([ -2 2 -2 2 -2 2 ]); %控制坐标系t = -2 : 0.1 : 2;[x, y] = meshgrid(t);z = 4 * ones(length(t));subplot(2, 2, 2); mesh(x, y, z);title('z = 4的平面');t = -2 : 0.1 : 2;[x, y] = meshgrid(t);z = 2 * x .^2 - y .^2;subplot('position' , [0.2,0.05,0.6,0.45] ) , mesh(x, y, z), title('马鞍面'); grid on;


%test_7%求两平面的交线:马鞍面3x^3 - 2y^2与z =4的平面x = -10 : 0.1 : 10;[x1, y1] = meshgrid(x); %生成格点矩阵z1 = 3 * x1 .^2 - 2 * y1 .^2 + eps; subplot(1, 3, 1);mesh(x1, y1, z1);title('马鞍面');z2 = 4 * ones(length(x));hold on;subplot(1, 3, 2);mesh(x1, y1, z2); title('平面');r0 = abs(z2 - z1) <= 1; %r0z3 = r0 .* z2; y3 = r0 .* y1; x3 = r0 .* x1;subplot(1, 3, 3);plot3(x3(r0 ~= 0), y3(r0 ~= 0), z3(r0 ~= 0), 'x');title('交线');



原创粉丝点击