V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
mathzhaoliang
V2EX  ›  分享创造

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

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

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

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

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

    ...

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

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

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

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

    上面这四个图其实绘制的都是四维空间中的一个正多面体 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   ·   实用小工具   ·   957 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:04 · PVG 06:04 · LAX 14:04 · JFK 17:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.