从N个2D点返回点对,其中每两个点定义一条直线
Return pairs of points from N 2D points where each two points define a line
我有一个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
相关文章:
- 我希望定义两个具有相同代码的不同名称的库
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 为什么累积C++定义了两个模板
- 在两个.cpp文件之间定义全局类/结构指针
- 宏定义中的预处理器令牌两边有两个双引号
- 如何在两个不同的命名空间(但只写一次)中使用相同的标头定义,命名空间有不同的实现?
- 基于对象的两个属性的自定义比较器会引发异常
- 根据下面的作者,如果两个指针指向不同的数组,则比较的第一个版本将未定义
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 为什么我无法比较自定义类类型的两个向量?
- 宏的定义从一个值创建两个参数
- 错误:当定义两个带有标头文件的类时,将重新定义类
- 为什么 for 循环不能定义两个作用域的变量?
- 比较两个用户定义的类型向量
- 为什么转换涉及两个用户定义的转换功能/构造函数
- 我如何防止静态类成员变量需要两个定义/声明
- 将两个#定义混合成一个单词
- 我在编译时得到这个错误:错误LNK2019:我在main中获得两个定义的函数
- 为什么std::vector::front有两个定义?(c++)
- 为什么运算符[]有两个定义?