我有一个2D点列表:(x1,y1),(x2,y2)...(xN,yN) - N个2D点。 每两个点定义一条2D线。
返回所有唯一2D线的列表,您可以使用列表中的点对构建它们。
如何使用哈希表/ map实现 - 保持唯一行(有无限行)
我试图找到斜率和截距然后交点。
斜率= y2 -y1 / x2 - x1 截距= y1 - 斜率* x1;
(尝试在c ++中执行此操作)
答案 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