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

2024-03-30 10:20:15 +08:00
 WangLiCha

举例,多段线( 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),此时它们存在三个交点,怎么把他们都求出来?

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1028316

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX