张春成

V2

2022/04/01阅读:25主题:默认主题

二维场及其可视化

二维场及其可视化

这是一个进行二维场生成和可视化的前端工具, 但还是初版。


二维场

场是对物理量的一种描述方式, 比如电场、磁场、流速场等。

简单来说, 如果有一个二维空间, 而在该空间中的每一点都能有一个值, 那么这个空间中点与值的对应关系

就称为二维空间中的一个场。

Field-1
Field-1

比如在上图中, 上方的左蓝、右黄的图就代表一个简单的, 左边值较小、右边值较大的二维场; 而在下方的图中, 可以用有方向的线段来描述这种值的大小, 线段的方向可以是局部方向微分, 也可以是梯度

当然,场沿方向的取值变化一般不会这么“平滑”, 它也可能是这样的

Field-2
Field-2

绘图的规则是一致的, 只是由于场的值沿位置的变化更加“剧烈”而已。

我在 在线代码本[1] 中初步实现了场绘制和梯度可视化的功能。 这种可视化是实时的, 也许可以帮助研究一些东西

【这是一段视频】

其中,可变的条件有

  • 场的随机值生成;
  • 场梯度图分辨率;
  • 以及场沿位置分布的空间分辨率等。

目前,生成随机场的方法十分简单粗暴, 是使用成熟的前端库, 核心代码如下

const {freqUV, cx, cy, seed} = args

random.setSeed(seed);
const freq = math.lerp(1 / 200001 / 500, freqUV);
const value = random.noise2D(cx, cy, freq);

其中,random.noise2D是用于根据位置和频率, 得到场在该位置的值。 频率越高, 则值沿空间方向的变化就越“剧烈”。

而为了保证随机生成的场的连续性, 它其实是在取值之前, 先根据随机种子生成一张适当大小的连续随机场, 之后通过查表的方法进行随机数获取。 很聪明的方式。

本工程开始搭了一个架子, 后面如果有时间, 将填进来一些场的梯度、散度和旋度的计算和可视化方法代码。

参考资料

[1]

在线代码本: https://observablehq.com/@listenzcc/relationship-between-field-and-direction

分类:

后端

标签:

后端

作者介绍

张春成
V2