游戏中的2d数学-求线段和圆相交的交点
stackexchange参考文章
https://math.stackexchange.com/questions/311921/get-location-of-vector-circle-intersection
下面来复习一下
假设圆的中心为(h,k),半径为r,那么圆的方程式如下:
现在考虑线段。设线段的起点从 (x0,y0)到终点 (x1,y1),用参数方程表示这条直线的形式:
t是实数。当0<t<1,t就表示起点和终点构成的线段之间的值。
现在我们用参数方程来替换圆的x,y 的话我们就得到了一个关于t的一元二次方程:
一般来说方程会有小于等于2个根。
但假如线段的起点在圆外,而终点在圆内,得到的结果也是2个实数根。其中一个根t在0-1之间,而另一个大于1。
一元二次方程一般形式如下:
那么有:
用求根公式得到结果:
如果线段的起点和终点不相等的话,则a为正数。
如果起点在圆外,则c为正数。
另外对于线段来说,根的有效值应该在0-1之间。
【推荐】国内首个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 让容器管理更轻松!