Sorting-Algorithms-Blender 立方体可视化 sort_combined 揭秘:多个 2D 数组如何拼成一个排序 3D 魔方

📅 2026/8/18 17:02:43
Sorting-Algorithms-Blender 立方体可视化 sort_combined 揭秘:多个 2D 数组如何拼成一个排序 3D 魔方
Sorting-Algorithms-Blender 立方体可视化 sort_combined 揭秘多个 2D 数组如何拼成一个排序 3D 魔方【免费下载链接】Sorting-Algorithms-BlenderSorting algorithms visualized using the Blender Python API.项目地址: https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-BlenderSorting-Algorithms-Blender 是一个基于Blender Python API的开源排序算法可视化项目而sort_combined正是其中视觉冲击力最强的模块它把 6 张互相独立的 2D 数组面板拼接成一个会自动旋转的 3D 立方体6 个面各自上演一种经典排序算法。本文不堆砌代码只讲原理带你彻底看懂combined_sort_cube.py是如何让排序立起来的。一、Sorting-Algorithms-Blender 是什么四种可视化玩法一览这个项目核心思路很简单运行脚本后Blender 会生成大量基础网格平面、长方体并在排序过程中按元素位置逐帧插入关键帧Keyframe从而把抽象的数组交换变成看得见的动画。除了sort_combined项目还提供了三种各具特色的可视化方案全部集中在仓库根目录的四个文件夹中模块排序依据索引表示特色sort_circle材质的 HSV 色相长方体旋转色相 360°sort_color材质的红 绿平面位置自定义渐变色sort_combined材质的红 绿平面位置多个 2D 数组拼成立方体sort_scale长方体缩放长方体位置带访问与比较计数器其中sort_combined是项目 README 中重点展示的王牌模块对应的核心文件只有一个combined_sort_cube.py。二、sort_combined 的宏伟蓝图6 个 2D 数组如何拼出一个排序魔方魔方的结构并不复杂一个面 一个 10×10 的 2D 数组6 个面 6 个 2D 数组各自独立完成一种排序。脚本通过setup_array()函数源码位置生成这些面板再用不同的摆放参数把它们立到魔方的不同方位上。每个面的姿势由参数variation1~6决定核心差异只有三件事偏移量offset、旋转角度、平移距离if variation 1: # 正面 offset -0.1 if variation 2: # 顶面 offset 0.1 rotationX 90 if variation 3: # 底面 offset 0.1 moveY count * -2 if variation 4: # 背面 offset -0.1 rotationX 90 moveZ count * 26 个面板与 6 种算法的对应关系如下变体摆放方位运行的排序算法对应函数1正面Shell Sort希尔排序shell_sort()2顶面Insertion Sort插入排序insertion_sort()3底面Bubble Sort冒泡排序bubble_sort()4背面Quick Sort快速排序quick_sort()5左侧Selection Sort选择排序selection_sort()6右侧Merge Sort归并排序merge_sort()默认size 10源码位置也就是说每个面有 10×10 100 个小平面整个魔方共 600 个平面同时参与动画场面相当壮观。三、第一步setup_array 如何把 2D 数组立成魔方的面setup_array(count, variation)是整段代码的地基它完成三件关键工作生成平面网格按j*2、i*2的间距铺出一整排小平面存进二维数组Matrix赋予身份创建名为Parent 编号的父对象把所有平面挂到父对象下随后按变体参数旋转、平移父对象——这样整个 2D 数组就被整体立到了魔方的某个面上打乱初始顺序每一行都执行random.shuffle()保证每个面都以乱序状态开始排序动画效果更直观。值得一提的是每个面还会生成一张日落渐变sunset gradient材质红色从 0 渐变到 255、绿色从 0 渐变到 200、蓝色从 200 渐变到 100让 10 列平面拥有从暖到冷的连续色带视觉上极具辨识度。四、颜色即数值get_rg 如何用材质颜色排序这是sort_combined最巧妙的设计排序比较的数值不是数字而是材质颜色。排序时算法不断读取两个平面的diffuse_color漫反射颜色再交给get_rg()函数源码位置提取红色通道 R 与绿色通道 G二者相加得到比较值rg。谁的 RG 大谁就更大需要往后排。这种做法的好处显而易见观众无需理解复杂的数值交换只需盯着颜色深浅就能直观看出大的往右、小的往左的排序过程非常适合教学演示。五、六个面、六种算法每一面都在独立排序脚本按正面 → 顶面 → 底面 → 背面 → 左面 → 右面的顺序依次处理每个面内的 10 行数组分别跑一遍对应算法。每次元素交换脚本都会插入关键帧让平面平滑地滑到新位置。由于每个面的排序都会生成大量关键帧脚本还做了帧号衔接处理每完成一个面main_frame会跳到上一个面结束的帧号并预留 25 帧空档避免六个面的动画在时间轴上互相重叠。六、middle_pivot 旋转魔法让魔方逐面翻给你看六个面排完后高潮来了脚本创建一个名为middle_pivot的小立方体源码位置把六个Parent全部挂到它下面然后通过旋转关键帧让整个魔方逐面翻转源码位置希尔排序完成 → 绕 X 轴旋转 90°露出顶面插入排序完成 → 继续转到 180°露出底面冒泡排序完成 → 转到 270°露出背面快速排序完成 → 绕 Z 轴旋转露出左面选择排序完成 → 再绕 Z 轴旋转露出右面归并排序。就这样观众能在同一个动画里看到 6 种排序算法在同一个 3D 魔方上轮番演出互不干扰又浑然一体——这正是sort_combined名称的由来combined组合。七、5 步上手在 Blender 中亲手生成排序魔方想亲自体验并不难只需要 5 步从官网下载并安装免费的 Blender任意较新版本即可将项目克隆到本地git clone https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender打开 Blender在顶部编辑器类型中选择Text Editor文本编辑器打开sort_combined/combined_sort_cube.py文件点击文本编辑器里的运行脚本按钮Play 图标稍等片刻一个自动排序的 3D 魔方就会出现在视口中。 小技巧想体验更大规模的魔方可以把脚本末尾的size 10调大如 12 或 15动画会更有气势注意该值必须是整数且平面数量随size²增长太大可能导致 Blender 卡顿。八、写在最后你能从 sort_combined 中学到什么对初学者而言这个模块是理解数据结构可视化的绝佳样本二维数组如何组织、材质如何充当数据载体、关键帧如何驱动动画、父子对象如何实现整体旋转都能在 combined_sort_cube.py 里找到最直观的答案。对进阶玩家来说项目还提供了各算法时间复杂度的 Big O 对照表见仓库 README 的 Big O 章节配合动画一起学习抽象复杂度的概念也能瞬间落地。如果你正想找一种有趣的方式入门排序算法或者想在 Blender 里做点酷炫的数学动画不妨就从这枚会自己排序的 3D 魔方开始吧【免费下载链接】Sorting-Algorithms-BlenderSorting algorithms visualized using the Blender Python API.项目地址: https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考