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

时间:2015-08-19 13:46:18

标签: c++ algorithm hashtable

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

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

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

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

斜率= y2 -y1 / x2 - x1 截距= y1 - 斜率* x1;

(尝试在c ++中执行此操作)

1 个答案:

答案 0 :(得分:0)

你没有指定语言,所以为了方便起见,我将在这里使用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