Graphics 找到所有非线性点

Graphics 找到所有非线性点,graphics,geometry,computer-science,computational-geometry,convex-hull,Graphics,Geometry,Computer Science,Computational Geometry,Convex Hull,给定二维平面上的一组点,是否有可能在二维平面上找到一组所有可能的非线性点? 目前,时间复杂性并不重要,只要解决方案是正确的。您所要求的可能需要澄清。任意两点彼此共线,因为有一条线将它们连接起来。为了回答这个问题,我似乎必须解释你所问的意思:如果任何数量大于或等于三的点都彼此共线,我们的非共线点集只能包含一个共线点 有鉴于此,我们可以做到以下几点: 对于每对点,计算它们之间的斜率为(y-y')/(x-x')。如果x=x',只需注意斜率为V 接下来,对于每一对点和坡度,检查涉及该对中任一点的所有其他

给定二维平面上的一组点,是否有可能在二维平面上找到一组所有可能的非线性点?
目前,时间复杂性并不重要,只要解决方案是正确的。

您所要求的可能需要澄清。任意两点彼此共线,因为有一条线将它们连接起来。为了回答这个问题,我似乎必须解释你所问的意思:如果任何数量大于或等于三的点都彼此共线,我们的非共线点集只能包含一个共线点

有鉴于此,我们可以做到以下几点:

  • 对于每对点,计算它们之间的斜率为(y-y')/(x-x')。如果x=x',只需注意斜率为V

  • 接下来,对于每一对点和坡度,检查涉及该对中任一点的所有其他点对,并查看相应的坡度是否与正在检查的坡度相同。将确定的所有点添加到集合中,然后将此集合添加到集合中

  • 完成后,将有一个集合,集合中每个集合中的所有点都将由相互共线的点组成

  • 现在的问题是:找到可以选择的最大数量的点,以便在两个集合中不存在两个点。如果拾取其中一个集合中的两个点,则拾取的两个点至少与另一个点共线

    此时,我们可以简单地尝试n个点的所有2^n子集,并检查每个子集是否可以接受(因为子集和任何集合的交集的大小最多为1)

    例如:

    p = (1, 1), q = (2, 2), r = (3, 3), s = (2, 3)
    
    m = [ - 1 1 2]
        [ 1 - 1 V]
        [ 1 1 - 0]
        [ 2 V 0 -]
    
    (p, q): r yes, s no; collection (p, q, r)
    (p, r): q yes, s no; collection (p, q, r)
    (p, s): q no, r no; no collection
    (q, p): r yes, s no; collection (p, q, r)
    (q, r): p yes, s no; collection (p, q, r)
    (q, s): p no, r no; no collection
    (r, p): q yes, s no; collection (p, q, r)
    (r, q): p yes, s no; collection (p, q, r)
    (r, s): p no, q no; no collection
    (s, p): q no, r no; no collection
    (s, q): p no, r no; no collection
    (s, r): p no, q no; no collection
    
    Try candidate (p, q, r, s): intersection with (p, q, r) has size > 1, reject
    Try candidate (p, q, r): intersection with (p, q, r) has size > 1, reject
    Try candidate (p, q, s): intersection with (p, q, r) has size > 1, reject
    …
    Try candidate (p, s): intersection with (p, q, r) has size = 1, accept
    

    这在时间和空间上显然是指数型的,但这将解决问题。

    你不是说非共线点三元组吗?