向量场可视化方法

这是在学生时期做的一个东西,将向量场可视化。

向量场即在二维平面中,存在很多向量,对于一张图片来说,可以理解为每一个像素都有一个单位向量,如果相邻像素的向量指向方向有规则性,则会形成十分美妙的图案,如下图所示:

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:[email protected]


猜你喜欢

转载自blog.csdn.net/huneng1991/article/details/44992727