原文参考
http://www-cs.ccny.cuny.edu/~wolberg/capstone/intersection/Intersection point of two lines.html
有两条直线,p1(x1,y1)和p2(x2,y2)构成直线A,p3(x3,y3)和p4(x4,y4)构成直线B
那么我们可以用参数方程描述这2条直线:
Pa=P1+ua(P2−P1)
Pb=P3+ub(P4−P3)
当2条直线相交,Pa=Pb,我们可以得到下面2个关于ua和ub的方程:
x1+ua(x2−x1)=x3+ub(x4−x3)
y1+ua(y2−y1)=y3+ub(y4−y3)
解方程得到ua和ub:
ua=(x4−x3)(y1−y3)−(y4−y3)(x1−x3)(y4−y3)(x2−x1)−(x4−x3)(y2−y1)
ub=(x2−x1)(y1−y3)−(y2−y1)(x1−x3)(y4−y3)(x2−x1)−(x4−x3)(y2−y1)
将结果回代到对应的原式中得到交点:
x=x1+ua(x2−x1)
y=y1+ua(y2−y1)
注:
- ua和ub的分母相同
- 当分母是0时,2条直线平行
- 当ua和ub的分子和分母同时为0时,2条直线重合
- 本公式是关于直线的,如果需要对线段进行相交判断的话,仅需要继续检查ua和ub是否在0-1之间即可。只要ua和ub其中一个在0-1范围之间,那么对应的线段包含交点。如果ua和ub都在0-1之间,那么交点同时在2条线段之内。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!