详细变量弹出时横向滚动条没有只有最大化时有
% ==============================
% 立体方盒子:旋转 + 缩放 + 平移
% 使用齐次坐标 (4x4 变换矩阵)
% ==============================
% ----- 1. 定义立方体的8个顶点 (3D坐标) -----
% 每个顶点为 (x, y, z),边长为2,中心在原点
V = [-1, 1, 1, -1, -1, 1, 1, -1; % x
-1, -1, 1, 1, -1, -1, 1, 1; % y
-1, -1, -1, -1, 1, 1, 1, 1]; % z
% ----- 2. 定义立方体的12条棱(连接关系)-----
% 每条棱由两个顶点的索引(从1开始)表示
edges = [1,2; 2,3; 3,4; 4,1; % 底面
5,6; 6,7; 7,8; 8,5; % 顶面
1,5; 2,6; 3,7; 4,8]; % 垂直棱
% ----- 3. 定义变换参数 -----
theta_x = pi/6; % 绕X轴旋转30度
theta_y = pi/4; % 绕Y轴旋转45度
theta_z = pi/3; % 绕Z轴旋转60度
sx = 1.2; sy = 1.5; sz = 0.8; % 各方向缩放因子
tx = 2; ty = 1; tz = 3; % 平移量
% ----- 4. 构造变换矩阵(4x4齐次坐标)-----
% 旋转矩阵(绕X轴)
Rx = [1, 0, 0, 0;
0, cos(theta_x), -sin(theta_x), 0;
0, sin(theta_x), cos(theta_x), 0;
0, 0, 0, 1];
% 旋转矩阵(绕Y轴)
Ry = [cos(theta_y), 0, sin(theta_y), 0;
0, 1, 0, 0;
-sin(theta_y), 0, cos(theta_y), 0;
0, 0, 0, 1];
% 旋转矩阵(绕Z轴)
Rz = [cos(theta_z), -sin(theta_z), 0, 0;
sin(theta_z), cos(theta_z), 0, 0;
0, 0, 1, 0;
0, 0, 0, 1];
% 缩放矩阵
S = [sx, 0, 0, 0;
0, sy, 0, 0;
0, 0, sz, 0;
0, 0, 0, 1];
% 平移矩阵
T = [1, 0, 0, tx;
0, 1, 0, ty;
0, 0, 1, tz;
0, 0, 0, 1];
% 组合变换(先缩放 → 再旋转 → 最后平移)
% 注意矩阵乘法顺序:从右向左应用
M = T * Rz * Ry * Rx * S; % 可以调整旋转顺序获得不同效果
% ----- 5. 将顶点转换为齐次坐标(4x8矩阵)-----
V_homo = [V; ones(1, size(V,2))];
% ----- 6. 应用变换 -----
V_transformed = M * V_homo;
% 提取变换后的3D坐标(前三行)
V_new = V_transformed(1:3, :);
% ----- 7. 绘制原始立方体和变换后的立方体 -----
figure;
hold on;
grid on;
axis equal;
view(3); % 设置3D视角
% 绘制原始立方体(蓝色)
for i = 1:size(edges,1)
p1 = edges(i,1);
p2 = edges(i,2);
plot3([V(1,p1), V(1,p2)], ...
[V(2,p1), V(2,p2)], ...
[V(3,p1), V(3,p2)], 'b-', 'LineWidth', 1.5);
end
% 绘制变换后的立方体(红色)
for i = 1:size(edges,1)
p1 = edges(i,1);
p2 = edges(i,2);
plot3([V_new(1,p1), V_new(1,p2)], ...
[V_new(2,p1), V_new(2,p2)], ...
[V_new(3,p1), V_new(3,p2)], 'r-', 'LineWidth', 2);
end
% 设置图形属性
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
title('立体方盒子:旋转、缩放、平移(矩阵运算)');
legend('原始立方体', '变换后立方体');
hold off;