解决等值线生成过程存在的二义性

作为上一篇博文的基础补充:
网格序列法的基本步骤:
1、逐个计算每一网格单元与等值线的交点;
2、连接该单元内等值线的交点,生成在该单元中的一等值线线段;
3、由一系列单元内的等值线线段构成该网格中的等值线。
(有兴趣的读者可以学习一下三角剖分法)

这里写图片描述

等值线走向的确定:沿等值线走,大于等值线值的点在等值线的左边。

这里写图片描述

该单元内存在一马鞍点,即等值线是双曲线而不是直线,等值线的连接方式产生了二义性。

这里写图片描述 这里写图片描述
这里写图片描述 这里写图片描述
上图的 “>”表示方格的对应端点 > 等值线阈值,”<”表示方格的对应端点 < 等值线阈值。
解决上面所说的二义性,采用四个端点的平均值即方格的中心点的线性插值作为一个判断的依据:

    double center_Value  = (a + b + c + d) / 4;
    double xc = center_Value - threshold_;
    if(xc < 0)
    {
        points.push_back(vec2f(x1, y1));
        points.push_back(vec2f(x2, y2));
        points.push_back(vec2f(x3, y3));
        points.push_back(vec2f(x4, y4));

    }
    else
    {
        points.push_back(vec2f(x1, y1));
        points.push_back(vec2f(x3, y3));
        points.push_back(vec2f(x2, y2));
        points.push_back(vec2f(x4, y4));

    }

使用线性插值法求等值点坐标:
考虑直线pq,(px, py)为点p坐标,pv为点p的值,点q类似。ev为等值线的值。
那么等值点就应该是:
point{
px + (qx - px) * (ev - pv) / (qv - pv),
py + (qy - py) * (ev - pv) / (qv - pv)
}

理论说得不详细,有兴趣的读者去看一些这方面的论文帮助理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值