计算几何之两条线段的交点

1. 概述

可以通过线段的跨立实验[1]判断两条线段是否相交,但是想要进一步求它们的交点还是比较麻烦。[2]给出的方法更加简单,其原理来自求三维空间两条线段的交点[3]。为了更好的理解,本文将详细介绍二维空间两条线段的交点求解过程。

2. 两条线段交点求解过程

给定两条线段P1P2P3P4,端点表示为P1(x1,y1)P2(x2,y2)P3(x3,y3)P4(x4,y4),两条线段对应的向量表示为P1P2P3P4。假设两条线段的交点为P0(x0,y0),且t=|P1P0||P1P2|s=|P3P0||P3P4|,那么 P0 可以表示为:

{P0=P1+tP1P2,0t1P0=P3+sP3P4,0s1

ts在等于01时表示两条线段相交在端点,如果为其他值,表示两条线段不相交。将点坐标代入公式得:

{x1+t(x2x1)=x3+s(x4x3)y1+t(y2y1)=y3+s(y4y3)

利用公式消元法求得ts

t=(x3x1)(y4y3)(y3y1)(x4x3)(x2x1)(y4y3)(y2y1)(x4x3)s=(x3x1)(y2y1)(y3y1)(x2x1)(x2x1)(y4y3)(y2y1)(x4x3)

ts方程的分子和分母都是向量的叉乘:

t=P3P1P4P3P2P1P4P3s=P3P1P2P1P2P1P4P3

如果P2P1P4P3=0,表示两条线段平行,如果端点在另一条线段上,则该端点为交点,否则不是。如果ts有一个没有落在区间[0,1]内,则两条线段不相交。那么交点P0的坐标为:

{x0=x1+t(x2x1)y0=y1+t(y2y1)

{x0=x3+s(x4x3)y0=y3+s(y4y3)

至此,整个求解过程介绍完成,再去看[2]的代码就非常容易理解了。

参考文献

  1. How to check if two given line segments intersect?

  2. Find the Intersection Point of Two Line Segments

  3. Intersections of Lines In Three-Space  - Jon Garvin

posted @   Huntto  阅读(1962)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示