三维空间直线旋转曲面绘制 - 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代码
% 绘制三维坐标系和三条直线
figure;
axis([-10 10 -10 10 -10 10]);
line([0 0],[0 0],[-10 10],'LineWidth',2,'Color','k'); % z轴
line([-10 10],[0 0],[0 0],'LineWidth',2,'Color','k');
line([0 0],[-10 10],[0 0],'LineWidth',2,'Color','k');
line([0 5],[-5 0],[0 5],'LineWidth',2,'Color','r'); % l1
line([0 5],[-5 0],[5 10],'LineWidth',2,'Color','g'); % l2
line([5 5],[-5 5],[0 0],'LineWidth',2,'Color','b'); % l3
xlabel('x');
ylabel('y');
zlabel('z');
% 绘制l1点围绕z轴的旋转曲面
theta = 0:0.1:2*pi;
r = 2*sqrt(2);
x = r*cos(theta);
y = r*sin(theta);
z = x;
hold on;
for i = 1:length(x)
p = [x(i) y(i) z(i)];
R = [cos(theta(i)) -sin(theta(i)) 0; sin(theta(i)) cos(theta(i)) 0; 0 0 1];
p_new = p*R;
plot3(p_new(1),p_new(2),p_new(3),'*','Color','m');
end
% 绘制l3以l2为轴的旋转曲面
theta = 0:0.1:2*pi;
r = 2*sqrt(2);
x = r*cos(theta);
y = r*sin(theta);
z = -5 + x;
for i = 1:length(x)
p = [x(i) y(i) z(i)];
axis_vec = [0 0 1];
R = vrrotvec2mat(vrrotvec(axis_vec,[5 0 -5]));
p_new = p*R;
plot3(p_new(1),p_new(2),p_new(3),'*','Color','c');
end
结果
其中,紫色的点表示l1点围绕z轴的旋转曲面,青色的点表示l3以l2为轴的旋转曲面。
代码解析
-
绘制三维坐标系和三条直线:
- 使用
figure命令创建图形窗口。 - 使用
axis命令设置坐标轴范围。 - 使用
line命令绘制坐标轴和三条直线。
- 使用
-
绘制l1点围绕z轴的旋转曲面:
- 使用
theta和r定义旋转角度和母线长度。 - 计算旋转曲面上的点的坐标
(x, y, z)。 - 使用
hold on命令保留先前绘制的内容。 - 使用
for循环遍历每个旋转角度。 - 使用
R矩阵表示旋转矩阵,将点p绕z轴旋转theta(i)角度,得到新的点p_new。 - 使用
plot3命令绘制旋转曲面上的点,颜色为紫色。
- 使用
-
绘制l3以l2为轴的旋转曲面:
- 类似于步骤2,但旋转轴为直线l2。
- 使用
axis_vec定义旋转轴的方向向量。 - 使用
vrrotvec2mat和vrrotvec函数将轴向量和旋转角度转换为旋转矩阵。 - 使用
plot3命令绘制旋转曲面上的点,颜色为青色。
总结
本文介绍了如何使用Matlab代码绘制三维空间直线旋转曲面,代码简洁易懂,并包含了详细的注释和结果展示。
原文地址: https://www.cveoy.top/t/topic/oQrg 著作权归作者所有。请勿转载和采集!