Python 配对点列表,如何沿线查找点

标签 python list lines

我有一组函数可以生成如下所示的配对点列表:

my_list=[((57.5, 3048.0), (62.0, 3050.0)), ((82.0, 1006.0), (93.0, 1021.5)), ((95.0, 1354.0), (86.0, 1336.0)), ((95.0, 1354.0), (89.0, 1327.0))...]

这样每一对都是:

((57.5, 3048.0), (62.0, 3050.0)) Pair 0
((82.0, 1006.0), (93.0, 1021.5)) Pair 1
((95.0, 1354.0), (86.0, 1336.0)) Pair 2
((95.0, 1354.0), (89.0, 1327.0)) Pair 3
((104.0, 2366.0), (109.0, 2350.0)) Pair 4
((104.0, 2370.0), (109.0, 2350.0)) Pair 5
((122.5, 2375.0), (109.0, 2350.0)) Pair 6

等等

这是通过分析图像生成的一长串 X,Y 坐标。我需要找到一种方法来拒绝大部分观点。

任何少于 3 个不落在相似线上的点(不精确,需要一些回旋余地)都需要被拒绝。

大多数点都是不在一条线上的簇,或者只有两个点在一条线上。有没有一种方法可以遍历这个列表,并且仅将 3 个或更多点保存在大致同一行上?

这是一张图片来展示我所追求的。该图像显示了函数发现的微弱移动小行星以及还发现的所有噪音。您可以看到小行星有 3 个以上的点大致在同一条线上,而噪音则相当随机。我试图丢弃仅在同一直线上的两个点的点。

enter image description here

有很多问题要问,但很重要!

实现答案 1 后

enter image description here

最佳答案

您可以找到一个方程来计算一个点到其他两点之间的直线的距离。 (https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line)。

def distance(point, segment):
    """Distance from a point to a line formed by a segment"""
    ...

然后循环遍历所有线段并计算到每个点的距离。您需要一个“足够接近”的阈值。然后,您可以列出一条线附近的所有点。像这样的东西。

ON_LINE_THRESHOLD = 1.5

for segment in my_list:
    close_points = []
    for point1, point2 in my_list:
        if distance(point1, segment) < ON_LINE_THRESHOLD:
            close_points.append(point1)
        if distance(point2, segment) < ON_LINE_THRESHOLD:
            close_points.append(point2)
    if len(close_points) >=3:
        # Close points will always be at least two as it includes the end points.
        do something!

接下来如何处理线上的点列表取决于您。

关于Python 配对点列表,如何沿线查找点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449293/

相关文章:

c++ - 限制每行十个五边形数字的响应

vim 有限行内存

linux - 使用 sed 和 perl 进行文字处理,将行从一个文件复制到另一个文件

python - 如何在 python 中对迭代器调用 __next__ n 次

c# - Linq 查询在 C# 中返回值而不是设置值(附示例)

python - 将列表中的每个元素打印为前一个元素数量的两倍

android - android中的数据绑定(bind)复杂列表

python - 在特定时间发送 Http 请求

python - Python 的快速 RC4 密码流?

python - 如何在 Hive 中将一列拆分为两列