向量场可视化方法

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

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

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


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值