退火
故事,第 1 部分
午后,十月末的阳光与男孩和他的朋友们一起玩耍。 现在还不可怕。 万圣节还有几个小时。
视频和代码
该视频序列展示了在球体周围均匀放置 3200 个点的模拟退火。 最初,这些点被放置在从北极到南极的双螺旋中。 我不是在尝试双螺旋;我希望有更多的初始传播,但它仍然有效。 颜色只是为了可视化。 在初始点之后,退火过程开始。 https://en.wikipedia.org/wiki/Annealing_(冶金)描述了一种物理退火过程,其中加热金属以松弛结晶结构,使原子移动到不同的关系中。 有些材料甚至可能会在十月的阳光下退火。 这里的 JSL 针对视频进行了调整,并未针对其他任何内容进行优化……但已经足够好了。 在退火阶段,加热和冷却的时间表控制允许点远离最近的邻居的程度。 因为极点上有很多点挤在一起,时间表需要让系统保持一段时间热度,这样这些点就有时间迁移出去。 在那种“高温”下,这些点跳得足够远,以至于它们经常会离另一个点的邻域太远。 时间表的逐渐冷却阶段让点稳定下来,移动越来越少。 视频在他们完全安定下来之前就结束了。
下载 JSL
退火 - YouTube

三角测量
故事,第 2 部分
下午晚些时候,是时候穿上服装了。还不算太可怕。快到万圣节了。这个男孩的服装是睡衣和虎皮的混合体,腿的末端缝着一个薄塑料脚垫,一个带有松紧带和彩绘胡须的模制面具,还有一条拖在地上的尾巴。非常非常酷。他妈妈在 364 天前在 Woolworths 买了这套衣服。
视频和代码
只有五个柏拉图立体.第六个是 3-D 程序员的幽默。四面体(4 个面)、八面体(8 个面)和二十面体(20 个面)都有三角形面,这个模型有 6396 个面。 第 1 部分解释了如何使用退火将 3200 个点分布在一个球体周围。现在的问题是将那组点变成一组不重叠但完全覆盖球体的三角形。JSL 具有二维三角剖分功能https://community.jmp.com/docs/DOC-6686 .因为这些三角形存在于一个球体上,所以我们需要一个 3-D 算法。我在 Linux 机器上使用 QHULL 程序进行 3-D 三角测量。(起初这个问题似乎很容易处理,我试着拼凑自己的代码。我错了。)
(附上文件和脚本。您不需要执行此步骤。您将需要修改文件路径,可能使用 $DOWNLOADS。)
从 JMP 数据表构建一个如下所示的文件:
Desktop/windowsShare/sphere18.csv. Hand-edit the first two rows with your favorite editor.
3
3200
0.0174574781 -0.009345855 0.9998039265
0.0370915586 0.1378584254 0.9897571777
-0.016638696 -0.082236389 0.9964739485
0.1316324218 0.1496379046 0.9799394895
-0.076811566 -0.102578513 0.9917548246
-0.124948516 -0.055647123 0.9906014669
-0.164864305 -0.100732341 0.9811588843
0.0174820473 0.0708889403 0.9973310063
...
将它发送到另一台机器并运行:
grab some software for a linux machine to do a tessellation in N dimensions (N==3 for us)...
sudo apt-get install qhull libqhull-dev qhull-bin
do the tesselation...
qhull Qt i <Desktop/windowsShare/sphere18.csv
>Desktop/windowsShare/sphere18.zerobased.delaunay
并获取此文件以发送回 JMP:
head Desktop/windowsShare/sphere18.zerobased.delaunay -- show the output of the tessellation
6396 -- number of triangles
1601 1605 1607 -- zero-based row numbers of vertices of first triangle
1802 1800 1804
1800 1613 1804
1798 1613 1800
1424 1611 1418
1611 1424 1619
1814 1812 1631
1629 1814 1631
1603 1597 1406
...
这里的代码是为了制作视频来解释三角剖分......虽然我不知道 QHULL 算法实际上是如何工作的。我想我可能不得不重新排列三角形的生成顺序,但原来的顺序似乎很有趣。还有一个慢进慢出功能https://en.wikipedia.org/wiki/12_basic_principles_of_animation#Slow_In_and_Slow_Out快结束了……慢慢地开始推车,加速,然后减速到一个软停止。 后缀 18 提示您此代码经历的迭代次数。它为世界打造了一件漂亮的服装。
下载 JSL
ThatsNoMoon - YouTube

我发现这张静止图像的深度感非常引人注目。 (最后一分钟的测试...此脚本使用了一些 JMP 13 功能。JMP 13 现已上市! )
对象
故事,第 3 部分
1959 年 10 月 31 日,下午 6:30。 一个四岁的孩子和他的爸爸一起走在街上,手里拿着不给糖就捣蛋的袋子,完全不知道发生了什么。 头一两间是他朋友家的,没什么大不了的,他来过很多次了。 “走到门口,按铃,说骗子治疗,把袋子拿出来。
然后他们越过边界. 他不认识这些房子。 第一个没问题;他爸爸打了声招呼,然后把男孩送到门口。 “Twiker tweat!”。 他们大笑,把东西丢进包里。
隔壁房子的门开着,男孩的心开始狂跳。 黑白电视里的绿野仙踪他不是很懂,但肯定觉得飞天猴子很可怕。 但这更糟。 站在门口,尖尖的帽子,绿脸……多年后他才意识到那是完美的妆容他们可能有一台彩色电视机。
爸爸:“继续,上台阶。 她不会伤害你的。”
男孩:“不不不不”
女巫,咯咯地笑着:“来吧,小男孩……我有糖果给你……”
视频和代码
构建此视频的代码使用命名空间来表示演员作为对象。 在 Drew 的设计之后,对象的图案松散https://community.jmp.com/docs/DOC-9687 ,并且有几层子类化。 您可能会发现对象呈现自己的方式有点可怕,有点像会飞的猴子。 当演员们在他们的世界中漫游时,他们有规则来管理他们的互动。 有两个“极点”演员的例子;他们的主要目的是排斥来自北极和南极的其他演员(因为我选择的坐标系不能很好地处理两极)。 红色和蓝色演员在北极实例化,相互排斥,也被两极排斥。 这位蓝色或杰出的演员具有特殊的才能:螃蟹行走、赤道追踪和东方探索。 与红色演员不同,蓝色演员有手段和动机。 相机将跟随蓝色。 其中大部分比现实更接近乐趣。 气氛并不像看起来那样。 太阳离得太近了,并且有无法解释的天钩将它们托起。 小动物的身体只是球体,深深地压在地表里。 当小动物转得太快时,它们的腿就会交叉,几帧后就会解开。
下载 JSL
TessellationDance - YouTube

2018 年 6 月 22 日更新:修复链接