张春成
2023/05/19阅读:14主题:默认主题
一种莫名其妙的自组织结构
一种莫名其妙的自组织结构
我的初衷是在某个图形之内构造一组致密点云,我最初的设想是这个点云应该会像水波一样,从一个中心向外不断扩张。但事与愿违,这些点似乎有他们自己的想法,他们开始自组织起来,以一种匪夷所思的像下围棋一样的方式向外扩张。这是出乎我意料的,因此记录下来。本文的开源代码如下
Plot population[1]
-
一种莫名其妙的自组织结构[2] -
从固定轮廓到随机轮廓[3] -
点云的生成方式[4] -
自组织现象图[5]
-
从固定轮廓到随机轮廓
在上一篇文章中,我介绍了后端程序在处理某个点集数据时使用了 ggparliament 算法生成扇形点云。这个原理并不复杂,因为轮廓是一个标准的扇形,其中的每个点的位置都可以用通项公式指定
实现这个效果最朴素的想法是按圆周进行层层排列,
其中, 代表每个圆周中点的数量。另外,由于我们需要这些点看上去“填满”整个扇形,因此我们在设置半径和角度的时候遵循这样一个规则,即每个圆周不放置相同数量的点,而是形成一个级差为 的等差序列,这样它的和总为
Import data from csv file. Data scraped from Senate gov website. …… Positional arguments created with R
ggparliament
.
接下来,我开始好奇这样一个问题,那就是如果要生成点云的轮廓是随机的,那么应该如何放置这些点呢?


点云的生成方式
当然,最简单的方案是使用 Monte Carlo 法在图上随机放置大量的点,之后在排除相互重叠的点之后即可得轮廓内的点云。但我随即否定了这样简单粗暴的想法,因为它无法保证点之间的距离任意小,(也没有什么技术含量,划掉)。
经过一通胡思乱想之后,我想到了这样一种方案,它分三步
-
首先在轮廓中随机放置一颗种子点; -
之后不断放入新的点,但与 Monte Carlo 法不一样的是,新的点向它最近的点移动,移动到两个点之间的距离任意近为止; -
这个迭代过程一直重复下去,即可以得到想要的点云。
我最初的设想是这个点云应该会像水波一样,从一个中心向外不断扩张。但事与愿违,这些点似乎有他们自己的想法,他们开始自组织起来,以一种匪夷所思的像下围棋一样的方式向外扩张。
自组织现象图
点云的自组织性如下图所示,由于我在着色过程中使用了减法,因此数值越大、颜色越深代表生成的顺序越靠前。由于这个动态过程是完全随机的,因此我还没想好怎么用统计学手段去解释它。


参考资料
Plot population: https://observablehq.com/@listenzcc/plot-population
[2]一种莫名其妙的自组织结构: #一种莫名其妙的自组织结构
[3]从固定轮廓到随机轮廓: #从固定轮廓到随机轮廓
[4]点云的生成方式: #点云的生成方式
[5]自组织现象图: #自组织现象图
作者介绍