已知两个相交的 polyline 的坐标点集合,怎么求交点的精确坐标?坐标点不在点集里 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
WangLiCha
V2EX    程序员

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

  •  
  •   WangLiCha 2024-03-30 10:20:15 +08:00 2075 次点击
    这是一个创建于 627 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    我参考了这个回答: 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
        9
    akira  
       2024-03-30 14:04:37 +08:00
    2 条直线求相交点会吧
    2 个线段求相交点会吧
    1 个线段和 3 个 线段 分别求交点 会吧
    3 个线段和 3 个 线段 分别求交点 会吧
    那就做完了啊。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5138 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 09:12 PVG 17:12 LAX 01:12 JFK 04:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86