财新传媒 财新传媒

阅读:0
听报道

导语

通过舞蹈的形式,探索分形的可视化问题。

 

编译:集智俱乐部翻译组

来源:wired.com

原题:

How to Dance with a Tree: Visualizing Fractals With Dance

 

几周之前,我和朋友Upasana一起,搞了一个有趣的项目。我们通过舞蹈的形式,探索分形的可视化问题,这是一种将表演和数学相结合的自动生成艺术。

 

Kinect传感器和Processing语言是实现这个项目的两个关键要素,前者能够让计算机跟踪用户身体的移动轨迹,后者则是一种编程语言,能够让你用代码创建交互式的视觉效果。将这两者结合在一起,你就可以用你的身体来控制可视化的形状和对象。

 

 

去年10月底,我走在回家的路上,道路两旁光秃秃的树枝在风中摇曳,我懒洋洋地看着那些树枝,一个想法突然出现在了我的脑海中。出于某种原因,我突然想知道当一晚上的树是怎样的体验——想象着举起你的双臂,像树一样,挥动它的树枝。

 

之后,我想起在Daniel Shiffman的《 Nature of Code》中,看到过关于分形的内容。有一些结构,当你持续地放大它们,它们看起来依然和原始的结构很相似,这种奇妙而错综复杂的结构,就是分形。作为分形界最早的探索者之一,Benoit B. Mandelbrot创造了分形这个词,并把它描述城一种“整体缩小版”的几何图形。

(分形界的一个小幽默:Benoit B. Mandelbrot中的B代表什么?Benoit B. Mandelbrot。)

 

每一个部分都和整体相似,这种“自相似性”就是分形的核心思想。想想看地图上的海岸线,在不同的缩放级别上,它们总会呈现出相似的脉络,山脉的锯齿状地形也是如此。

 

或者我们来想象下,闪电向下传播到地面时,所经历的分支路径。



当高压电通过绝缘体时,它会表现出分支的图案。

 

或者蕨类植物中叶子的嵌套排列。



再或者是Romanesco西兰花头上的花蕾。每个芽上都有较小的芽,这些芽以相同的螺旋形排列在一起。



从海岸线到西兰花,从闪电到树木,自然界中的许多模式(patterns)都可以用分形来描述,而不是通常的线条,圆形和三角形等形状。(在现实世界中,物体只能是大致分形的,到了某种尺度,分形将会结束。但在数学中,分形的自相似性将永远存在。)

 

虽然圆形和三角形等形状是简约的本质,但另一方面,分形在它们的无线微分中包含着一种有机的复杂性。就像山峰和三角形之间有着天壤之别,分形却可以很好地表示山峰。



 



 

这又让我的思绪回到了树上,你可以把树想成分形的样子。下面是一棵树的草图。




 

仔细看,就像Mandelbort说的那样,每一个分支都是“整体的缩小版”。




 

举个例子,来看看这张图像。





你可能认为你在看着一整棵树,但实际上,这是一幅向周围蔓延的树枝的图像。(我当时躺在树下,仰望着它,拍了这张照片。)树枝们看起来就像一颗小树,也就是我们想要捕捉到的“自相似性”。

 

在《Code of Nature》这本书中,Daniel Shiffman实现了用一个简单的算法 ,来绘制这样的分形树。





为了能自由控制分形的形状,我对他的代码做了一点调整,可以通过移动鼠标来修改树枝的角度,既而生成树的动画。你可以去自己玩一下:

http://www.princeton.edu/~aatishb/processing/tree_noleaves/

我尝试添加一些树叶,使树变得更漂亮。



可以玩一下这个可互动版本的分形树:

http://www.princeton.edu/~aatishb/processing/tree_leaves/

 

接下来,为了实现通过自己的身体控制这棵树,我们需要和Kinect传感器结合起来。在这里,我调用了Simple-OpenNI库(我之前发布过关于Kinect hacking的帖子,您可以在那里了解到Simple-OpenNI是如何工作的),实现这一功能。我的朋友Upasana Roy自愿扮演舞者和木偶的角色。





瞧,她挥了一下手,就创造了一颗分形树,手的角度(从臀部测量到的)控制了分形树中分支的角度。她身体所在的物理空间被映射到了一个抽象的数学空间(在这种情况下,通过改变这棵树的分支角度,你可以得到数学空间里的整颗分形树)。



我们就先探索到这里,但实际上,你可能还有兴趣去探索其他虚拟的形状,物体和空间。

 

Q&A

 

  • 第一次玩这个游戏的时候有什么感受?

一开始很有挫败感。大部分情况下,我的动作对于分形树的改变没有任何效果,但有时候这棵树又会突然发生一些变化。即使我以一种平滑的方式移动胳膊,分形树也会发生突变,我感到一头雾水。

 

  • 玩了一段时间后有什么感受?

我发现,当我在跳舞的时候,我需要让胳膊在我周围的整个空间环绕。但同时,在这种情况下,系统对某些空间的反应,比对空间中其他部分的反应更敏感。比如说,上下移动手臂时分形的变化远远超过左右移动手臂的效果。

 

  • 你是如何编排舞蹈的?有什么困难的地方和好玩的地方吗?

玩儿了一段时间后,我找到了我的手臂位置和分形设计之间的关系,接着我就可以以一种可预测的方式来移动了。明白这一点后,就是一个关于分形图案的游戏了,音乐是其中好玩的部分!最难的地方在于要一直举着手臂!

我在空气中不断地移动着我的手,但我并没有看到我所做的动作,而是由我的动作衍生出的变形版本,这让我觉得自己有点像一个高科技的木偶操作者。在空气中用抽象的手部运动来控制树的形状,实在是太酷了!

 

 

参考资料:

 

  • 在Max Rheiner(编写的OpenNI库,可以让你在Processing中运用Kinect传感器)和Dan Shiffman(编写了递归树代码)   代码的基础上,进行了修改,得到了本文的可视化处理代码,您可以到后附网址获取:

    http://www.openprocessing.org/sketch/174694

  • Dan Shiffman的著作《Nature of Code》中的分形章节。

  • Greg Borenstein的帖子Making Things See是一篇关于如何在Processing中使用Kinect的非常方便的指南。

  • 我之前的一篇文章,介绍了如何使用Kinect制作舞蹈视频:https://www.wired.com/2014/12/empzeal-fractal-tree/

  • 非常感谢Upasana Roy愿意跳舞,跳到她再也无法举起自己的双臂。

 

翻译:尚奇奇

审校:刘培源

编辑:王怡蔺

原文:

https://www.wired.com/2014/12/empzeal-fractal-tree/

 

话题:



0

推荐

集智俱乐部

集智俱乐部

504篇文章 2年前更新

集智俱乐部,英文名Swarma Club,成立于2003年,是一个从事学术研究、享受科学乐趣的探索者的团体。它倡导以平等开放的态度、科学实证的精神,进行跨学科的研究与交流,力图搭建一个中国的“没有围墙的研究所”。公众号:集智俱乐部,官网:swarma.org。

文章