如何用patch()高效绘制y轴分色的立方体?
简洁实现单次patch调用绘制分色立方体
优化后的代码实现
% 定义立方体参数:中心在原点,边长为2(坐标范围-1到1) min_c = -1; max_c = 1; % 生成y>0区域的5个面顶点(顶面+四个侧面上半部分) top_faces = [ % 顶面 (y=max_c) max_c max_c max_c; max_c max_c min_c; min_c max_c min_c; min_c max_c max_c; % 前侧面上半 (z=max_c, y从0到max_c) max_c max_c max_c; max_c min_c max_c; min_c min_c max_c; min_c max_c max_c; % 右侧面上半 (x=max_c, y从0到max_c) max_c max_c max_c; max_c max_c min_c; max_c min_c min_c; max_c min_c max_c; % 后侧面上半 (z=min_c, y从0到max_c) max_c max_c min_c; max_c min_c min_c; min_c min_c min_c; min_c max_c min_c; % 左侧面上半 (x=min_c, y从0到max_c) min_c max_c max_c; min_c max_c min_c; min_c min_c min_c; min_c min_c max_c; ]; % 生成y<0区域的5个面顶点:直接翻转y坐标 bottom_faces = top_faces; bottom_faces(:,2) = -bottom_faces(:,2); % 按面拼接顶点矩阵(每4列对应一个面) x = [top_faces(:,1)' bottom_faces(:,1)']; y = [top_faces(:,2)' bottom_faces(:,2)']; z = [top_faces(:,3)' bottom_faces(:,3)']; % 定义颜色:前5个面红色,后5个面蓝色,用repmat简化赋值 color_mat = repmat([1 0 0; 0 0 1], 5, 1); figure; patch(x, y, z, color_mat); view(3); axis equal; % 保持坐标轴比例,避免立方体变形
优化说明
- 顶点生成简化:
不再逐个定义每个面的x/y/z分量,而是用一个矩阵统一描述y>0区域的所有面顶点,通过翻转y坐标快速得到y<0区域的顶点,大幅减少代码行数。 - 颜色矩阵高效构建:
用repmat函数直接重复颜色向量,替代原代码中逐通道赋值的冗余操作,一行完成10个面的颜色定义。 - 可读性与扩展性提升:
立方体的边长仅需修改min_c和max_c即可调整,颜色修改只需替换repmat中的颜色向量,逻辑清晰易维护。
内容的提问来源于stack exchange,提问作者teeeeee
相关产品推荐
相关产品推荐

