如何找到两条线的交点?

如何找到两条线的交点?

我一直在尝试让 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 是一个候选者,但最重要的是您需要进行线路相交测试。这里有几个链接可以帮助您入门。好在unix是一个很棒的编写程序的平台,因为你需要编写程序。

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

相关内容