news 2026/8/18 17:02:36

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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-Blender

Sorting-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()函数(源码位置)生成这些面板,再用不同的"摆放参数"把它们立到魔方的不同方位上。

每个面的"姿势"由参数variation(1~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 * 2

6 个面板与 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)是整段代码的地基,它完成三件关键工作:

  1. 生成平面网格:按j*2i*2的间距铺出一整排小平面,存进二维数组Matrix
  2. 赋予"身份":创建名为Parent + 编号的父对象,把所有平面挂到父对象下,随后按变体参数旋转、平移父对象——这样整个 2D 数组就被整体"立"到了魔方的某个面上;
  3. 打乱初始顺序:每一行都执行random.shuffle(),保证每个面都以乱序状态开始排序,动画效果更直观。

值得一提的是,每个面还会生成一张"日落渐变"(sunset gradient)材质:红色从 0 渐变到 255、绿色从 0 渐变到 200、蓝色从 200 渐变到 100,让 10 列平面拥有从暖到冷的连续色带,视觉上极具辨识度。

四、颜色即数值:get_rg 如何用材质颜色排序

这是sort_combined最巧妙的设计:排序比较的"数值"不是数字,而是材质颜色

排序时,算法不断读取两个平面的diffuse_color(漫反射颜色),再交给get_rg()函数(源码位置)提取红色通道 R 与绿色通道 G,二者相加得到比较值rg。谁的 R+G 大,谁就"更大",需要往后排。

这种做法的好处显而易见:观众无需理解复杂的数值交换,只需盯着颜色深浅就能直观看出"大的往右、小的往左"的排序过程,非常适合教学演示。

五、六个面、六种算法:每一面都在独立排序

脚本按"正面 → 顶面 → 底面 → 背面 → 左面 → 右面"的顺序依次处理,每个面内的 10 行数组分别跑一遍对应算法。每次元素交换,脚本都会插入关键帧,让平面平滑地"滑"到新位置。

由于每个面的排序都会生成大量关键帧,脚本还做了帧号衔接处理:每完成一个面,main_frame会跳到上一个面结束的帧号并预留 25 帧空档,避免六个面的动画在时间轴上互相重叠。

六、middle_pivot 旋转魔法:让魔方逐面"翻给你看"

六个面排完后,高潮来了:脚本创建一个名为middle_pivot的小立方体(源码位置),把六个Parent全部挂到它下面,然后通过旋转关键帧让整个魔方逐面翻转(源码位置):

  • 希尔排序完成 → 绕 X 轴旋转 90°,露出顶面;
  • 插入排序完成 → 继续转到 180°,露出底面;
  • 冒泡排序完成 → 转到 270°,露出背面;
  • 快速排序完成 → 绕 Z 轴旋转,露出左面;
  • 选择排序完成 → 再绕 Z 轴旋转,露出右面(归并排序)。

就这样,观众能在同一个动画里,看到 6 种排序算法在同一个 3D 魔方上轮番演出,互不干扰又浑然一体——这正是sort_combined名称的由来:combined(组合)

七、5 步上手:在 Blender 中亲手生成排序魔方

想亲自体验并不难,只需要 5 步:

  1. 从官网下载并安装免费的 Blender(任意较新版本即可);
  2. 将项目克隆到本地:git clone https://gitcode.com/gh_mirrors/so/Sorting-Algorithms-Blender
  3. 打开 Blender,在顶部编辑器类型中选择Text Editor(文本编辑器)
  4. 打开sort_combined/combined_sort_cube.py文件;
  5. 点击文本编辑器里的"运行脚本"按钮(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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 17:02:30

从 0 到 1 复刻 PullToMakeSoup:打造你自己的动画下拉刷新组件

从 0 到 1 复刻 PullToMakeSoup:打造你自己的动画下拉刷新组件 【免费下载链接】PullToMakeSoup Custom animated pull-to-refresh that can be easily added to UIScrollView 项目地址: https://gitcode.com/gh_mirrors/pu/PullToMakeSoup 你有没有想过&…

作者头像 李华
网站建设 2026/8/18 16:55:59

Agent Zero 框架深度解析:一次任务在 AI 操作系统里的完整旅程

Agent Zero 框架深度解析:一次任务在 AI 操作系统里的完整旅程 【免费下载链接】agent-zero Agent Zero AI framework 项目地址: https://gitcode.com/GitHub_Trending/ag/agent-zero 如果你想找一个开源的 Agent Zero 框架来做深度研究,那么这篇…

作者头像 李华
网站建设 2026/8/18 16:53:10

ncmdump 免安装转 MP3:NCM 一键还原的 3 步实战教程

ncmdump 免安装转 MP3:NCM 一键还原的 3 步实战教程 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump ncmdump 是一个免安装的 NCM 转 MP3 工具:把网易云下载的 .ncm 文件拖到 main.exe 图标上松开,…

作者头像 李华