文章目录

  • 1 超立方体
  • 2 Processing实现可视化
  • 3 拓展知识(图论)
  • 4 参考资料

1 超立方体

  百度百科对超立方体的描述:超立方体是数学中立方体的四维类似物,所谓的点动成线,线动成面,面动成体。在四维空间(非三维-时间概念)中,立方体的移动形成四维的超立方体,由无数个立方体所组成的,具有四维的观念。

  在几何学中,超立方体是立方体的四维类比,有8个立方体胞。四维超正方体之于立方体,就如立方体之于正方形。它是四维欧式空间中6个四维凸正多胞体之一。

  那么它的概念图呢,就长成下面这样。

  下面解释一下这个概念图是怎么来的。拿我们三维空间举例子,我们就生活在三维空间,我们眼中看到的景象全部都是物体在我们视网膜上的投影,也就是说我们眼中的其实是三维空间的物体到二维平面上的投影。借助这个思路,虽然我们没办法想象超立方体是什么样的,但是我们可以借助投影,将四维下的超立方体投影到三维空间下,我们不就能看见了么。所以上面这个概念图,它就是超立方体在三维空间下的投影。

2 Processing实现可视化

  知道了它是投影来的,我们就可以用一些工具,来模拟一下这个投影,这里我用的是Processing,利用旋转矩阵旋转超立方体,运行出来就是下面这个样子。

下面是代码,有兴趣的朋友可以自己下载一个Processing,运行一下玩一玩。

theta = 0
points = []
def setup():size(1000, 800, P3D)global points# 四维空间下超立方体16个顶点的坐标points =[[-100, -100, -100, 100],[100, -100, -100, 100],[100, 100, -100, 100],[-100, 100, -100, 100],[-100, -100, 100, 100],[100, -100, 100, 100],[100, 100, 100, 100],[-100, 100, 100, 100],[-100, -100, -100, -100],[100, -100, -100, -100],[100, 100, -100, -100],[-100, 100, -100, -100],[-100, -100, 100, -100],[100, -100, 100, -100],[100, 100, 100, -100],[-100, 100, 100, -100]]def draw():global theta, pointsbackground(0)translate(width/2, height/2)rotateY(-PI/2)projected3d = []for v in points:stroke(255)strokeWeight(16)noFill()# 一堆旋转矩阵rotationXY = [[cos(theta), -sin(theta), 0, 0],[sin(theta), cos(theta), 0, 0],[0, 0, 1, 0],[0, 0, 0, 1]]rotationXZ = [[cos(theta), 0, -sin(theta), 0],[0, 1, 0, 0],[sin(theta), 0, cos(theta), 0],[0, 0, 0, 1]]rotationXW = [[cos(theta), 0, 0, -sin(theta)],[0, 1, 0, 0],[0, 0, 1, 0],[sin(theta), 0, 0, cos(theta)]]rotationZW = [[1, 0, 0, 0],[0, 1, 0, 0],[0, 0, cos(theta), -sin(theta)],[0, 0, sin(theta), cos(theta)]]rotationYW = [[1, 0, 0, 0],[0, cos(theta), -sin(theta), 0],[0, 0, 1, 0],[0, sin(theta), 0, cos(theta)]]rotationYZ = [[1, 0, 0, 0],[0, cos(theta), -sin(theta), 0],[0, sin(theta), cos(theta), 0],[0, 0, 0, 1]]v = matmul(rotationXY, v)v = matmul(rotationZW, v)# 投影w = 100 / (200 - v[3])projection = [[w, 0, 0, 0],  [0, w, 0, 0],[0, 0, w, 0]]v = matmul(projection, v)projected3d.append(v)point(v[0], v[1], v[2])for i in range(4):connect(0, i, (i+1) % 4, projected3d)connect(0, i+4, ((i+1) % 4)+4, projected3d)connect(0, i, i+4, projected3d)for i in range(4):connect(8, i, (i+1) % 4, projected3d)connect(8, i+4, ((i+1) % 4)+4, projected3d)connect(8, i, i+4, projected3d)for i in range(8):connect(0, i, i+8, projected3d)theta += 0.03# 连接点
def connect(offset, i, j, points):i, j = i + offset, j + offsetstroke(255)strokeWeight(1)line(points[i][0], points[i][1], points[i][2],points[j][0], points[j][1], points[j][2])# 矩阵乘法
def matmul(a, b):rowsA, colsA = len(a), len(a[0])res = []for i in range(rowsA):n = 0for j in range(colsA):n += a[i][j]*b[j]res.append(n)return res

3 拓展知识(图论)

  定义:k−k-k−维立方体或超方体QkQ_kQk​是一个简单图,其顶点是分量取自{0,1}\{0,1\}{0,1}的所有k−k-k−元组,边是恰在一个位置上取不同值的kkk元组对。QkQ_kQk​的一个j−j-j−维子立方体是同构与QjQ_jQj​的QkQ_kQk​的子图。

  我们知道的正方体就是Q3Q_3Q3​,上面讲的超立方体就是Q4Q_4Q4​

  超方体是一种很自然的计算机结构。如果处理器对应于QkQ_kQk​中的邻接节点,则它们之间可以直接通信。用来命名顶点的kkk元组可以视作处理器的地址

  超方体的结构:QkQ_kQk​中顶点的奇偶性是由该顶点的名字中包含的1的个数的奇偶性而决定的。QkQ_kQk​中每条边有一个偶端点和一个奇端点。因此,偶顶点构成一个独立集,奇顶点也构成一个独立集,进而QkQ_kQk​是一个二部图。

  kkk元组的每个分量可以取两个值,所以n(Qk)=2kn(Q_k)=2^kn(Qk​)=2k。对于一个顶点,确定其名字中的一个位置并将该位置的值修改成另一个值,就可以得到它的一个相邻顶点。于是,QkQ_kQk​是k−k-k−正则的。由于含有nnn个顶点的k−k-k−正则图有nk/2nk/2nk/2条边,所以e(Qk)=k2k−1e(Q_k)=k2^{k-1}e(Qk​)=k2k−1

