精华内容
下载资源
问答
  • 五维图怎么做
    千次阅读
    2017-11-07 11:53:15

    最近项目需求,要做一个五维图功能,偶遇一篇博客,受益匪浅,在这里分享给大家~


    文章转载自:http://javascript.ctolib.com/hust201010701-XRadarView.html

    在此感谢原作者分享~

    更多相关内容
  • cocos2dx-lua制作游戏五维图

    千次阅读 2016-07-25 17:56:52
    欢迎使用Markdown编辑器写博客本Markdown编辑器使用[StackEdit][6]...图片链接和图片上传 LaTex数学公式 UML序列和流程 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用

    cocos2dx-lua制作游戏五维图

    首先对五维图的五个顶点采集,可以使用Mark Man. 然后把五个点转为相对于五维图中心点的坐标。

    local pointVec = {
        [1] = {width = 0, height = 79},
        [2] = {width = 81, height = 19.5},
        [3] = {width = 51, height = -74},
        [4] = {width = -51, height = -74},
        [5] = {width = -81, height = 19.5}
    }

    这五个点的顺序是从最上面按照顺时针排序的,可以根据自己的需求排序。
    接下来有两种选择:
    - 使用cocos2dx-lua自带的DrawNode来画出五维图,可以自己百度一下怎么做,因为这种方式画出来的线会有锯齿,所以被我放弃了。
    - 使用一张渐变的线条图片进行拉伸操作。
    接下来我使用第二种方式实现。

    function Ref:drawPoly()
        local vertices = {}
        for i=1,#self.creature.totalAttr do
            local percent = self.creature.totalAttr[i] / limit
            local x,y = pointVec[i].width * percent, pointVec[i].height * percent
            table.insert(vertices, cc.p(x, y))
        end
        for i=1,#vertices do
            local point1 = vertices[i]
            local point2 = {}
            if i == #vertices then
                point2 = vertices[1]
            else
                point2 = vertices[i+1]
            end
            local vec = {}
            --向量以下为正方向
            if point2.y < point1.y then
                vec = cc.p(point2.x-point1.x, point2.y-point1.y)
            else
                vec = cc.p(point1.x-point2.x, point1.y-point2.y)
            end
    
            local angle = math.deg(math.acos(vec.x / (math.sqrt(math.pow(vec.x, 2) + math.pow(vec.y, 2)))))
            local midPoint = cc.p((point1.x+point2.x)/2, (point1.y+point2.y)/2)
            local length = math.sqrt(math.pow((point2.y-point1.y),2)+math.pow((point2.x-point1.x),2))
            local line = cc.Sprite:create(linePath):addTo(self.ccbNodeDrawLine):move(midPoint)
            line:setRotation(angle)
            line:setScaleX(length/line:getContentSize().width)
            line:setScaleY(0.6)
            cc.Sprite:create(pointPath):addTo(self.ccbNodeDrawLine):move(vertices[i])
        end
    end

    效果示意图:
    这里写图片描述

    注:代码部分变量在其他地方定义,不影响逻辑,请改为自己定义的变量。

    展开全文
  • 原标题:一张让你看清楚从0到10的终极解释长假期间,知著转发了一篇关于《一张弄明白从零维到十维空间》,没想到引发了最火爆的转发,目前为止,有50多万的点击率,评论也有数百条。该文的原文是转自公号...

    原标题:一张图让你看清楚从0维到10维的终极解释

    长假期间,知著转发了一篇关于《一张图弄明白从零维到十维空间》,没想到引发了最火爆的转发,目前为止,有50多万的点击率,评论也有数百条。该文的原文是转自公号“商老师的设计学堂”。

    不过,看了这个估计还有很多争议。七祖虽然毕业于华中科技大学和复旦大学,但只是文科生,尽管属于科幻迷,但对于高能的物理学还是知之甚少,我找到两个材料可以参考:一个是好玩版本,一个是严肃版本。

    《从0维到10维的通俗解释》

    0维,就是一个点,没有长宽高

    1维:一根线

    2维:长宽

    3维:长宽高

    4维:加入时间线,在4维空间的人可以随意访问未来和过去的任何一点,但无法改变未来和过去。

    9389380034ae02bcb364babf4e83599e.png

    5维:可以改变未来与过去,4维空间的人回到过去所做的任何事,都会立刻影响到这条时间线的所有事情,但5维空间的可以看到所有时间线,也就是说,在5维空间里的人是能够预见到所有蝴蝶效应的,可以参见《黑衣人3》里的那个预言家,他可以看到所有时间线,任何当前的行为,都会让他看到某个时间线因此而消失了,或者某个可能性将会被选择。但一旦某个可能性被选择了,那么其他的时间线就消失了。

    换句话说(按照前面的规律),4维空间的人看到的只是某一条时间线里发生的所有事情,他无法从一个时间线,跳到另一个时间线,但5维空间的人可以给4维空间的人提供这样的可能性,他可以非常确定的告诉4维空间的人:你现在只要做某件事情,就可以导致你未来得到某个结果。而4维空间的人显然是不能做到这一点的,因为即使4维空间的人回到过去改变了某件事情,由于蝴蝶效应,他也无法预料到改变这件事情所能够带来什么结果,只能在改变之后才看到。

    c886243db37e39c1fe843e091f90890d.png

    再换句话说,4维空间的人只能看到5维空间的人所看到的所有时间线中的一个截面,如果让一个5维空间的人给一个4维空间的人表演神迹,那就是在4维空间里的人眼前,这条时间线会被5维空间的人随意变化。5维空间的人搅动一下咖啡杯,或许4维空间的人就能看到未来的他在某个时刻的衣服从蓝色变成灰色。

    但是,5维空间的人无法改变因果,也就是说他必须通过影响4维中的某个坐标来达到修改时间线的目的,换句话说,他必须通过因果关系来修改命运。

    就像是《星际穿越》中老爸Cooper在书房里面传递信号给过去的女儿,那个书房是一个四维超立方体,如下图所示,在更高维空间,Cooper只是进到了四方体的一个面上。而另一个面上是他女儿的房间,通过第五维,这两个遥远的空间被连到一起,这个概念和虫洞是一样的。由于光线在低维中穿行,也就是图中的面上穿行,Cooper左右上下都能看到女儿卧室的不同角度,而且前后也可以(这是四维超立方体!想想为什么?)

    7cac13e2c6c16255e0201584ee0263d5.png

    ( 四维超立方体的中的Cooper在六个方向上都可以看到女儿)

    这第五维并不只是空间的第四维(物理学上的高维通常都只是更高的空间纬度),而是一种可以同时看到三个低维和一个时间纬度的更高纬度,用电影里的话说,在这个五维空间里,时间变成了物理的空间纬度,可以同时看到所有时间点。所以诺兰把四维超立方体进行了时间上的拓展,在Cooper 看来,三个方向上,女儿的房间被时间展开,于是由6个方向上可以看到的6个房间,变成了无数个根据时间流逝方向展开的房间,如下图:

    03cb8e24edd7f667896c27ebf822d44f.png

    ( 四维超立方体的时间拓展)

    那么他怎么推动书呢?根据电影的假设(也是物理学的假设),引力是可以穿过高维的,而根据爱因斯坦的广义相对论,引力只是时空的扭曲,时空的扭曲就像高山谷地,而物体的运动只是自然地跟随它们在这扭曲时空中的“世界线”,时空扭曲发生变化,“世界线”也会发生变化,所以通过引力可以改变时空扭曲,进而改变世界线,让物体的运动发生变化。于是电影中每个时间方向上都是物体的“世界线”,就像琴弦一样。Cooper一开始打墙的时候,这些弦就产生波动,也就是世界线开始变化,在时间流动方向传播。简单来说,Cooper可以通过拨动物体的“世界线”来作用于物体。仔细看电影的话也会发现,Cooper后面拨动手表指针的时候其实也是在拨动指针的“世界线”。

    c182a3202f652a55ac65a58c3931e5b8.png

    ( 物体的“世界线”在高维超四方体的时间展开中的表现)

    6维(开始越来越难理解了):6维空间的人不仅可以看到所有的时间线,更可以随意将各个时间线里的事物彼此交换,也就是说6维的人可以随意修改命运,假设一个5维空间的人,看到这样一条时间线:如果一个人在某天某日出门的时候迈左脚,那么十年之后这个人就会变成百万富翁,那么5维空间里的人如果想触发这条时间线,那么他必须回到过去,让那个人出门迈左脚,但是对于6维世界的人来说就没那么麻烦,6维世界的人会问:“你想让他进入那个十年后变成百万富翁的时间线是吧?好的!”然后手指一弹,这条时间线就变成了“十年后他成了百万富翁。”。然后5维空间的人一看,矮油那个人真的当初出门迈了左脚,而且没有被任何人影响,他就是自然而然地出门迈了左脚。

    换句话说,对于6维空间的人来说,时间线是可以被随意切换的,如果一个6维世界的人对一个5维世界的人展示神迹,那么就是在5维世界的人眼里,他看到的所有时间线在不停变化着。(下图为超立方体)

    cb3ce3af79c8b9326001985ae4b91fc2.gif

    说到这里必须引入一个维度扩展的方法论以便帮助接下来的理解了:维度扩展的方式(其实就是不同的手段但最终导致的结果是一样的,都是维度扩展)有:

    1,低维到高维,只需要覆盖所有的低维就可以成为高维,但这个“所有”意味着无限多,比如,无数个点组合在一起就成为了一条线,也就是0维变成了1维,但实际对于0维的生物显然是不可能的。

    三维到四维也是一样,只需要覆盖所有的三维,举个异曲同工的例子:按照物理学家的解释,时间实际上就是物质的运动而已,当所有物质停止运动,那么时间也就停止了,这里说的所有物质停止运动,包括微观粒子如电子原子都统统静止,同位素衰变都停止了。时间也就等于是静止了,在黑洞表面,时间就是静止的。

    2,只需要将本维度所能观察到的看成只是一个截面,一个片段,然后想象所有的截面,能够随意访问所有截面的就是高维生物。

    比如,对于3维空间的生物来说,此时此刻所发生的就是一个截面,你可以想到其他时间发生的事,但你看不到。

    3,用折叠,跳过的方式访问,这个不用多说了。

    502b52ca02f7ba5b4fa0295859deaad3.png

    4,能够创造出另一个低维的人必定是高维的人,比如3维的人可以随意创造出0维、1维、2维(当然实际上是创造不出来的,这里只是比喻),但你让一个1维的人画出另一条1维的线,就不可能。

    那么,结合以上的方法论,5维空间的人看到的截面是什么呢?那就是所有时间线,但他看到的只是有限的可能,他可能会看到,有个人在某个时间出门,会有:迈左脚,迈右脚,摔出去这三种可能,然后导致的后来的时间线结果是:百万富翁,千万富翁,亿万富翁。但他无法说出,如果这个人在那个时间出门是跳出去的会怎样?他无法做出这样的预言,5维空间的人只能来到那个坐标,让那个人跳出去,然后,在5维空间的人的眼前,才会出现这条时间线,当然,接下来,他仍然可以随意影响时间线,再次来到那个坐标,让那个人迈左脚出门。但是出门的方式有无限多的可能性,5维空间的人无法覆盖所有的可能性,他只能一个一个试出来,但“所有”意味着不可能通过一个一个试的方式试完,可能性是无限的。

    接下来就轮到6维的人展示了,6维的人不仅看到了所有时间线,更看到所有可能性,他可以创造时间线,他可以告诉5维的人,你要想他将来变成万亿富翁,只需要让他出门时光脚。然后5维的人这么一试,果然在他面前就又多出了这么一条时间线。

    7维:其实7维空间反而更容易想象,必须特别说明的是,这只是物理界当前最受欢迎、最热门的弦论提出的观点之一,我个人认为这种提法显然有些取巧了。但无论如何还是让我们继续吧。

    前面的6维,已经覆盖了这个宇宙中能够发生的,所有的事,还有什么是7维的人能做而6维的人不能做的呢?那就是这个宇宙。

    宇宙大爆炸理论(同样是猜测没有被证实,但几乎算是被当作被证实了,我认为以人类的智慧不可能完全证明,所以就这么着吧)认为,我们的这个宇宙,是从一次爆炸开始的,而宇宙大爆炸之前是没有空间时间的。时间,只能是这个宇宙的时间,空间,只能是这个宇宙的空间。

    c7d6a73a41a07520b39aad5b2e767d56.png

    从微观上看,这个宇宙所发生的一切,实际上只是各种粒子的运动罢了,时间线、可能性,归根结底都是粒子的变化。而一切一切的变化,都起源于那次宇宙大爆炸。

    想象一场桌球,宇宙大爆炸,就相当于第一下的开球,之后衍生出的所有时间线,所有可能性,都依赖于那个开球。6维空间的人可以看到时间线上所有的可能性,但他看不到“根本不可能的可能性”。

    什么叫做“根本不可能的可能性”,换句话说,你的开球,一下就把一个桌球给打碎了,那么接下来不管是什么变化什么可能性,你都不能说那个桌球会入袋,这个结果已经从一开始就完全被排除了。

    宇宙大爆炸就是这样一种限制,它决定了之后的所有可能性,波函数可以描述某个事件发生的概率,但它不能够描述负空间,那是无法被计算的。

    然后生活在7维空间的人,就是这样一种“能够看到不可能的可能性”的人,7维空间的人,可以看到其他的开球,也就是其他的宇宙大爆炸,也就是其他的平行宇宙。

    96e6d6d3aa4da9e9da8d13321a5d1e02.png

    也许这样想不太好理解,让我们再换个角度,作为一个6维空间的人,他所看到的任何可能性任何时间线,都是基于几个最基础的物理常数:比如光速、普朗克常量,以及其他的种种人类迄今为止发现的或尚未发现的常量。物理常数决定了微观粒子的运动,也就决定了宏观世界的运行方式,那么假设我们修改一个常量会发生什么事?没有人知道,也许按照这个常量推算下来这个宇宙可能就没法存在下去了。但是,根据人择理论,在我们眼中的没法存在也许并不是真正的没法存在。

    所以让我们想象一下,一个7维空间的人和一个6维空间的人会发生这样的对话:

    7维人:如果那个人以每秒钟80万公里的速度出门,那么那个人十年之后将会成为宇宙之王。

    6维人:看了一下,惊呼道:“不可能!这个宇宙里能够达到的最快的速度也才只有30万公里每秒。”

    7维人:神秘的一笑:“是么?但是在另一个宇宙里,最快的速度限制是九十亿公里每秒。”

    对话到此已经足够说明问题了,在6维空间里的人眼里,以每秒钟80万公里的速度出门,就是所谓的“不可能的可能性”。

    811a153d08e3773ea68a78d947bb7bd7.png

    8维:更特么简单了,7维世界的人看到的,是其他的宇宙大爆炸,其他的宇宙常量,但在8维世界里的人,他能看到的是那些有可能出现而未能出现的宇宙大爆炸。也就是其他宇宙大爆炸的可能性(太特么狡猾了,太取巧了)

    在这里,7维到8维,可以参照前面的5维到6维的解释来理解,拿桌球比喻,8维的人能够说出所有的开球,包括把球击碎、击飞等等等等

    9维:8维的人看到了其他宇宙大爆炸的可能性,那么9维的人呢?自然是看到了那些“不可能发生的宇宙大爆炸的宇宙大爆炸”的可能性啦。参照6维到7维的解释,过!

    还是多说点吧,当8维的人将所有可能性都覆盖到的时候,也就成为了9维。还是用桌球来比喻,你不管怎么开球,总还是要用一个杆子击球的,然后就有些奇葩用JJ击球,这显然就是犯规啊!

    我觉得这里要引入人择原理了,所谓不可能也不是不可能,而是人类无法理解的存在而已

    所以到此就看出了弦论的局限,你再往上忽悠该怎么忽悠啦?

    10维:弦论表示到头啦!参照7维到8维的解释。

    a6a4f48242b0aee39d9699b52ef25760.png

    ...文章版权为商老师的设计学堂个人所有...

    ..图片均为商老师手绘..

    .违版必究,如需转载请标明出处.

    事情是这样的,这周我给学生讲3dmax的课。为了让学生了解三视图我就顺便科普了一下什么是零维、一维、二维、三维空间。讲完不过瘾,感觉一支粉笔一块黑板讲维度是一件很爽的事情,那么.........接下来

    请同学们打开脑洞,看我用一支笔几张纸来为同学们展开从零维空间到十维空间之旅吧!

    声明:本文中的理论均依据弦理论物理的知识,结合简单的图示和通俗的道理来解释,不是信口开河,具有科学依据。

    零维

    让我们从一个点开始,和我们几何意义上的点一样,它没有大小、没有维度。它只是被想象出来的、作为标志一个位置的点。它什么也没有,空间、时间通通不存在,这就是零维度。

    4df6d2bfd4744e1c4655b880ab42674d.png

    一维空间

    好的,理解了零维之后我们开始一维空间。已经存在了一个点,我们再画一个点。两点之间连一条线。噔噔噔!一维空间诞生了!我们创造了空间!

    一维空间只有长度,没有宽度和深度。

    b7272d7effda62f2f77a9bef6e452613.png

    二维空间

    我们拥有了一条线,也就是拥有了一维空间。如何升级到二维呢?很简单,再画一条线,穿过原先的这条线,我么就有了二维空间,二维空间里的物体有宽度和长度,但是没有深度。你可以试一试,在纸上画一个长方形,长方形内部就是一个二维空间。

    4ee459c1368f74bffe4467a4a14ca1f8.png

    9a12be6d2b3473e990618ac3bf03a76a.png

    这里,为了帮助大家方便理解高维度的空间,我们用两条相交的线段来表示二维空间。

    75384126c05a6eb7e64cd6f9c7a975f2.png

    为了向更高的维度前进,现在我们现在来想象一下二维世界里的生物。因为二

    维空间没有深度(也可以理解成厚度),只有长度与宽度,我们就可以将它理解成“纸片人”,或者是扑克牌K.J.A Q里的画像。因为维度的局限,这个可怜的二维生物也只能看到二维的形状。如果让它去看一个三维的球体,那么他只能看到的是这个球体的截面,也就是一个圆。

    439a27c582bfe17476f5d534a512bd22.png

    三维空间

    三维空间大家肯定熟悉,我们无时无刻都生活在三维空间中。三维空间有长度、宽度与高度。

    41db9107b82343c8973e0901513a5781.png

    但是,我要用另一种思维来表达三维空间,只有这样,才可以向更高维度推进。

    好,现在我们有一张报纸,上面有一只蚂蚁。我们就姑且把蚂蚁君看作是“二维生物”,我在二维的纸面上移动。如果要让他从纸的一边爬到另一边,则蚂蚁君需要走过整个纸张。但是我们把这张纸卷起来呢?成为一个圆柱,一个三维空间里的物体;这时蚂蚁君只需要走过接缝的位置,就到达了目的地。(对了!就是传说中的虫洞)换句话说,把二维空间弯曲,就得到了三维空间,我们就可以这样来表达。

    c8045ed54ed0853f2945a22ba14ac051.png

    a93a851992e634875fb63ccc5f06eb4a.png

    再解释一遍,在这个图示上,蚂蚁从A点消失,B点出现,你们想想,就是这意思,卷曲产生新的维度!

    e5278da64a358c629f31317405acffc7.png

    7b686505cd178f495fb58785a930b7a4.png

    好了,开始进入烧脑阶段!

    前三个维度我们可以简单理解成长、宽、高。那么我们怎么理解四维空间?

    四维空间

    四维比三维多一维,它是什么?是时间!

    想象一下,左边有一个1分钟之前的我,右边则是现在我,将这“两个我”看成两个点 ,穿过他们连线,它就是四维空间里的线。太棒了,四维空间出现了!

    926e6231d4e90cfad9b217dd3e01d3b2.png

    那么在现实当中我们可以看到过去和未来的我么?不能!因为我们是三维生物,活在三维空间中。 就像上文提到的,那位二维生物只能看到三维物体的截面一样,我们作为三维生物,只能看到四维空间的截面,也就是现在的你、我、他;换句话说就是此时此刻的世界。

    c12c03809639c4813241c5b87fe080fe.png

    f10f1ae2a0d08590ecd572b31e36ff16.png

    你们还可以么?我要开始讲五维空间了哦

    五维空间

    首先我们要明确一点,低维度生物不能意识到高维度空间发生的事情。我们从出生到现在,都感觉自己在同一个空间里。我们常说“随着时间的推移”,其实就是沿着时间线向前,这条时间线就是四维空间里的那条线,换句话说,三维的我们沿着四维空间里的时间线向前走。

    6ca9371425af0035a9119ec4de2ab971.png

    假如我们是四维空间生物,我们就可以看到过去、现在、将来各个时段的我们自己。但是,时间线只有一条,还记得前文中两条线交叉,将一维升级为二维么?那么现在,在四维这条时间线的基础上,我再加一条时间线和这条时间线交叉,五维空间就出现了!

    00f3066e996ca708b629a7407d50d5cb.png

    不懂?没关系!例子举起来!比如说,你大学毕业参加工作,工作了5年,现在是一名经理,那么四维空间里你只能看到大学毕业的你以及成为白领的这条时间线上的你。 如果当初你初中毕业就去学烹饪,现在是一名厨师。那么这就是另一条时间线上的你。

    在五维空间中,你可以看到成为经理的你,也可以看到成为厨师的你。总结的说,五维空间,你可以看到你未来的不同分支。

    1cb635eda110bc32174c481583935542.png

    六维空间

    OK 我开始解释六维空间。现在的你如果想拜访一下过去的你,怎么办?我们可以将四维空间中任意一条时间线弯曲,这样你就可以跳回以前,去见以前的你。换句话说,五维空间中,你可以“穿越”回到一条时间线上的过去。

    还是拿“经理的你”和“厨师的你”举例子,厨师的你感觉日子很艰辛,每天油烟呛人,你想成为经理,安安静静在办公室里坐着。怎么办?五维空间中,你可以穿越到你初中毕业的时候,告诉以前的你,一定要继续读书,上高中,考大学,做白领。不过这很费力,而且风险很大,初中毕业的你需要作出不同的选择,每一种选择都会产生一个新的时间线,一个不同版本的未来。

    你们还记得二维空间中蚂蚁君和报纸么?弯曲一个空间产生一个新的维度。对了!我们直接把五维空间弯曲,产生六维空间。这样,你就可以穿越到“经理的你”这条时间线,看一看另一个版本的你。

    6df6cfcfa5665ec3f69d3ea871930d80.png

    七维空间

    如果你能看到这里,恭喜你,你的脑洞已经很大了。

    好,我们继续,七维空间走起来。还是那个例子,前面提到两个时间线:经理与厨师。初中毕业的你,不可能只有这两种选择,而是近乎无限。怎么解释,你的每一个决定都在塑造出一个特有的你。你可以成为任何一种你。概括地说,初中毕业的你是一个起点,所有的时间线。都从这个点向外辐射,数量是无穷大,那么最后,七维空间里的一个点,里面包含着“初中毕业的你”开始的无限种可能。

    bd3da920525bfa2db5c78f1477bbf05f.png

    48d8221b15eb61fadf16637512082bc0.png

    那么怎么画出七维空间里的一条线?我们需要另一个点,但是这个点已经包含了无限,如何再去找另外一个点?那就是另一种开端。

    没关系,我们举例子,你会懂得。前文中我们提到由“初中毕业的你”为开端而产生的七维无限点;如果你小学毕业的时候就作出不同的选择呢?每一个选择又会塑造一个不同的你;那么以“小学毕业的你”为开端,就会产生另一个包含着无限时间线的点。将这两点连成一条线,就是七维空间的线。

    1e606ae1df2140fbf219abd93dadcd40.png

    八维空间

    还记得文章开始时提到的一维的线么?我们把另外一条线穿过它,就变成了二维空间。同样的道理,我们来给七维空间升级。例子呢,还是那个“你”。我们又找到了两个点,一个是由“大学毕业的你”为开端产生的七维无限点,另一个是由“50岁的你”为开端产生的无限点。将这两点连线,与上文中那条连接“初中毕业的你”无限点“小学毕业的你”无限点的这条线相交。我们就得到了八维空间!

    c44ab62e7ebb8fcaf4335d52a960f684.png

    九维空间

    好了,讲到这里,你其实可以想象出九维空间是什么样了。我们把八维空间理解成那张报纸,平平的。这时蚂蚁君又出现了,不过它已经进化成八维空间生物了,给它一样的任务,要他横跨整个报纸去目的地,怎么办?将报纸再一次卷起来,虫洞又出现了。蚂蚁君顺利穿过虫洞出现在目的地。也就是说,将八维空间继续卷曲,我们就得到了九维空间!

    a906e0f4fe43710ea5d0cd942e5abe39.png

    十维空间

    这里我来总结一下,回顾上文,从零维到四维,我们经历了点、线、面、体这个升级流程。然后四维空间又可以看做一点,充满着三维空间中所有可能性的连线,这个连线就是时间。

    从四维到八维,我们又经历了点、线、面、体的升级流程。八维的点,充满着七维空间中所有可能性的连线。

    八维空间继续升级。还是那个“你”,以八维空间的点为起始,我们必须想出所有的可能,每一种可能都与八维的这个点相连,最后,我们得到十维空间里的一个点,充满着九维空间中所有可能性的连线。

    还能再升级么?不能了,在十维空间中,我们找不到任何一个空间可以在划出一个点,因为,十维空间就是一个点!

    它包含着所有的宇宙、所有的可能性、所有的时间线、所有的所有...........

    f2b0ae4a53ef6d83b4455bfeb2ead576.png

    从零位到十维,我们经历了这么多,最后,它还是一个点...... 有趣么? 谢谢您的阅读!

    更多精彩内容,推荐收看

    通过石油纽带,小编认识了很多油气行业的朋友,加小编微信“hboilgas”,你有什么石油方面的需求,小编会免费为您发布,天下石油人是一家,结识天下石油豪杰。

    包括1,2,3

    责任编辑:

    展开全文
  • Matlab绘图(三)散点—四维数据、五维数据、六维...但是四、五、六、七维度的情况还是存在的,我最近项目的时候遇到了六维度数据可视化的问题,在查找相关资料的时候受到 【Matlab】散点五维数据可视化和matl

    一、前言

    • 这将是个有趣的帖子,上次我写到了关于变色散点图的二维、三维绘制。在二维散点图绘制中,颜色变化映射的数据是y值;三维绘制中,颜色的变化映射的数据是z值。
    • 正常来说,我们碰到的绘图数据大多数情况是二、三维的。但是四、五、六、七维度的情况还是存在的,我最近做项目的时候遇到了六维度数据可视化的问题,在查找相关资料的时候受到 【Matlab】散点图之五维数据可视化matlab的四维图像数据可视化 两位博主优秀帖子的启发,顺利完成了六维度数据的可视化。同时,对于四维、五维、六维、七维数据在散点图上的可视化方案自己也做出了一些思考,特此记录。
      六维图

    二、散点图特征分析

    (1)原理分析:

    1. 对于二维散点图来说,可以利用的特征有:x值 、y值、散点的大小、散点的填充颜色、散点的线框颜色、散点的形状。六大特征,这就意味着对于二维散点图可以进行二到六维数据的可视化操作。

    2. 对于三维散点图来说,可以利用的特征有:x值 、y值 、z值、散点的大小、散点的填充颜色、散点的线框颜色、散点的形状。七大特征,这就意味着对于三维散点图可以进行三到七维数据的可视化操作。

    基于上述分析,利用散点图实现对四维、五维、六维甚至七维数据的可视化是可行的方案,具体需要根据自己的数据情况来进行方案选择。

    (2)方案分析:

    四维数据进行可视化方案

    大体可以有两种方案:

    1. 采用二维散点图。除了x值、y值以外,在散点的大小、散点的填充颜色、散点的线框颜色、散点的形状四个特征中任选其二。选择时应该考虑你的数据量大小。
    2. 采用三维散点图。除了x值 、y值、z值以外,在散点的大小、散点的填充颜色、散点的线框颜色、散点的形状四个特征中任选其一。同样,选择时应该考虑你的数据量大小。

    五维数据进行可视化方案

    大体也可以有两种方案:

    1. 采用二维散点图。除了x值、y值以外,在散点的大小、散点的填充颜色、散点的线框颜色、散点的形状四个特征中任选其三。选择时应该考虑你的数据量大小。
    2. 采用三维散点图。除了x值 、y值、z值以外,在散点的大小、散点的填充颜色、散点的线框颜色、散点的形状四个特征中任选其二。同样,选择时应该考虑你的数据量大小。

    六维数据进行可视化方案

    思路同上,在下面我会以六维数据的散点图可视化为例做出示意。

    七维数据进行可视化方案

    需要注意的是七维数据的表达就只能采用三维散点图加上其余四项特征了。

    三、散点图之六维数据可视化示例

    本方案采用三维散点图+散点的大小、散点的填充颜色、散点的线框颜色六个特征对数据进行可视化操作,并且方案实施分为三步:

    step1、三维数据进行可视化

    1. 变色散点图的二维、三维绘制中,我写到了利用scatter3函数进行三维散点图的基本绘制,将六维中的三维数据可视化出来。
    clc;
    clear;
    A=magic(6);
    x=A(:,1);
    y=A(:,2);
    z=A(:,3);
    scatter3(x,y,z);
    

    在这里插入图片描述

    step2、五维数据进行可视化

    1. 利用scatter中控制散点大小的sz和颜色分布的c 映射另外两维数据,并添加对应的图例。
     %scatter(x,y,sz,c) c控制颜色,其颜色可直接赋值 r、 g 、k、 b等,也可以用矩阵来设置对应x、y点对应圆圈的颜色分布
    
    clc;
    clear;
    A=magic(6)
    x=A(:,1);
    y=A(:,2);
    z=A(:,3);
    s=A(:,4)*15;%映射大小
    c=A(:,5);%映射填充颜色
    f=A(:,6);%映射线框颜色
    
    figure;
    %生成控制散点大小的数值
     s1=floor(s);
     sizes = unique(s1);
    %生成颜色
        clos = unique(c);
        cc = parula(length(clos));    
        cc = fliplr(cc')';
    
     for i=1:length(clos)
          ind = find(c== clos(i));  
          scatter3(x(ind),y(ind),z(ind),s(ind),cc(i,:),'fill');
          legendtext{i} = num2str(clos(i));
          legendtext1{i+1} = num2str(sizes(i));
          hold on;
     end
    legend(legendtext);
    

    在这里插入图片描述
    可以看到,现在图中已经对应了五维数据的可视化,但是散点图大小的图例没有显示出来,这里从【Matlab】散点图之五维数据可视化博主优秀的帖子中,可以获得 legendScatter(TextCell,SizeDim,Factor,LinSpec)函数,用来显示大小图例。

    function [hleg,hobj]=legendScatter(TextCell,SizeDim,Factor,LinSpec)
    %% LEGENDSCATTER: workaround for R2016a and later for scatter plot legend.
    %   This function aims to simplify the creation of a legend for scatter plots.
    %   The function will plot a legend on current axis with the right
    %   markersize proportion.
    %   NB. From version 1.0.5 is added the compatibility with previous MATLAB
    %       version.
    %
    %   Inputs:   - TextCell: a cell array containing the legend-entry text.
    %               WARNING: THE FIRST CELL IS THE TITLE !!!
    %             - SizeDim: the ''MarkerSize'' dimension for each entry.
    %               WARNING: length(SizeDim)==length(TextCell)-1 !!!
    %             - Factor: normaling factor for enlarge the marker size in
    %                       a linear way. (MarkerSize*sqrt(Factor)
    %             - LinSpec: specify the marker-string.
    %
    %   EXAMPLE: -----------------------------------------------------
    %             Factor=1.5;
    %             A=[1,1,1;
    %                2,2,2;
    %                3,3,3;
    %                4,4,4;
    %                5,5,5;
    %                6,6,6;
    %                7,7,7;
    %                8,8,8;
    %                9,9,9;
    %                10,10,10];
    % 
    %             sh=scatter(A(:,1),A(:,2),(A(:,3).^2)*Factor,'ok');
    %             %scattersize==MarkerSize*sqrt(Factor)pt)
    %             leg=LEGENDSCATTER({'SIZE','1','2','3','4','5', ...
    %                 '6','7','8','9','10'},[1:1:10],Factor,'ok');
    %             leg.Location='NorthWest'; axis([0,11,0,11])
    %            -----------------------------------------------------
    %
    %   VERSION:1.0.5
    %   AUTHOR: Matteo Bagagli - ETH-Zurich // Oct. 2016
    %   MAIL:   matteo.bagagli@erdw.ethz.ch
     
    %% FAKE PLOTS
    hold on
    hplt=zeros(length(TextCell),1)';
    for ii=1:length(TextCell)
        hplt(ii)=plot(NaN,NaN,LinSpec);
    end
    hold off
     
    %% WORK
    [hleg,hobj]=legend(hplt,TextCell,'Units','points');
    drawnow % To update the figure and the legend
    idx=(length(TextCell)+4):2:length(hobj); % Skip text and TITLE MARKER
    %idx=(1:1:length(TextCell));
    v=version; 
    if str2double(v(1)) >= 9                 % MATLAB v9.0 and higher
        % Title
        hobj(1).FontWeight='bold';
        ActPos=hobj(1).Position;
        hobj(1).Position=[0.5,ActPos(2),ActPos(3)];
        hobj(1).HorizontalAlignment='center';
        hobj(1).FontSize=11;
        hobj(length(TextCell)+2).Marker='none';
        % Body
        for ii=1:length(idx)
            hobj(idx(ii)).MarkerSize=SizeDim(ii)*sqrt(Factor);
        end
    else                                     % MATLAB v8 and lower
        % Title
        set(hobj(1),'FontWeight','bold');
        ActPos=get(hobj(1),'Position');
        set(hobj(1),'Position',[5,ActPos(2),ActPos(3)]);
        set(hobj(1),'HorizontalAlignment','center');
        set(hobj(1),'FontSize',11);
        set(hobj(length(TextCell)+2),'Marker','none');
        % Body
        for ii=1:length(idx)
            set(hobj(idx(ii)),'MarkerSize',SizeDim(ii)*sqrt(Factor));
        end   
    end % end switch version
     
    end % EndMain
    

    利用legendScatter(TextCell,SizeDim,Factor,LinSpec) 函数,我们可以得到:

    clc;
    clear;
    A=magic(6)
    x=A(:,1);
    y=A(:,2);
    z=A(:,3);
    s=A(:,4)*15;%映射大小
    c=A(:,5);%映射填充颜色
    f=A(:,6);%映射线框颜色
    
    figure;
    %生成控制散点大小的数值
     s1=floor(s);
     sizes = unique(s1);
    %生成颜色
        clos = unique(c);
        cc = parula(length(clos));    
        cc = fliplr(cc')';
    legendtext1{1}='大小';
    
     for i=1:length(clos)
          ind = find(c== clos(i));  
          scatter3(x(ind),y(ind),z(ind),s(ind),cc(i,:),'fill');
          legendtext{i} = num2str(clos(i));
          legendtext1{i+1} = num2str(sizes(i)/15);
          hold on;
     end
    legend(legendtext);
    hold on;
    Factor=1;
    axes('position',get(gca,'position'),'visible','off');
    legendScatter(legendtext1,sizes/15,Factor,'ok');
    

    在这里插入图片描述
    需要注意的是,生成第二的图例之前要加入下面的一行语句,防止上一个图例被覆盖。

    axes('position',get(gca,'position'),'visible','off');
    

    step3、六维数据进行可视化

    1. 利用散点图的线框颜色映射第六维度数据,调用颜色栏:
     %绘制线框颜色
        scatter3(x,y,z,s,c,'linewidth',2)
        colormap(cool);
        colorbar;
        legend(legendtext);
    

    完整代码

    clc;
    clear;
    A=magic(6)
    x=A(:,1);
    y=A(:,2);
    z=A(:,3);
    s=A(:,4)*15;%映射大小
    c=A(:,5);%映射填充颜色
    f=A(:,6);%映射线框颜色
    
    figure;
    %生成控制散点大小的数值
     s1=floor(s);
     sizes = unique(s1);
    %生成颜色
      clos = unique(c);
      cc = parula(length(clos));    
      cc = fliplr(cc')';
      legendtext1{1}='大小';
    
     for i=1:length(clos)
          ind = find(c== clos(i));  
          scatter3(x(ind),y(ind),z(ind),s(ind),cc(i,:),'fill');
          legendtext{i} = num2str(clos(i));
          legendtext1{i+1} = num2str(sizes(i)/15);
          hold on;
     end
    hold on;
     %绘制线框颜色
    scatter3(x,y,z,s,c,'linewidth',2)
    title('六维图');     
    xlabel('第一维');% x轴名称、字体及大小
    ylabel('第二维');% y轴名称、字体及大小
    zlabel('第三维');% z轴名称、字体及大小
    colormap(cool);
    colorbar;
    legend(legendtext);
    Factor=1;
    axes('position',get(gca,'position'),'visible','off');
    legendScatter(legendtext1,sizes/15,Factor,'ok');
    
    
    
    
    

    运行结果如下,为了美观需要对图例进行一些位置的调整。
    在这里插入图片描述

    四、思考

    以上就是我自己关于4-7维数据在散点图上的一些可视化原理和分析方案。

    • 但是在这里呢,我还想说的就是绘图之前,我们需要仔细思考思考,有没有必要非要在一张图上绘制4-7维度?因为我觉得绘制出来的图只能作为一种示意功能,有可能会造成花里胡哨的感觉(当然这和审美有关系)
    • 例如,4维数据可以选择确定某一维数的情况下绘制多张三维图来表达数据的趋势关系,当然这个只是个人的一些思考和建议,具体问题还需要具体分析。

    五、参考博客

    最后,感谢两位博主的分享:

    1. 【Matlab】散点图之五维数据可视化
    2. 【matlab】的四维图像数据可视化

    ☀ 记录自己学习的同时,也希望能对大家有所帮助,欢迎留言交流!


    展开全文
  • 基于机械CAD_CAM技术的“教、学、、评、赛”五维一体化课程的研究.pdf
  • Matlab_5数据绘图-演示+源码

    千次阅读 2019-05-21 10:33:39
    % 描述第五维的方程 data = 1/abs(X.^2 + Y.^2 + Z.^2 + A.^2); figure(1); % 绘制切片 % slice(x,y,z,v,sx,sy,sz), % 其中x,y,z为三维数据, % v是关于x,y,z的函数, % sx,sy,sz是切片的位置 slice(X, Y, Z, data, ...
  • 使用MatLab绘制散点的方法

    千次阅读 2021-05-08 04:45:48
    使用MatLab绘制散点的方法:1.首先从给出的excel表格中采用数据筛选方法,将所有某类型地区的相关数据全部筛选出来。例如第1类区域的数据如下:4043 1895 14 1 9.172427 3971 2 1 5.724777 4897 8 1 11.456534 ...
  • 基于cocos creator画六维图

    千次阅读 2018-09-18 00:03:41
    //画六维图,并填充 drawSix(paramLength) { let graphics = this.graphics; graphics.strokeColor.fromHEX('#00ff00'); graphics.strokeColor.a = 0; let first = {x:0,y:0}; for(let i = 0; i ; i++) ...
  • 把我们现有的宇宙的所有无穷多个可能性的四维轨迹成牙签球,就是五维世界了。那么六维就是可以链接任意两根牙签的超级牙签球。 六维,已经包含了所有的可能性,还敢想象一下七维吗? 请注意,我们的这些可能性...
  • 粘性液体的一流动5-1?石油在冬季时的运动粘度为在夏季时试求冬夏季石油流动的流态?[冬:层流;夏:紊流]5-2?在半径为r0的管道中流体层流流动流速恰好等于管内平均流速的地方与管轴之间的距离r等于
  • (之前关于柱状、折线、饼图和散点的分享文章,感兴趣的小伙伴可以在文章底部查看!)为方便大家理解,本文生成图表所使用的工具仍是Excel.雷达:可以在同一坐标系内展示多指标的分析比较情况。它是由一组坐标...
  • 角色属性多维制作实现

    千次阅读 2020-04-16 16:25:15
     //五维图的背景 @property(cc.Mask) public maskNode: cc.Mask = null; //遮罩节点 @property(cc.Sprite) public pentagon: cc.Sprite = null; //五维图 @property(cc.Graphics) public pinNode: cc....
  • 如何突破四维空间,进入五维空间

    千次阅读 2020-05-13 23:56:26
    电影中身处五维空间,我们就会拥有上帝视角的同时还会拥有上帝的“能力”!那就是操控一切!我们能任意操控一个人的过去、现在亦或者未来,我们能够看到一个人的任何时期,任何年龄段,能向他发送信息,继而影响他的...
  • 五维数字孪生模型及十个领域应用探索》

    万次阅读 多人点赞 2019-03-21 21:56:49
    本文为北京航空航天大学陶飞教授应邀在CIMS大会上了题为《五维数字孪生模型及十个领域应用探索》的学术报告。 会后,陶飞教授应邀将报告内容进行了整理,带领北航数字孪生技术研究小组与国内10多家合作企业共同...
  • 随着人们对数据更新和可视化的需求越来越高,传统的测量手段在工作效率和成本方面的问题已经逐渐凸显,无人机倾斜摄影测量技术凭借其机动灵活和高...数据预处理,建议学习使用Context Capture软件完成实景三建模,
  • 者 | Prasad Ostwalpython译者 | 高级农民工程序员咱们的大脑一般最多能感知三空间,超过三就很难想象了。尽管是三,理解起来也很费劲,因此大多数状况下都使用二平面。面试 来自维基百科编程不过,咱们...
  • 其实之前就遇到过一次了,但是由于当时图片过多,我避免了去解决这种问题。但是今天又遇到一次,而且是老师发给我的,这几组图像是必须要用的,那么意味着必须要解决这个问题了。。。 from scipy.misc import imread...
  • 一、二曲线及二图形 1-plot(x,y)函数的基本用法 plot(x,y)函数的基本用法:其中分别用于存储x坐标和y的坐标。 我们看一下例子1,用plot函数绘制一条折线。代码如下: x = [2.5, 3.5, 4, 5] ; y = [1.5,...
  • 一个简单的PHP循环一数组的实例,先是把字符串按照一定的规则进行转换成为数组,然后再进行遍历输出,实际是一个很简单的方法,因为最近的一个二数组结构搞得很头疼,所以一时半会儿想不起来如何进行遍历...
  • 一、绘制正弦函数图像、 1、二绘图步骤、 2、二绘图步修饰、 3、代码示例、 二、设置图像颜色、
  • 求大佬告知,提供一下思路2021数杯 A题第问怎么啊??
  • Matlab绘图(1)——二绘图

    千次阅读 2022-07-24 21:03:51
    Matlab绘图系列教程1,包含常用的二绘图函数。
  • matlab三动态绘图

    千次阅读 2021-05-07 08:48:14
    matlab 动态绘图,MATLAB R2017a下载 64位免费版,matlab三动态绘图,matlabtimer动态绘图matlab...Matlab 绘制三动态心形 It’s OK to send a pic to your girlfriend on Valentine's Day 情人节蛋疼玩意 效果: ...
  • matlab中二图像的绘制

    千次阅读 2021-08-15 14:18:29
    图形是matlab图形的基础,也是应用非常广泛的图形类型之一。在matlab中提供了许多二图形绘制函数。在这里简单介绍二图形的绘制命令、图形的编辑、子图的绘制、交互式图形的绘制以及双坐标图形的绘制。 plot...
  • 二维,二点五维与真三维的比较

    千次阅读 2013-09-24 09:52:17
    是我们最熟悉的地理数据表达形式,其原理是用一对x, y值来定位某一具体地物的位置。 使用这种地理数据表达方式具备数据量小,处理速度快,分析方法众多且易于理解等诸多优点。能满足人们基于平面定位的多种应用...
  • 转载自:机器之心 | 字节跳动视觉技术团队来自字节跳动视觉技术团队的研究者将 NeRF 和 Multiplane Image(MPI)结合,提出了一种新的三空间表达方式 MINE。该方...
  • 2D GAN知道3D形状吗?基于GAN的二图像无监督三形状重建论文、代码地址:在公众号「计算机视觉工坊」,后台回复「二图像GAN」,即可直接下载。摘要:自然图像是三物体在二图像平...
  • 项目报告的时候,有这么一个想法,就是能通过UI随时调用matplotlib进行二维图和三维图的绘制。因此就诞生了这么一个小模块的想法。 这里先上一下最终结果: 思路: pyqt5内嵌matploblib画布。 matplotlib画布中...
  • 浅谈单图像三重建算法

    千次阅读 2022-03-22 00:30:06
    点击上方“3D视觉工坊”,选择“星标”干货第一时间送达作者丨lcl来源丨我爱计算机视觉本文简单带大家看一下单图像三重建相关的论文。写这篇文章算是对之前的一点总结。因为之前没有过三视...
  • 用Excel数据地图

    千次阅读 2020-12-16 16:33:23
    首先要确保你的Excel里有“三地图”这个功能项,具体路径在【插入】——【三地图】,数据透视旁边的一个功能。 你可能会遇到以下两种情况: 1、 Excel里没有这个功能。那应该是版本的问题,2016版自带这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,662
精华内容 55,464
热门标签
关键字:

五维图怎么做