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

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

相关文章

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

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

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}