看过《三体》《eva》《星际穿越》等的朋友一定都对高维物体运动感兴趣,今天我们就来将它实现一下。我们选用threejs来做,如果要做更高要求的,运用相同原理重写一下就行啦。下面开始。

第一篇我们来讲讲基本概念:

1.体的边界(包括二维图形,三维体,四维及更多维的超体)

我们称一个东西为有限体,即该体有边界。那么这体的外部和内部怎么区分呢?用集合论的定义。通俗说,在一个空间中,有一个点集为a,如果剩下的点可以分为集合b和c,其中b和c满足:(从b中任意一点到c中任意一点都不存在这样的路径d:(d不包含a中的任何点)),那么a可称为该空间中某体e的边界。进一步,如果b中任意两点距离存在最大值,c中任意两点距离无最大值,则称b为体的内部,c为体的外部。简单上图:

2.四维超体

因为我们活在三维世界(因为我们最多只能找到三个不同向量,他们满足两两之间夹角相等。说到这儿,其实我们是可以像画三维坐标在二维平面上的投影一样画四维坐标在二维平面的投影。关于投影的概念,下面会细述),所以我们并不好想象四维空间。但我们可以用万能的向量来描述。四维空间就是由有四个分量的向量构成的空间,不妨设为(x,y,z,w)。四维超体,我们就先理解为有限体的的边界加内部点的集合就行。

3.投影

点a在某体(包括线,面,体,超体等)上的投影,几何上讲即从a点做直线垂直于该体,并与该体交于点b,点b即所求投影。其实就是求体上的某点b,使向量ab与体中的任意向量内积为0。我们先来考虑投影在坐标轴构成的线,面,体等等上的情况。很显然,点(x,y,z,w)投影在x轴上就是y,z,w分量为0,投影在xy平面上就是z,w分量位0,投影在xyz空间上就是w分量为0。那么投影在非坐标轴构成空间上呢?比如投影在平面上,使用叉乘公式:

det

其中a,b为平面上不在一条直线上的两向量,i,j,k为x,y,z方向上的三个基向量。同理,其他更高维的空间也是一样的,比如四维空间中点投影在某三维空间中:

det

其中a,b,c为所给三维空间中不在一个平面上的向量(即一组基向量)

4,交集

四维物体可能有一部分点在我们所处空间中,即所有分量w为0的点我们都能观察到。进一步推广,求某四维体m在三维空间,如线性空间ax+by+cz+dw=e(其中a,b,c,d,e为常量)中的点,通过联立一下方程可求。

5,旋转

讲到旋转,就是动态的一个东西了,这是为了让我们更好地观察高维物体不得不引入的概念,它涉及到了速度的概念。在此,我们简单定义一下:

点a在绕体b做旋转运动,指的是点a当前速度方向与该体垂直,且点a的当前速度方向也垂直于点a到该体的距离向量。四维体绕某平面旋转,即四维体中每个点都在绕该平面旋转。这里我们先说简单的,比如四维空间中u点绕zw平面旋转(即在某平行于xy平面(垂直于zw平面)的平面旋转),根据旋转公式推广得(x1,y1,z1,w1)=(x0,y0,z0,w0)M,

其中M=,(x0,y0,z0,w0)为u点原位置,(x1,y1,z1,w1)为u点旋转a角度后位置。围绕其他一般平面的,我们先写个思路,可以通过联立方程求出投影点(联立方程:1,满足投影点在该平面上;2,满足u到其投影点构成的向量垂直于平面上的基向量。此方法亦可用与四维点在三维空间中的投影以及更高维情况),然后求出运动方向单位向量v,再将旋转夹角进行正交分解,得axy,axz...即得Mxy,Mxz,Mxw,Myz...它们的成积就是所求M

说了那么多,主要是想表明对于高维空间,我们必须多使用集合,矩阵,向量等通用概念和方法去描述,这样我们才好理解和推理。如果还有什么疏漏没说,下篇博客再说吧

######################################################################################

附:四维超体在三维空间的投影

几个关键点:

1、泛正方体

二维中为方形:

-a<x<a , -a<y<a

三维中为正方体

-a<x<a , -a<y<a, -a<z<a

四维中为超立方体

-a<x<a,-a<y<a,-a<z<a,-a<m<a

可理解为我们的世界为m为0点处的四维世界,由于上述超立方体中x,y,z取值范围与m无关,当该超体与我们世界相交,即m取值在-a到a之中时,其他三维取值范围不变,在我们世界中始终未一个立方体。现通过正交变换对立方体进行旋转变换:

x=1,0,0,0

y=0,1,0,0

z=0,0,1,0

m=0,0,0,1

v1 = a1x+b1y+c1z+d1m

v2 = a2x+b2y+c2z+d2m

v3 = a3x+b3y+c3z+d3m

v4 = a4x+b4y+c4z+d4m

v1,v2,v3,v4两两正交

可得其中一解为

1,1,1,1

1,1,-1,-1

