不同维度的对话:带你进入四维世界

2023-11-06 10:10

本文主要是介绍不同维度的对话:带你进入四维世界,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    上次说到维度时,有人提到了如何理解四维空间的问题。这是一个非常有趣的话题,可是我一直没有用心写一下。前段时间网上出了一部片子叫做Dimensions: a walk through mathematics,据称里面详细介绍了四维空间。我本以为推荐一下这个片子就能少写一篇又臭又长的日志了的,没想到下下来看了之后发现该片奇差,不了解四维空间的人看了半天估计还是不了解四维空间。最近放假比较闲,打算慢慢来扯一下。如果你以前从来没细想过四维空间的话,相信今天你会有一种超凡脱俗的感觉。
    现在,假设我是一个二维世界的人,我不能理解什么是“高度”,什么是“体”,什么是“空间”。你想向我描述三维世界中的立方体。你该怎么说呢?你或许会从立方体的展开图开始谈起:图(a)就是一个立方体的展开图,如果我们剪一个这种形状的纸板,我们可以把它折成一个正方体。我开始好奇了。


    - 你说说该怎么做呢?
    - 先把上面几个正方形折起来,把对应的边粘在一起……
    - 等会儿呢等会儿呢,这几个正方形是稳定的形状呀,它们的边怎么可能挨到一起呢?
    - 傻了吧!在二维世界中它们不是活动的,但是它们可以向第三维度弯折啊!给你画一个图(b)吧,这就是把上面那几个正方形粘合起来的样子,这就成了一个没有封顶、还差一面的正方体……
    - 你耍赖!你这样弯折了之后正方形都不是正方形了,都变成梯形了!
    - 不对,它们仍然是正方形。图(b)的六块区域其实都是正方形,只是由于透视作用,它们看上去好像变“斜”了。
    - 嗯,好吧,你继续。
    - 现在我们得到的是一个有盖的盒子。上面五个正方形(其中有四个由于处于第三维度而变了形)的“内部”已经形成了“空间”了,可以往里面放东西了。要想做成一个封闭的正方体,只需要把剩下的那个正方形合上去就行了,最终结果就像图(c)那样。
    - 咦?图(c)里面,刚才最后要合上去的那个正方形到哪儿去了?
    - 它就是最大的那个正方形。
    - 胡说!那个大正方形是五个小正方形拼成的!这个大正方形刚才在图(b)里也有!
    - 不是的。图(b)里的大正方形的确是五个小正方形拼成的轮廓,但图(c)里的那个大正方形是真实存在的,它就是最后合上去的那一块。这个大正方形也并不是和那五个小正方形重叠在一起,它们在第三维中的层次是不同的。图(c)就是你梦想的那个正方体了,它由六个正方形组成。你在图(c)中看到的一个小正方形,一个大正方形,四个梯形事实上都是正方形,而且它们都一样大。这六个正方形围成了中间的那个“空间”。
    - 我还是不明白。那个大正方形也是在第三维度的,为什么它没变形呢?
    - 这是因为,这个正方形所在的方向不是第三个维度,因此看上去和原来一样。
    - 那同一个方向上为什么又有一大一小两个正方形呢?
    - 唉,真麻烦。这是因为,它们的朝向虽然一样,但在第三维度上的位置不一样。小的那个正方形在第三个维度离我们远一些,看起来就要小一些。
    - 哦!我有点明白了。是不是说,旁边一圈那四个“正方形”是跨越了第三维的,因此在第三维空间中一部分离我们近,一部分离我们远,于是看上去就是由大到小渐变过去的,就像是变形了。
    - 对!你理解得很好!说真的,平时生活在三维空间中,我都还没仔细想过这一点呢。
    - 我好像真的明白了,说错了不要笑我哦。那个“空间”啊,说穿了就是大正方形擦着四个变形正方形在第三维度上向远处的小正方形移动所产生的“轨迹”。
    - 正是正是!
    - 哎呀我彻底明白了。怪不得我们说n维立方体有2^n个点呢,其实道理很简单。其实只需要把n-1维立方体复制一份,然后对应的顶点相连就可以了。这就是n-1维立方体在第n维发生位移的结果,新增的那2^(n-1)条边就是点的轨迹。
    - 哎呀,你太他妈牛B了,读中文系真他妈可惜了。我还给你看一个好玩的东西,让你看看三维立方体是如何旋转的。睁大眼睛仔细看好每个正方形都变到哪儿去了。

    - 我又糊涂了。为什么从第三幅图变成第四幅图时,远处的小正方形能够穿越左边界,让其中一小半跑到边界左边来?
    - 这个确实不好理解。小正方形并没有“穿过”那条竖直的边,那条边在第三维上离我们更近,而它在我们这个方向上的投影又与小正方形重合了。其实你可以看到,它们之间的拓扑关系仍然是不变的。
    - 哦,于是乎远处的小正方形就转到侧面去了,然后又转到离我们近的位置来了,替代了原先大正方形的位置……
    - 回去没事多想想吧。期待你睡觉时能够做出一个三维的梦。
    - 好的。谢了。

 
    好了,现在呢,告诉大家一个秘密,其实我是来自四维空间的人,很多人问我四维立方体是啥样子的,烦死我了,于是写下了今天的这篇日志。


    现在我告诉你,四维立方体是由8个大小相同的三维立方体组成,其展开图如图(a)。图(b)是粘合出来的四维盒子,还差一个盖子没有盖。这些看起来像棱台的东西其实都是根正苗红的正方体,只是由于它们在四维空间中位置不同,发生了透视。


    把盖子盖上后,我们就看到了传说中的四维立方体,这个图形相信很多网友已经很熟悉了。图上有一大一小两个标准模样的立方体,这是第四维度上位置不同但都正对我们的两个“三维面”。其它棱台其实都是正方体,只是看上去因透视而变形。四维立方体可以看作是三维立方体的移动轨迹,因此画一个四维立方体很简单:画两个三维立方体,然后连接对应顶点即可。观察四维立方体的旋转,你会看到里面的小立方体穿过一个面跑到了外面,而后又变成了最外面的大立方体。这一切都和二维向三维的推广是类似的。仔细观察思考,你还会发现更多可以类比的地方。

这篇关于不同维度的对话:带你进入四维世界的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/355964

相关文章

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.