从N个2D点返回点对,其中每两个点定义一条直线

Return pairs of points from N 2D points where each two points define a line

本文关键字:两个 定义 一条 返回 2D      更新时间:2023-10-16

我有一个2D点的列表:(x1, y1), (x2, y2)…(xN, yN) - N个2D点。每两个点定义一条二维直线。

返回所有唯一2D线的列表,您可以使用列表中的点对来构建该列表。

我如何实现使用哈希表/映射-保持唯一的行(有无限行)

我试图找到斜率和截距然后交点。

斜率= y2 -y1/x2 - x1

(尝试在c++中这样做)

您没有指定语言,所以为了方便起见,这里我将使用python。这对python来说就像一个笑话:

import itertools

def slope(p1, p2):
    return (p1[1]-p2[1]) / (p1[0]-p2[0])

def slp_intrcpt(p1, p2):
    """
    return the tuple of slope and intercept
    """
    slp = slope(p1, p2)
    return slp, p1[1] - slp * p1[0]

def uniq_lines(points):
    return set(slp_intrcpt(p1, p2) for p1, p2 in itertools.combinations(points, 2))

由于(slope, intercept)对足够好,可以确定一条线,所以我会说完成了您的要求。

如果您想跟踪生成行的所有对,您可以

import collections
def uniq_lines(points):
    d = collections.defaultdict(lambda: [])
    for p1, p2 in itertools.combinations(points, 2):
        d[slp_intrcpt(p1, p2)].append((p1, p2))
    return d