나는 다음을 가지고 있습니다데이터, 플롯하면 다음과 같은 결과가 나타납니다.
선 플롯으로 저장하고 가장 바깥쪽 점만 플롯하고 싶습니다. 이를 진행하는 방법을 제안하고 데이터를 필터링하는 방법을 제안하십시오.
답변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/