1,-1,1,-1

1,-1,-1,1

得表达式

-a<x+y+z+m<a ,-a< x+y-z-m<a, -a< x-y+z-m<a, -a< x-y-z+m<a

m取值在-a到a之中时,其他三维取值发生改变

以下为源代码:

            var container;var renderer;var scene;var camera;var group;var i = 0;var t = -10;var swi_tch = 1;var daz = 0.2;function circle(){scene.remove(group);requestAnimationFrame(circle);camera.lookAt(scene.position);persSuperCube(t);if(swi_tch==1){t = t + 0.5;if(t>30){swi_tch=0;}}else{t = t - 0.5;if(t<-30){swi_tch=1;}}}function onKeyDown(e){//alert(e.keyCode);if(e.keyCode==32){circle();}}function persSuperCube(t){group = new THREE.Group();var meshsss = [];for(var i=0;i<24;i++)for(var j=0;j<24;j++)for(var k=0;k<24;k++){if(meshsss[i]==null){meshsss[i]=[];}if(meshsss[i][j]==null){meshsss[i][j]=[];}var x=i-12;var y=j-12;var z=k-12;var m=t-12;if(x+y+z+m>-12 && x+y+z+m<12 && x+y-z-m>-12 && x+y-z-m<12 && x-y+z-m>-12 && x-y+z-m<12 && x-y-z+m>-12 && x-y-z+m<12){meshsss[i][j][k]=new THREE.Mesh(new THREE.BoxGeometry(2, 2, 2 ),new THREE.MeshNormalMaterial( { overdraw: 0.5 } ));meshsss[i][j][k].position.x = 2*x;meshsss[i][j][k].position.y = 2*y;meshsss[i][j][k].position.z = 2*z;meshsss[i][j][k].matrixAutoUpdate = false;meshsss[i][j][k].updateMatrix();group.add(meshsss[i][j][k]);}}scene.add(group);renderer.render(scene,camera);}function init(){//document.addEventListener( 'keydown', onKeyDown, false );container = document.createElement( 'div' );document.body.appendChild( container );group = new THREE.Group();camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 10000 );camera.position.x = 140*Math.sin(Math.PI/4);camera.position.y = 140*Math.cos(Math.PI/4);camera.position.z = 150;camera.rotation.x = -Math.atan(camera.position.x/camera.position.z);camera.rotation.y = Math.atan(camera.position.y/camera.position.z);camera.rotation.x = -0.25 * Math.PI;camera.rotation.y = 0.25 * Math.PI;scene = new THREE.Scene();scene.add(camera);var x, y,z=0;var meshsss = [];for(var i=0;i<40;i++)for(var j=0;j<40;j++)for(var k=0;k<40;k++){if(meshsss[i]==null){meshsss[i]=[];}if(meshsss[i][j]==null){meshsss[i][j]=[];}x=i-20;y=j-20;z=k-20;if(x+y+z>-15 && x+y+z<15 && x-y+z>-15 && x-y+z<15 && -x+y+z>-15 && -x+y+z<15 && -x-y+z>-15 && -x-y+z<15){meshsss[i][j][k]=new THREE.Mesh(new THREE.BoxGeometry(2, 2, 2 ),new THREE.MeshNormalMaterial( { overdraw: 0.5 } ));meshsss[i][j][k].position.x = 2*x;meshsss[i][j][k].position.y = 2*y;meshsss[i][j][k].position.z = 2*z;meshsss[i][j][k].matrixAutoUpdate = false;meshsss[i][j][k].updateMatrix();group.add(meshsss[i][j][k]);}}scene.add(group);var meshx = new THREE.Mesh(new THREE.BoxGeometry(200, 1, 1 ),new THREE.MeshNormalMaterial( { overdraw: 0.5 } ));meshx.position.x = 100;//meshx.rotation.z = 0.25 * Math.PI;meshx.matrixAutoUpdate = false;meshx.updateMatrix();scene.add(meshx);var meshy = new THREE.Mesh(new THREE.BoxGeometry(1, 200, 1 ),new THREE.MeshNormalMaterial( { overdraw: 0.5 } ));meshy.position.y = 100;//meshy.rotation.z = 0.25 * Math.PI;meshy.matrixAutoUpdate = false;meshy.updateMatrix();scene.add(meshy);var meshz = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 200 ),new THREE.MeshNormalMaterial( { overdraw: 0.5 } ));meshz.position.z = 100;//meshz.rotation.x = 0.25 * Math.PI;meshz.matrixAutoUpdate = false;meshz.updateMatrix();scene.add(meshz);renderer = new THREE.CanvasRenderer();renderer.setClearColor( 0xffffff );//renderer.setPixelRatio( window.devicePixelRatio );renderer.setSize( window.innerWidth, window.innerHeight );container.appendChild( renderer.domElement );renderer.render(scene,camera);circle();}

四维超体运动在三维空间的表现(使用three.js)相关推荐

  1. 视觉SLAM③:三维空间的刚体运动

    目录 3.0 本章目标 3.1 点与坐标系 3.1.1 点.向量和坐标系 3.1.2 坐标系间的欧氏变换 3.1.3 变换矩阵与齐次坐标 3.2 实践:Align 3.3 旋转向量和欧拉角 3.3.1 ...

  2. 维度探索:三维空间、四维空间和更高维度

    目录 数学维度 从三维世界看一切 什么是维度? 三维空间 四维空间 五维空间 四维超立方体(Tesseract)在三维世界里的投影 事实上,现代物理学的研究工作基于的假设是,宇宙中存在至少10维的空间 ...

  3. 三维空间到四维空间的距离遐想

    如何理解三维到四维的距离呢? 那我们必须找出两个维中的关联物. 正如:测量太阳到地球的距离,我们需要用金星做关联物. 摘录于返朴网:曹则贤2021跨年科学演讲:什么是相对论丨贤说八道 那么三维与四维的 ...

  4. #第六章 四维股市理论数学模型基础6.1四维股市拟合理论的数学基础

    我把用三维或三维以下的数学方法解读四维或四维以上数学现象的理论暂且称为伪四维或者跨维解读.实际上,这类理论已经发现三维数学系统中存在的不足,从而通过增加考量因素的方法试图解决跨维解读的问题. 历史上, ...

  5. 人类如何感受到四维空间?

    按照我的理解,人在一只眼睛的情况下,看到的是三维在二维上的投影:因为两只眼睛的存在,两个二维投影经过大脑处理就形成了三维视觉.如果人类有第三只眼(或类似的器官),它能看到加入另一维度的投影,是否就能感 ...

  6. 学术-物理-维空间:四维空间(标准欧几里得空间)

    ylbtech-学术-物理-维空间:四维空间(标准欧几里得空间) 四维空间不同于三维空间,四维空间指的是标准欧几里得空间,可以拓展到n维:四维时空指的是闵可夫斯基空间概念的一种误解.人类作为三维物体可 ...

  7. 训练和验证准确性_通过沉浸式虚拟现实观察动作增强运动想象训练

    1.研究背景       增强运动想象的一种方法是动作观察,也就是观察与运动想象任务相关的身体部位的运动.先前的研究表明,镜像神经元通过模仿来进行动作的理解和学习,从而引起相应区域的激活.因此,当一个 ...

  8. ARKit之路-运动跟踪原理

    版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载.   在前述文章中,我们对AR技术原理进行过简单学习了解,ARKit运动跟踪所采用的技术与其他移动端AR SDK一样,也是采 ...

  9. 通过沉浸式虚拟现实观察动作增强运动想象训练

    <本文同步发布于"脑之说"微信公众号,欢迎搜索关注~~> 1.研究背景 增强运动想象的一种方法是动作观察,也就是观察与运动想象任务相关的身体部位的运动.先前的研究表明, ...

最新文章

  1. android onCreate的两个方法
  2. 现在银行etl还要做拉链表吗_hive 拉链表 实现全量数据 增量更新
  3. 机器学习应用中的UI个性化
  4. c++利用初始化列表在类内部和类外部定义构造函数的区别
  5. 一个 JVM 参数引发的频繁 CMS GC
  6. 看看一个朋友写的代码,大家发表发表意见,比较简单的代码
  7. python---保留两位小数
  8. 计算机网络复习-互联网概述
  9. 服务器2012能安装无线网卡,网件无线网卡在windows 2012支持问题
  10. 分享几款PR常用插件
  11. 道路照明智能监控用5G智慧灯杆网关
  12. matlab中blur函数_matlab-----均值滤波函数的实现
  13. 风险评估(Risk Assessment)
  14. 生活随记-很有意思的评论
  15. 注册表(regedit)
  16. 关于Spring MVC 文件大小超过限制后浏览器无响应解决方案
  17. 绿联硬盘盒linux驱动,绿联 USB3.0 SATA 接口通用移动硬盘盒子体验与选购技巧
  18. lombok中的builder注解居然是一种设计模式:让我们了解一下超级实用的“建造者模式”吧
  19. $GOPATH/go.mod exists but should not
  20. 学而思网校编程python的推出时间是什么时候_自学Python找不到工作?吃鸡半小时,编程五分钟,劝你还是放弃吧...

热门文章

  1. 【图解红黑树】删除居然这么简单?假的吧?
  2. 橙色云CDS案例分享|非标PLC自动化设备远程调试运维
  3. EPOLL在ET模式下会被触发多次么?
  4. 双11程序猿最想要的奢侈品竟然是这些!
  5. 二维数组(3×3)转置
  6. Win11怎么调亮度?Win11调屏幕亮度的四种方法
  7. 补充总结html所有内容,html学习完这篇基本就差不多了
  8. android代码设置drawor色值,Android 着色器 tint
  9. Win11关闭Superfetch服务的操作方法分享
  10. [渝粤教育] 泉州师范学院 闽南历史文化 参考 资料