두 선의 교차점을 찾는 방법은 무엇입니까?

두 선의 교차점을 찾는 방법은 무엇입니까?

나는 두 줄 사이의 교차점을 찾기 위해 grep을 얻으려고 노력했습니다.

grep -Fx -f line1.txt line2.txt

입력 파일 내용:

1행.txt:

44.5   -125.0    
44.0   -124.5    
43.0   -124.3    
42.0   -124.0

2행.txt:

43.0 -128.0    
43.1 -127.0    
43.2 -126.0    
43.3 -125.0    
43.4 -124.0    
43.5 -123.0    
43.6 -122.0    
43.7 -121.0

문제는 이 두 행이 정확히 동일하지 않다는 것입니다.

교차로를 쉽게 찾을 수 있는 사람이 있나요?

아래 이미지는 두 선과 대략적인 교차점을 보여줍니다. 여기에 이미지 설명을 입력하세요.

나를 위해 교차로를 찾아주는 명령이 있었으면 좋겠다. 어쩌면 grep은 이것을 할 수 없습니까? 또한 GMT 명령을 시도했지만 작동하지 못했습니다. 어떤 제안이 있으십니까?

교차점에 가장 가까운 line2.txt 지점을 찾아서 쓰는 명령을 선택합니다.

여기에 이미지 설명을 입력하세요.

답변1

Grep은 확실히 잘못된 도구입니다! sed는 수학을 좀 해야 하기 때문에 그다지 좋지 않습니다. Perl이 후보이지만 가장 중요한 것은 선 교차 테스트가 필요하다는 것입니다. 다음은 시작하는 데 도움이 되는 몇 가지 링크입니다. 다행스럽게도 유닉스는 프로그램을 작성해야 하기 때문에 프로그램 작성을 위한 훌륭한 플랫폼입니다.

https://en.wikipedia.org/wiki/Line_segment_intersection

https://stackoverflow.com/questions/563198/whats-the-most-efficent-way-to-calculate-where-two-line-segments-intersect

답변2

저 할 수 있어요추측하다당신은 다음과 같은 것을 생각하고 있습니다 :

( cat line2.txt; cat line1.txt | sed 's/  */ xxxx /' ) | sort -n | awk '$2 == "xxxx" {f2=$3} $2 != "xxxx" {f1 = $2} {print $1" "f1" "f2}'

출력은 다음과 같습니다:

42.0  -124.0
43.0 128.0 -124.0
43.0 128.0 -124.3
43.1 127.0 -124.3
43.2 126.0 -124.3
43.3 125.0 -124.3
43.4 124.0 -124.3
43.5 123.0 -124.3
43.6 122.0 -124.3
43.7 121.0 -124.3
44.0 121.0 -124.5
44.5 121.0 -125.0

관련 정보