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

xiaoxiao2021-02-27  366

二.空间图形绘制

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

%绘制空间曲线,利用plot3 clf; %清除所有图形 axis([0 20 * pi 0 20 * pi 0 20 * pi] ) %表示x轴坐标范围:0-20*pi y:0-20*pi z :0-20*pi x = 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; %eps subplot(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);1 x = -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^2 subplot (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; %r0 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('交线');

转载请注明原文地址: https://www.6miu.com/read-7679.html

最新回复(0)