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

238 天前
 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),此时它们存在三个交点,怎么把他们都求出来?

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

我参考了这个回答: 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
238 天前
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