【老C真·扯淡】时间与维度
原创文章,转载请注明出处,thx!绝对时空观中,我们所熟知的四个维度如下:
0维:点、1维:线、2维:面、3维:体
在爱因斯坦引入相对论后,时间维度不再单独分立而被整合在四维(线、面、体、时间)时空中。
那么不考虑弦理论、多维宇宙,如果我们构造一个描述时空的函数的话应该是这样的:Φ(a,b,c,d)=UniverseElement;UniverseElement属于时空集合。好了“如果”l表示第一维:线,p表示第二维:面,s表示第三维:立体,t表示第四维:时间的话我们令a,b,c,d属于集合{l,p,s,t}.则构造函数Φ(a,b,c,d)可以访问宇宙中任意时刻与位置。
那么为什么说a,b,c,d属于集合{l,p,s,t}而不直接得出Φ(l,p,s,t)呢?因为集合中元素没有顺序,因为此时我们没法确定顺序即维度关系。而接下来我将扯淡扯给大家听怎么确定维度关系。是不是l,p,s,t分别属于1,2,3,4维度?
我们先引入多维数组的概念。请允许我使用C语言表示。第一步我们科普一下C语言知识:int表示整数。我们可以定义一个整数型变量:int i;并给其赋值0:i=0;接下来我们定义一个一维整数数组:int A;那么我们就有了三个整数型变量,分别为:A;A;A相当于:int A0;int A1;int A2;三个变量。对数组的赋值要对元素逐个赋值:A=3;A=7;A=4;。这样是不行的:A=3;。接下来我们定义二维数组:int AR;我们一下拥有了6个变量:AR;AR;AR;AR;AR;AR;。以此类推,我们定义三维数组:int ARR;拥有27个整数。四维数组:int ARRA; 2*3*4*5=120个整数。当然,5维数组ARRAY,6维数组……也是可以定义的。
不好理解?没关系,下面我用纯几何讲解多维数组:
0维就是单个存储一种类型的变量,比如名称为a的整形变量:int a;可以看作一个点。而线由为数众多的点构成。这便是一维数组。那么一维数组int a;可以看作由10个点构成的线。二维数组int a;也很好理解:一个拥有5行,每行5个点的面。那么一共拥有5*5=25个点(0维元素)。三维数组int a;即为长2宽3高4的长方体。那么一共拥有多少种0维元素呢:2*3*4=24个int。4维数组已经不好画图了,但是不影响我们去理解。那么int a;表示的是5个长2宽3高4的长方体。
[图1]
好了,基本概念有了,接下来讨论一个问题:为什么我们很难接受维度超过3.
原因很简单,就是因为我们愿意“观察”事物。
那么从遗传学的角度来讲,我们必须承认 “直立行走”是人类进化史上的重要一步。因为直立起来的人类解放了用以劳动的双手。这个过程是有利有弊的。人类一旦直立,势必造成鼻部离开地面,这直接导致了我们的嗅觉退化(听起来像是扯淡?其实就是扯淡,因为没人能精确知道结果,但是我这个“蛋”扯得还算有依据)嗅觉的退化导致我们会去更多地使用听力和视力。这个观点很好理解,也很好被证明:美术,音乐,是自古就流行的的艺术。有没有一种艺术叫做:“鼻艺”呢?哦,抱歉,我只听说过“颜艺”,而且这属于视觉。(<-somebody is bullshiting,but bulling the reasonable shit.)现在,我们需要重点关注“视觉”。好了简述一下人类视觉器官:“眼球”结构。大致是:光线从瞳孔进入晶状体,由晶状体进行折射,折射后的光线经过透明的玻璃体打在视网膜上。视网膜是什么样的呢?当然是曲面。既然是面,必然是二维的。(话已至此,相信聪明的大家已经明白)。进一步说明:所有世界上3维物体反射或者散发出来的光线投射至视网膜,都变成了二维的了。那么我们如何感知空间距离?事情是这样的:我们拥有两只同时在面部前方向前看的眼睛。两只眼睛之间拥有距离。这时,根据[图2]原理,我们的肌肉会觉察出两只眼球位置的变化,从而产生距离感。如果你是独眼龙,请做个实验(当然千万不要为了这个实验弄瞎一只自己的眼睛,你用布条堵住一只也可以嘛):请使用你的一只眼睛,如图3,将针尖对在一起。
进一步说明。我们现在玩的3D游戏,本质上就是将3维物体之间的距离通过透视“近大远小”的法则将3维物体的投影绘制在平面的显示器上。这就不难理解为啥我们对2维的东西这么有好感了吧。
大家的疑惑可能已经解开,为什么计算机科学中的数据库原理讲关系数据库都是一张张二维表的集合呢?其中“关系”就是表(二维)。“元组”和“属性”也就是 行 与 列 就是1维?答案不言而喻。
请看,我在图1中表示一个3维立方体,不也是绘制在了2维平面上吗。好理解了吧。
这里大家将思维发散一下:知道为啥微软在win95中尝试各种花里胡哨的界面最终失败,现在3d技术如此发达,却没有一个操作系统的图形用户界面是3维的,都是一张张2维“窗体”了吧。
三维物体几乎是很多人理解的极限了。这里我要教大家将时间维度加进去。其实非常好理解,使用听觉即可。
我需要大家用mp3播放一首beethoven的命运交响曲。命运交响曲的旋律节奏大概在1秒左右。现在我要求大家拿起手边的书,每听到两个节奏在原先的书上再堆放一本上去。此时,书可以看作一个平面,堆放起来的书垛就是三维的了。每两个节奏一次,次数和书垛高度之间的形成一次函数关系。这个一次函数自变量(次数)为时间维度和因变量(体积)之间的关系。如果非要加进去1维的话,1维就是每本书的字数啦。每个字不就是0维吗。
维度之间的转换
我的一个让大家接受我的观点的手段是:先灌输一大堆大家不懂的大道理。正当大家听得云里雾里的时候,我来个深入浅出。这时候,大家就能理解看似遥不可及的“大道理”了。
我们知道,计算机内存可是线性结构啊?咋个表示数组?尤其是多维数组?把内存叠加起来?几个维度叠几层?不现实。
事实上,多维数组在内存中的表示是线性的。
在C编译器编译后的C程序中二维数组按行优先存储:
A、A…A、A、A…A…A、A…A
在一些语言编译器编译后的程序中,二维数组按列优先存储:
A、A…A、A、A…A…A、A…A
行优先意味着高维首先排列,维度排列顺序由高至低
列优先意味着低维首先排列,维度排列顺序反之。(这两行长度一定要不一致,大家最头疼语序一样,语义不一样的东西了,最容易看错。)
为了防止大家晕在这里,首先我要说明啥是维度的高低之分。
首先被加入的的包含其他维度(有孩子维)的就是高维。(晕了....我也晕了.....还好有蛇猫牌清凉油)2维(面)包含1维(线),2维就是高维。3维“体”包含二维面,3维就是高维。
好了,我接下来将变个魔术,将高维统统降至2维。2维不变。1维就1维,反正1维0维啥的好理解。
是不是很好理解高维啦?就是多个低维的嵌套。
那么大家不难得出三维数组元素个数公式:
Count(A)=m*n*o
推广到Ω维度的数组:
一个Ω维度的数组,第一维下标a,第二维下标b......
a * b * c * d * e * ...... * (一共拥有Ω-1个乘号)
其中Ω属于N,a属于Z
最后我们来解决文章开头留下的问题:l,p,s,t分别属于哪几维?
首先,空间维度分为1维(线)2维(面)3维(体)。
如果说真的拥有“平行宇宙”的话,每个时间就是一个宇宙。显然,时间维度包含空间维度。
好了,排列下来:最高维度,时间维t,其次s,p二维,l一维的。
老C 真·扯淡
最后的压轴大戏:老C 真·扯淡。带你开开脑洞。
如果说,我们的世界,是我们的“上帝”建造的虚拟机的话……
如果说,上帝那边的计算机使用二进制的话……
如果说,0就是无1就是有,1正物质,0反物质的话……
0+1构成了宇宙大爆炸,诞生了我们的宇宙,
那么我们的本源岂不是代码?
那我们岂不仅仅是计算机存储设备上的信息?
那我们岂不是生活在数组之中?
那么我们要做时间旅行,不就仅仅需要改一下t维度下标即可?
t维度下标存放在那个存储区域?修改t维度“内存”中的线性数据该如何变化?
要见到我们的上帝,是不是需要来个虚拟机逃逸?上帝工作的公司叫做VWWare(Virtual World Ware)吗?
爱因斯坦,牛顿,伽利略……是上帝这个世界和我们这个虚拟世界沟通的API吗?
我吃的不是牛排,是代码……
我开的不是心,是代码……
我爱的不是你,是代码……
我扯得不是蛋,是真的有可能哦!
如果大家喜欢“老C 真·扯淡”这个系列,别忘记留言回复哦!
【完】cyycoish 201511130719
页:
[1]