4 参考资料

  • 百度百科超立方体
  • 代码实现参考的bilibili上的一个视频
  • 《图论导引》P26,定义1.3.7

超立方体及其可视化(Processing)相关推荐

  1. 【数据挖掘笔记二】认识数据

    2.认识数据 提出一些问题来开启数据的认识.数据由什么类型的属性或字段组成?每个属性具有何种类型的数据值?那些属性是离散的,那些事连续值的?数据值如何分布?什么方法更好地可视化数据可看出离群点?如何度 ...

  2. processing文本可视化_推荐7个数据可视化工具,让你的信息快速生成可视化

    现在我们对可视化信息的需求越来越高,可视化信息比传统的文本信息更吸引眼球,方便阅读,加深记忆,因此也可以更快地被人们传播出去.近年来涌现出了许多数据可视化工具.有哪些值得使用呢?下面与大家分享九大数据 ...

  3. Processing摸索前行(9)-音频可视化

    processing的优势在于数据可视化,那么利用它来做音频可视化想必也是许多学习processing小伙伴的一种目标,在processing中并没有提供自带的库文件来实现,都是通过第三方的库文件来实 ...

  4. 互动影像设计:音乐可视化作业 processing

    processing音乐可视化作业 作业中用的是aespa的发行单曲<Black Mamba>,图片来自aespa官方微博,侵删 效果如下 代码部分 周围圆轨迹.中心圆.图片在Partic ...

  5. Processing 案例 | 可视化网络爬虫爬遍网络

    文章目录 引言 代码 主要思想 主要结构 Grid类 BFS DFS 颜色的选取 小结 参考资料 引言 吴军先生在他的<智能时代>中曾经提到:"如果我们把资本和机械动能作为大航海 ...

  6. 【花雕动手做】有趣好玩的音乐可视化系列小项目(26)--LED 超立方体

    偶然心血来潮,想要做一个声音可视化的系列专题.这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累 ...

  7. 炫酷的可视化工具:processing 初识

    为了让你明白这个工具到底有多炫酷,先来几张图震撼一下你吧: 你相信吗,上边这些图都是 js 实现的哦,真真不是ps的成果,是不是很强大. 接下来,我们一起学习一些这个 processing 怎么实现这 ...

  8. 用Processing实现北京地铁的一天动态可视化

    文章目录 一.项目思路 1.1 地图背景使用卫星地图图片,地铁站点用ellipse()展示,地铁线路用line()绘制,站点和线路的的颜色分别使用fill()和stroke()控制. 1.2 在set ...

  9. Digital Signal Processing 数字信号处理

    DSP是什么       | 数字信号处理 | 数字信号处理器 | DSP处理器与通用处理器的比较 |       Digital Signal Processing 数字信号处理       作为一 ...

  10. 《Python数据可视化编程实战》——5.5 用OpenGL制作动画

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第5章,第5.5节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

最新文章

  1. 《从零开始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器
  2. 史上最大中文知识图谱,规模达1.4亿,现在开源可下载,还有配套聊天机器人API...
  3. phpmyadmin同时连接多个服务器的数据库
  4. 删掉java影响什么_java带来的影响
  5. CSS浏览器兼容性问题详解总结
  6. 观察者模式——解耦利器
  7. 练习答案-分支与循环-超市买苹果练习-猜数字小游戏
  8. Python 之详解深拷贝和浅拷贝
  9. updatechecker.java_Mybatis中出现net.sf.ehcache.util.UpdateChecker.checkForUpdate问题解决方案...
  10. 蓝桥杯 ALGO-11算法训练 瓷砖铺放(递归/动态规划)
  11. 【java.lang.UnsupportedClassVersionError】问题的解决方法
  12. 【SaaS - Export项目】用户登录,显示,退出 删除session中的用户信息 销毁session
  13. 教你自定义百度网盘分享密码 提取码
  14. bin文件用cad打开_bin文件怎么打开?实测可靠方法
  15. Debian/Ubuntu系统命令终端提示无法定位软件包解决方法
  16. 基于微信小程序实现番茄钟专注时间项目演示【附项目源码+论文说明】
  17. Excel表格中数据比对和查找的几种技巧
  18. 利用Python进行数据分析之超市零售分析
  19. 什么是 EventLoop ?
  20. 在blast中E值(E value)是什么?

热门文章

  1. html5标题标语,弘扬传统文化宣传标语
  2. 签名档php,签名档文字
  3. MATLAB与线性代数--简化阶梯矩阵
  4. 三维地图开发三维地图服务器
  5. 可以用的网上图片地址(转载)
  6. 黑客游戏系列--------第二关
  7. IDEA 如何新建Source Folder
  8. svn clean up 失败
  9. python建立ARIMA模型进行时间序列分析(氵论文)
  10. 标准C语言程序设计第七版pdf,C语言程序设计 201607.pdf