【问题标题】:Given 4 line equation of a convex quadrilateral, how can I find coordinate of 4 corner?给定凸四边形的 4 线方程,如何找到 4 个角的坐标?
【发布时间】:2017-03-20 04:23:14
【问题描述】:

我有四个直线方程 y=mx+b 并且有 6 个交点。

已知这些直线形成一个凸四边形。

如何找到四边形的四个交点(最好按顺序)?

【问题讨论】:

    标签: matlab geometry 2d computational-geometry


    【解决方案1】:

    第一个凹四边形:

    第6个交叉点应该也在1)我只是忘记在那儿画了。

    1. 计算所有交点并将它们与线配对

      l1: p2,p5,p6
      l2: p1,p4,p6
      l3: p1,p2,p3
      l4: p3,p4,p5
      

      l 表示直线,p 表示交点

    2. 判断点只是边缘还是中间

      所以中间点是如果你从它所属的线的每一侧得到另一个点。换句话说,如果您将点转换为其参数位置(或距某个起点的距离),则中间点位于其他两点距离之间。您在相交计算时直接获得的参数/距离,但如果您不这样做,您可以使用:

      t(p) = dot(p-A,B-A)
      

      其中A,B 是线端点,p 是查询的交点,t(p) 是它与A 的标量“距离”。

      所以找出哪些点只是边缘e,哪些是中间m

      l1: e2,e5,m6
      l2: e1,e4,m6
      l3: e1,m2,e3
      l4: e3,m4,e5
      

      现在,如果任何点至少有一次中间,那么它就是部分中间,如果它只是边缘,那么它就是边缘,如果它只是中间,那么它就是中间:

      edge:    p1,p3,p5
      partial: p2,p4
      middle:  p6
      
    3. 构造多边形

      所以我们必须使用边缘点。我们跳过的部分点(因为它们位于已经使用的线上),最后我们也使用中间点。我们知道我们的多边形将是:

      (p1,p3,p5) + (p6)
      

      现在我们需要找到凹的中间点p6会去哪里。有3种组合:

      e1,m6,e3,e5
      e1,e3,m6,e5
      e1,e3,e5,m6
      

      我们知道m6 属于l1,l2l1,l2 也有p2,p5,p1,p4,它们只是边缘点:e1,e5 所以m6 将放在它们之间,所以正确的解决方案是:

      e1,e3,e5,m6
      

    现在是凸四边形:

    如果我们利用 #1,#2 来形成凸四边形,我们必须使用中间点和部分中间点并选择一个纯边缘点。选择不属于纯中点的线。所以我们必须使用:

        (p2,p4) + (m6) + one_from(e1,e3,e5)
    

    m6 不属于l3,l4,所以我们需要找到属于两者的边,即e3 所以

        (p2,p4) + (m6) + (e3)
    

    现在我们只需要找出顺序。中间点和边缘点不会靠近自己,所以你有 2 个解决方案:

        p2,m6,p4,e3
        p2,e3,p4,m6
    

    两者都是正确的,它们只是自身的反转(不同的多边形缠绕规则),因此您可以根据任意两个相邻顶点的叉积的z 坐标选择您需要的那个。

    【讨论】:

      【解决方案2】:

      求解每个线对的线性方程组

        y = m[i] * x + b[i]
        y = m[j] * x + b[j]
      

      其中 m[i], b[i] 是第 i 行的系数,得到 (x,y) 的交集。

      如果正好有 6 个交点(没有平​​行线,没有退化),那么每条线都有三个交点。两个交点是“外”,一个(中间)是“内”,所以有三个内点和三个外点。

      好像凸四边形总是包含所有三个内点,所以我们可以分离内点,得到对应的第四个点。

      例如,如果线被指定为A,B,C,D,并且交点AB,AC,CD在内部,那么第四点是交点BD(B和D在交点列表中是唯一的)

      附:请注意,线方程形式y=mx+b并不适合所有可能的线(不适用于垂直线),因此最好使用more general form,如A*x + B*y + C = 0或其他。

      【讨论】:

      • 我知道如何找到交点,您能否详细说明“然后从任意选择的顶点按极角对计算的顶点进行排序。”,还有6个交点,我怎么知道该选择哪个
      • 呃,我假设你图片左下角的唯一极角是用于所需顶点的,当角度相同时,使用最接近的顶点,但我发现它不适用于任意基础顶点
      猜你喜欢
      • 2013-11-18
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2021-09-22
      • 2019-02-14
      • 1970-01-01
      相关资源
      最近更新 更多