张春成

V2

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.

接下来,我开始好奇这样一个问题,那就是如果要生成点云的轮廓是随机的,那么应该如何放置这些点呢?

Untitled
Untitled
Untitled
Untitled

点云的生成方式

当然,最简单的方案是使用 Monte Carlo 法在图上随机放置大量的点,之后在排除相互重叠的点之后即可得轮廓内的点云。但我随即否定了这样简单粗暴的想法,因为它无法保证点之间的距离任意小,(也没有什么技术含量,划掉)。

经过一通胡思乱想之后,我想到了这样一种方案,它分三步

  1. 首先在轮廓中随机放置一颗种子点;
  2. 之后不断放入新的点,但与 Monte Carlo 法不一样的是,新的点向它最近的点移动,移动到两个点之间的距离任意近为止;
  3. 这个迭代过程一直重复下去,即可以得到想要的点云。

我最初的设想是这个点云应该会像水波一样,从一个中心向外不断扩张。但事与愿违,这些点似乎有他们自己的想法,他们开始自组织起来,以一种匪夷所思的像下围棋一样的方式向外扩张

自组织现象图

点云的自组织性如下图所示,由于我在着色过程中使用了减法,因此数值越大、颜色越深代表生成的顺序越靠前。由于这个动态过程是完全随机的,因此我还没想好怎么用统计学手段去解释它。

Untitled
Untitled
Untitled
Untitled

参考资料

[1]

Plot population: https://observablehq.com/@listenzcc/plot-population

[2]

一种莫名其妙的自组织结构: #一种莫名其妙的自组织结构

[3]

从固定轮廓到随机轮廓: #从固定轮廓到随机轮廓

[4]

点云的生成方式: #点云的生成方式

[5]

自组织现象图: #自组织现象图

分类:

后端

标签:

后端

作者介绍

张春成
V2