Это то, что я использую. Насколько я могу судить, он делает именно то, что вы хотите.
# 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 ).
Наивный подход, который, как мой ответ на предыдущий вопрос, преобразует декартовы координаты в полярные координаты , но затем группирует точки на основе угла и находит точку внутри каждой группы с наибольшим радиусом:
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/