过滤数据以仅生成最外面的点

过滤数据以仅生成最外面的点

我有以下内容数据,绘制时给出以下结果在此输入图像描述

我想用线图保存并仅绘制最外面的点。请建议如何继续进行此操作并建议如何过滤数据

答案1

一种天真的方法,就像我的答案对于你之前的问题, 将笛卡尔坐标转换为极坐标,然后根据角度对点进行分组,并找到每组中半径最大的点:

awk -v OFS='\t' '
    {
        t = int(atan2($2,$1)*10)
        r = sqrt($1*$1+$2*$2)
    }

    r > maxr[t] { maxr[t] = r; data[t] = $0 }

    END { for (t in maxr) print t, data[t] }' data.in |
sort -k 1,1g | cut -f 2- >data.out

这会计算 的角度atan2(),然后将其乘以 10 并截断小数位,生成t-30 到 31 之间的值 。这t用作分组值,数组maxr保存每个此类角度组的最大值r(半径) (并且该data数组保存相应的原始输入数据)。

将角度乘以小于 10 的数并截断小数,最终会产生“更大的组”和更少的不同点。乘以较大的值会进一步细分组,但最终会产生锯齿状的线图(例如,值 20 并不起作用)。

最大半径值按其角度组值排序施瓦茨变换,如前面的答案所示,排序键cut在最后被删除。

绘制结果:

在此输入图像描述

改进建议: 点的分组非常基本您可能需要更仔细地执行此操作。讨论如何做到这一点属于https://math.stackexchange.com/

相关内容