• 请不要在回答技术问题时复制粘贴 AI 生成的内容
WangLiCha
V2EX  ›  程序员

已知两个相交的 polyline 的坐标点集合,怎么求交点的精确坐标?坐标点不在点集里

  •  
  •   WangLiCha · Mar 30, 2024 · 2964 views
    This topic created in 950 days ago, the information mentioned may be changed or developed.

    举例,多段线( polyline ) A 和 B 都由 4 个节点组成,A 的四个节点坐标为(1,1) (2,1) (3,4) (4,4),B 的四个节点坐标为(1,4) (2,2) (4,3) (3,1), 这两条线是存在一个交点的,怎么求这个交点的精确坐标?

    PS:如果要求再提高,比如 B 的四个节点坐标为(1,4) (2,2) (4,3) (1,0),此时它们存在三个交点,怎么把他们都求出来?

    9 replies  •  2024-03-30 14:04:37 +08:00
    hefish
    hefish
    Mar 30, 2024
    1
    穷举一下。 大不了就是求 12 对直线看相交不相交,相交的是否在线段上。
    NessajCN
    NessajCN
    Mar 30, 2024 via Android
    2
    这不中学解几题吗…
    用两组分段一元一次函数表示线段方程,
    找出同定义域内是否存在解
    kalinzhang
    kalinzhang
    Mar 30, 2024❤️1
    3
    顺时针遍历一个 polygon 的所有顶点,联立方程求交点即可。套现成的公式,算两个行列式就完事了。
    如果要优化的话,可以先判断一下两个 polygon 是否可能相交(例如算下 AABB )再联立解方程,但其实解方程计算量也不大。
    再扩展一下如果要做复杂 polygon 的相交测试的话,要考虑 polygon 是否有自交、是否是凹的、是否有多个 polygon 嵌套等情况,比较复杂了
    rabbbit
    rabbbit
    Mar 30, 2024
    4
    https://paulbourke.net/geometry/pointlineplane/
    往下翻 Intersection point of two line segments in 2 dimensions
    Eloxt
    Eloxt
    Mar 30, 2024
    5
    Java 的话可以用 JTS 库运算
    https://github.com/locationtech/jts
    SmiteChow
    SmiteChow
    Mar 30, 2024
    6
    shapely intersection result bound coords
    ttentau1
    ttentau1
    Mar 30, 2024
    8
    真好,你现在发问还有人回答,我之前在这里问都没人回答,自己弄了好久才弄出来

    我参考了这个回答: https://stackoverflow.com/questions/37127144/how-can-i-fill-enclosed-shapes-in-a-line


    我实现了一个比较完整的相交检测,可以查看这里的代码,https://github.com/zyronon/open-design/blob/01b0b80de453d97032357283fcdc35b37d1929e9/src/lib/designer/shapes/Pen.ts#L250
    akira
    akira
    Mar 30, 2024
    9
    2 条直线求相交点会吧
    2 个线段求相交点会吧
    1 个线段和 3 个 线段 分别求交点 会吧
    3 个线段和 3 个 线段 分别求交点 会吧
    那就做完了啊。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5656 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 03:10 · PVG 11:10 · LAX 19:10 · JFK 22:10
    ♥ Do have faith in what you're doing.