三维坐标系中直线旋转曲面绘制 - Matlab 代码实现
三维坐标系中直线旋转曲面绘制 - Matlab 代码实现
已知三维坐标系oxyz的坐标平面oxz中存在三条直线,三条直线依次为: l1: z = x,l2: z = x + 5,l3: x = 5。
本文使用 Matlab 绘制三维坐标系的 z 轴和三条空间直线,以及平面 oxz 的第一卦限中的直线 l1 点围绕 z 轴的旋转曲面,直线 l3 以直线 l2 为轴的旋转曲面,且两个旋转曲面的母线长度均为 2 * sqrt(2)。
Matlab 代码和结果
% 给出三条直线的参数方程
l1 = @(t) [t, t, t];
l2 = @(t) [t-5, t-5, t+5];
l3 = @(t) [5, t, t];
% 绘制三维坐标系和三条直线
figure; hold on;
plot3([0, 0], [0, 0], [-10, 10], 'k'); % z轴
t = -10:0.1:10;
plot3(l1(t), 'r', 'LineWidth', 2); % l1
plot3(l2(t), 'g', 'LineWidth', 2); % l2
plot3(l3(t), 'b', 'LineWidth', 2); % l3
axis equal; view(30, 30); grid on;
% 绘制l1点围绕z轴的旋转曲面
theta = 0:pi/50:2*pi;
r = 2*sqrt(2);
for t = -10:0.5:10
x = r*cos(theta) + t;
y = r*sin(theta);
z = t*ones(size(theta));
plot3(x, y, z, 'm');
end
% 绘制l3以l2为轴的旋转曲面
axis_l2 = l2(0);
axis_l2_dir = (l2(1)-axis_l2) / norm(l2(1)-axis_l2);
for t = -10:0.5:10
p = l3(t);
v = p - axis_l2;
v_dir = v / norm(v);
w_dir = cross(axis_l2_dir, v_dir);
w_dir = w_dir / norm(w_dir);
u_dir = cross(w_dir, axis_l2_dir);
u_dir = u_dir / norm(u_dir);
rot_mat = [u_dir', w_dir', axis_l2_dir'];
theta = 0:pi/50:2*pi;
r = 2*sqrt(2);
x = r*cos(theta);
y = r*sin(theta);
z = zeros(size(theta));
for i = 1:length(theta)
v = [x(i); y(i); z(i)];
v = rot_mat * v;
x(i) = v(1) + p(1);
y(i) = v(2) + p(2);
z(i) = v(3) + p(3);
end
plot3(x, y, z, 'c');
end
运行结果如下:

代码解析
- 定义直线参数方程: 使用匿名函数定义三条直线的参数方程,便于后续绘图。
- 绘制三维坐标系和直线: 利用
plot3函数绘制三维坐标系和三条直线,并设置线型和颜色。 - 绘制 l1 围绕 z 轴旋转曲面: 使用循环遍历直线 l1 的各个点,并根据旋转角度和半径计算每个点的坐标,最后使用
plot3函数绘制曲面。 - 绘制 l3 以 l2 为轴旋转曲面: 首先计算直线 l2 的方向向量,然后计算 l3 上每个点绕 l2 旋转后的坐标,最后使用
plot3函数绘制曲面。
总结
本文使用 Matlab 代码绘制了三维坐标系中三条直线,以及直线 l1 围绕 z 轴旋转形成的曲面和直线 l3 以直线 l2 为轴旋转形成的曲面,并提供了详细的代码解析。该代码可以帮助读者更好地理解三维图形的绘制方法,并为实际应用提供参考。
原文地址: https://www.cveoy.top/t/topic/oQro 著作权归作者所有。请勿转载和采集!