程序员和数学 + 艺术的距离,只有几百行代码而已。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
mathzhaoliang
V2EX    分享创造

程序员和数学 + 艺术的距离,只有几百行代码而已。

  •  6
     
  •   mathzhaoliang
    neozhaoliang 2018-07-13 09:46:50 +08:00 7198 次点击
    这是一个创建于 2650 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原谅我用了一个公众号风格的标题。

    读过三体的朋友,可能还能回忆起,刘慈欣在死神永生中对四维空间碎片有这样的描述:

    首次从四维空间看三维世界的人,首先领悟到一点:以前身处三维世界时,他其实根本没看见过自己的世界,如果把三维世界也比做一张画,他看到的只是那张画与他的脸平面垂直放置时的样子,看到的只是画的侧面,一条线;只有从四维看,画才对他平放了。他会这样描述:任何东都不可能挡住它后面的东西,任何封闭体的内部也都是能看到的。这只是一个简单独规则,但如果世界真按这个规则呈现,视觉上是极其震撼的。当所有的遮档和封闭都不存在,一切都暴露在外时,目击者首先面对的是相当于三维世界中亿万倍的信息量,对于涌进视觉的海量信息,大脑一时无法把握。

    ...

    这时.他们不得不面对一个全新的视觉现象:无限细节。在三维世界里,人类的视觉面对的是有限细节,一个环境或事物不管多么复杂,呈现的细节是有限的,只要用足够的时间依次观看,总能把绝大部分细节尽收眼底。但从四维看三维时,由于三维事物在各个层次上都暴露在四维视野中,原来封闭和被遮挡的一切都平行并列出来。比如一个封闭容器,首先可以看到它内部的物体,而这些内部物体的内部也是可见的,在这无穷层次的暴露并列中,便显露出无限的细节。在莫沃维奇和关一帆面前的飞船,虽然一切都显露在眼前,但任何一个小范围内的一件小东西,比如一只水杯或一支笔,它们并列出来的细节也是无限的,枧觉也接收到无限的信息,用眼睛看时,穷尽一生也不可能看全它们在四维空间的外形。当一个物体在所有层次上都暴露在四维时,便产生了一种令人眩晕的深度感,像一个无限嵌套的俄罗斯套娃,这时,“从果核中看到无穷”不再是一 个比喻。

    看到这一段的时候,我想大家都会好奇,当我们真正的身处四维空间的时候,看到的景象是什么样子的

    很抱歉,没有人知道答案,因为没有人能够进入四维空间。但是我们可以把四维空间中的物体投影到三维空间中,然后看看它的投影的结果是什么样子的。

    下图是一个例子:(注意:无限细节!!!

    上面这四个图其实绘制的都是四维空间中的一个正多面体 120-cell 的各种截断的变体,真正的 120-cell 长这样:

    它是一个四维空间中的正多面体的意思是:它有 600 个顶点,1200 条边,720 个面,120 个胞腔,所有这些顶点,边,面,胞腔在四维空间中全都一样。

    当然在上面的图中显示的结果是有的边 /面大,有的小,这是因为在投影到三维空间的过程中发生了形变。这没有办法,毕竟不存在从四维空间到三维空间的保距离的投影,任何投影都会导致形变。


    这些图片都是由我刚刚完成的一个新项目生成的,代码在 github:

    https://github.com/neozhaoliang/pywonderland

    这个程序可以绘制的多面体很多,比如:

    1.所有的柏拉图和阿基米德多面体:

    2.各种三维和四维空间中的棱柱 /反棱柱:

    昨晚主要是灵光一现,渲染了几个新图,觉得不错,所以拿上来臭美一下~,骗骗 star ~。


    这个子项目是怎么来的呢?我最初受到了一个非常精彩的数学视频的启发:维度 (这个是简体中文的链接),我第一次看这个视频的时候还是 08/09 年那会,甚是羡慕,但是那时太菜,完全不了解里面的数学,也不知道人家是怎么渲染的。现在博士都毕业了,也有了一些编程经历,这才琢磨明白里面的道道,可以做出与之媲美的效果了。大家可以移步

    http://pywonderland.com/polytopes/

    那个网页上有我用这个程序制作的小视频。我相信效果是不会让大家失望的。

    这个代码只有几百行,用纯 python 计算好坐标以后导出到 POV-Ray 渲染,只用到 numpy 这个库,sage/sympy/mathematica 统统不需要。你看,不需要什么高深的工具,纯 python + 一个渲染器就可以做出媲美 Devianart 级别的艺术作来,而且这个作品背后的数学也很奇妙:我这里是根据每个多面体对应的 Coxeter-Dynkin 图,算出其对称群,然后把这个群作用在任意一个初始顶点上得到整个多面体。这跟网上那些把多面体数据事先存在一个文件里面的方式是不同的。

    数学很奇妙,数学和编程的交集不只有机器学习,纯数学在编程的世界中也可以很奇妙。希望大家喜欢 pywonderland 这个项目。

    32 条回复    2018-08-06 09:11:29 +08:00
    bwangel
        1
    bwangel  
       2018-07-13 10:22:11 +08:00 via Android
    666,老哥很厉害啊!
    mathzhaoliang
        2
    mathzhaoliang  
    OP
       2018-07-13 10:31:17 +08:00
    @bwangel 喜欢 + 花时间而已。
    Devilker
        3
    Devilker  
       2018-07-13 10:44:27 +08:00
    想起区块链了
    mathzhaoliang
        4
    mathzhaoliang  
    OP
       2018-07-13 10:53:52 +08:00
    @Devilker 那里面的数学主要是椭圆曲线公钥密码学 + 哈希算法。椭圆曲线是数学里面非常优美深刻的分支。唯一的隐忧是:一旦真正实现了量子计算,椭圆曲线密码学就会被淘汰。
    coffeSlider
        5
    coffeSlider  
       2018-07-13 10:57:35 +08:00 via Android
    有一个很像星战中的飞行器。
    cskeleton
        6
    cskeleton  
       2018-07-13 11:01:02 +08:00
    让我想起了《维度 数学漫步》和《混沌 数学探秘》
    mathzhaoliang
        7
    mathzhaoliang  
    OP
       2018-07-13 11:01:56 +08:00
    @cskeleton 就是受《维度》的启发写的。
    mathzhaoliang
        8
    mathzhaoliang  
    OP
       2018-07-13 11:03:09 +08:00   1
    @cskeleton 我写这个项目的时候发邮件问过《维度》的作者之一 Jos Leys,他说他就是用 POV-Ray 渲染的。但是怎么计算的不知道。
    zhuanzh
        9
    zhuanzh  
       2018-07-13 11:06:02 +08:00
    https://www.bilibili.com/video/av20203833
    推荐下木鱼的《维度 数学漫步》解说
    fenx
        10
    fenx  
       2018-07-13 11:09:54 +08:00
    mathzhaoliang
        11
    mathzhaoliang  
    OP
       2018-07-13 11:16:17 +08:00
    @fenx 我不认为那些作品可以和我这个项目里的媲美~ 主要是那些作品只是简单的几何图形,并没有多少复杂的数学支撑。
    mayne95
        12
    mayne95  
       2018-07-13 11:23:18 +08:00
    结构美,赞!
    mathzhaoliang
        13
    mathzhaoliang  
    OP
       2018-07-13 11:27:17 +08:00
    @mayne95 这只是开胃菜,后面还有更多更神奇的!
    mayne95
        14
    mayne95  
       2018-07-13 11:28:13 +08:00
    @mathzhaoliang 期待,满眼星星.jpg
    mathzhaoliang
        15
    mathzhaoliang  
    OP
       2018-07-13 11:32:20 +08:00   1
    @mayne95 下一个项目是重现 Escher 的 circle limit:

    ![]( https://upload.wikimedia.org/wikipedia/en/5/55/Escher_Circle_Limit_III.jpg)

    以及渲染 4 维空间中的双曲蜂巢:

    https://en.wikipedia.org/wiki/Uniform_honeycombs_in_hyperbolic_space

    这个里面的数学比之前所有这些加起来还要难。
    mayne95
        16
    mayne95  
       2018-07-13 11:46:20 +08:00
    @mathzhaoliang 感谢楼主的帖子和项目,顺藤摸瓜,发现了很多好玩的东西。Escher 的画真的很棒,GEB 还没看完,又来个维度,真幸福。
    OfficialYoungX
        17
    OfficialYoungX  
       2018-07-13 14:38:16 +08:00
    [quanta magazine]( https://www.quantamagazine.org)了解一下?
    mathzhaoliang
        18
    mathzhaoliang  
    OP
       2018-07-13 14:51:10 +08:00
    @OfficialYoungX 好像是个科普网站?
    darkcode
        19
    darkcode  
       2018-07-15 17:16:52 +08:00
    有意思,就是想到这些就害怕
    hmzt
        20
    hmzt  
       2018-07-17 13:51:33 +08:00
    效果很赞,不过感觉刘慈欣对高维和低维空间的理解有问题,夏虫不可语冰,三维空间的我们是无法想象和模拟真实的四维的.
    mathzhaoliang
        21
    mathzhaoliang  
    OP
       2018-07-17 14:07:42 +08:00
    @hmzt 他的描述也不能说有问题,我们在三维空间中看物体无法看到全貌,是因为前面的物体会遮挡住后面的物体。但是如果把三维的物体放到四维中,将物体的 "深度信息" 作为第四个坐标,那就不存在遮挡了,所有的物体均一览无余。你如果知道计算机图形学里面的 depth buffer 和 distance field 的概念就很容易理解。
    USNaWen
        22
    USNaWen  
       2018-07-19 16:19:55 +08:00
    第 7,8 章的拓扑那边卡住了。。。纤维化真难懂
    mathzhaoliang
        23
    mathzhaoliang  
    OP
       2018-07-19 16:34:49 +08:00
    @USNaWen 也不是很难懂,数学专业的话理解起来好一些。
    eluotao
        24
    eluotao  
       2018-08-03 09:20:40 +08:00
    很厉害 不得不承认....
    sdijeenx
        25
    sdijeenx  
       2018-08-03 15:38:54 +08:00
    话说这些图片不是四维物体的平面投影么?(不使用 3D 显示器看的话
    sdijeenx
        26
    sdijeenx  
       2018-08-03 15:41:39 +08:00
    p.s. 介绍这个视频的帖子最早我是在科幻世界论坛上看到的,距今已经 9 年了=3=
    mathzhaoliang
        27
    mathzhaoliang  
    OP
       2018-08-03 15:55:18 +08:00
    @sdijeenx 我还记得我初中每个月花5块钱买科幻世界小说杂志呢。那时候刘慈欣,阿来,王晋康的文章还经常能看到。
    mathzhaoliang
        28
    mathzhaoliang  
    OP
       2018-08-03 15:56:17 +08:00
    @sdijeenx 严格的说,是四维欧式空间中的正多面体 /一致多面体在三维欧式空间中的投影。
    mathzhaoliang
        29
    mathzhaoliang  
    OP
       2018-08-03 15:58:05 +08:00
    @sdijeenx 因为四维空间还可能是双曲度量下的 minkowski 空间,这个双曲空间中的正多面体是这样的:

    ![]( )
    amorpaganini
        30
    amorpaganini  
       2018-08-04 05:17:41 +08:00 via Android
    有趣
    wwg1994
        31
    wwg1994  
       2018-08-04 16:48:12 +08:00
    瑟瑟发抖(((φ(◎ロ◎;)φ)))
    mosbic
        32
    mosbic  
       2018-08-06 09:11:29 +08:00 via Android
    想看 Klein bottle
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5913 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 03:08 PVG 11:08 LAX 20:08 JFK 23:08
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86