Фильтрация данных для создания только самых удаленных точек

Это то, что я использую. Насколько я могу судить, он делает именно то, что вы хотите.

# make tab cycle through commands after listing
bind '"\t":menu-complete'
bind "set show-all-if-ambiguous on"
bind "set completion-ignore-case on"
bind "set menu-complete-display-prefix on"

Это работает на Mac (10.13 и 10.14 )и Ubuntu (16.04 и 18.04 ).

-1
03.05.2021, 16:47
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в конце.

Нанесение результата на график:

enter image description here

Предложения по улучшению :Группировка точек в очень простая , и вы можете сделать это более тщательно. Обсуждение того, как это сделать, относится к сфереhttps://math.stackexchange.com/

1
28.07.2021, 11:35

Теги

Похожие вопросы