【Unity TIL】6. 如何判断两条线段是否相交
AABB 碰撞检测,也就是轴对齐碰撞检测,用平行于x,y轴的矩形表示物体。
如何判断两个矩形是否相撞,可以通过分别判断x,y轴上的线段是否相交。
假设线段分别为 (s1,e1), (s2,e2),判断线段相交
-
可以根据 两个线段长度和的一半 和 两个线段中点构成的线段比较长短。
-
s2<e1 && s1<e2
-
min(e1, e2) > max(s1, s2) (推荐)
如果是直接想计算相交的长度直接用 Math.Max(0, Math.Min(e1, e2) - Math.Max(s1, s2));
可以做一下这道题 836. 矩形重叠 - 力扣(LeetCode)
public class Solution { public bool IsRectangleOverlap(int[] rec1, int[] rec2) { return IsLineOverlap2(rec1[0], rec1[2], rec2[0], rec2[2]) && IsLineOverlap2(rec1[1], rec1[3], rec2[1], rec2[3]); } public bool IsLineOverlap(int x1Min, int x1Max, int x2Min, int x2Max) { double mid1 = (x1Max + x1Min) / 2.0d; double mid2 = (x2Max + x2Min) / 2.0d; double length1 = x1Max - x1Min; double length2 = x2Max - x2Min; return Math.Abs(mid1 - mid2) < ((length1 + length2) * 0.5d); } public bool IsLineOverlap1(int x1Min, int x1Max, int x2Min, int x2Max) { return (x2Min<x1Max) && (x1Min < x2Max); } public bool IsLineOverlap2(int x1Min, int x1Max, int x2Min, int x2Max) { return Math.Min(x1Max, x2Max) > Math.Max(x1Min, x2Min); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业