1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > matlab画转体_如何用MATLAB画五角星围绕其一对称轴旋转的旋转体?

matlab画转体_如何用MATLAB画五角星围绕其一对称轴旋转的旋转体?

时间:2022-07-05 05:08:49

相关推荐

matlab画转体_如何用MATLAB画五角星围绕其一对称轴旋转的旋转体?

clear all; clc; close all;

%% 画五角星

A = ones(2,5);

A(:,1) = [0 1]';

theta = 2*2*pi/5;

for i=2:5

A(:,i) = [cos(theta) sin(theta); -sin(theta) cos(theta)]*A(:, i-1);

end

A = [A A(:,1)];

%% 转换到3D空间内

B = [zeros(1,6); A];

plot3(B(1,:), B(2,:), B(3,:), 'linewidth', 3, 'color', 'y');

set(gcf, 'color', 'k')

set(gca,'nextplot','replacechildren');

axis off

axis equal

view(0,0);

%% 开始旋转

N = 100;

agl = linspace(0, 2*pi, N+1);

agl(end) = [];

F = moviein(N);

D = B;

for k = 1:N;

C = [cos(agl(k)) sin(agl(k)) 0;

-sin(agl(k)) cos(agl(k)) 0;

0 0 1];

for m = 1:6

D(:,m) = C*B(:,m);

end

plot3(D(1,:), D(2,:), D(3,:), 'linewidth', 3, 'color', 'y');

F(k) = getframe;

end

movie(F,5,30);

===================趁老板不在,赶紧来更新了===========================

先上运行结果图吧:

很像一个火锅炉啊~~

主文件main.m:

%---------------------------------------------------------main.m-------------------------------------------------------

clear all; clc; close all;

%% 计算顶点坐标

A = repmat([0 1]', 1, 5);

th = 2*2*pi/5;

for k = 2:6

A(:,k) = [cos(th) sin(th); -sin(th) cos(th)]*A(:,k-1);

end

%% 调用函数计算锥面并绘制

figure; hold on

axis equal

n = 50;

% 第一个锥面,火锅炉的中轴

R1 = abs(A(1,5) - A(1,2))/2;

H1 = abs(A(2,1) - A(2,2));

[X1 Y1 Z1] = conic(R1,H1,n);

Z1 = Z1 - abs(A(2,2));

surfl(X1,Y1,Z1)

% 第二个锥面,火锅炉里汤的水面(其实是个平面)

R2 = abs(A(1,3) - A(1,4))/2;

H2 = 0;

[X2 Y2 Z2] = conic(R2,H2,n);

Z2 = Z2 + abs(A(2,3));

surfl(X2,Y2,Z2)

% 第三个锥面,火锅炉装汤的部分(下表面)

R3 = abs(A(1,3) - A(1,4))/2;

H3 = -R3*tan(36/180*pi);

[X3 Y3 Z3] = conic(R3,H3,n);

Z3 = Z3 + abs(A(2,3));

surfl(X3,Y3,Z3)

% 第四个锥面,最下面的那个小锥面

R4 = abs(A(1,5) - A(1,2))/2;

H4 = R4*tan(36/180*pi);

[X4 Y4 Z4] = conic(R4,H4,n);

Z4 = Z4 - abs(A(2,2));

surfl(X4,Y4,Z4)

% 设定显示细节

view(-130,20)

shading interp

material dull

colormap copper

alpha 0.7

axis off

set(gcf, 'color', [120 120 120]/255)

%-----------------------------------------------------End of main.m---------------------------------------------------------------

绘制圆锥面的函数conic.m:

%-----------------------------------------------------conic.m-------------------------------------------------------------------------

function [X Y Z] = conic(R,H,n)

% 计算底面半径R,高度为H的圆锥面的点坐标

% n越大,分割越精细,显示效果越好,但是数据量大,会卡

% 当H为0时,可以绘制一个平面

r = linspace(0,R,n);

th = linspace(0,2*pi,n);

[RA TH] = meshgrid(r,th);

Z = zeros(n,n);

X = Z;

Y = Z;

for k = 1:n

for m = 1:n

X(k,m) = RA(k,m)*sin(TH(k,m));

Y(k,m) = RA(k,m)*cos(TH(k,m));

Z(k,m) = H/R*(R-RA(k,m));

end

end

%-----------------------------------------------------End of conic.m-------------------------------------------------------------

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。