这是在学生时期做的一个东西,将向量场可视化。
向量场即在二维平面中,存在很多向量,对于一张图片来说,可以理解为每一个像素都有一个单位向量,如果相邻像素的向量指向方向有规则性,则会形成十分美妙的图案,如下图所示:
Figure 1
形成这样的图片,是非常简单的:
1)生成噪点图;
Figure 2
2)生成向量场,由于向量场不可以观察,也正是如此,我才有本文所述的工作,但是下面的代码可以表示Figure 2的代码:
double generate_circle_field(float *dx, float *dy, int width, int height)
{
double cx = width / 2;
double cy = height / 2;
int x, y;
for(int y = 0; y < height; y++)
{
for(int x = 0; x < height; x++)
{
double deltaX = cx - x;
double deltaY = cy - y;
double dist = sqrt( deltaX * deltaX + deltaY * deltaY ) + EPSILON;
int idx = y * width + x;
dx[idx] = deltaY / dist;
dy[idx] = - deltaX / dist;
}
}
}
代码非常的简单,不过如果结合数学知识就很容易理解了(圆圈弧的切向量)。
好了,内容就这么多我的程序见https://github.com/huneng/Vector-Field-Visual,如果想可视化任意向量场就替换上面这个函数,另外还生成了一些向量场图片:
Figure 3
Author E-mail:huneng1991@163.com