首页 > 其他分享 >【Unity TIL】6. 如何判断两条线段是否相交

【Unity TIL】6. 如何判断两条线段是否相交

时间:2023-01-08 01:55:40浏览次数:58  
标签:int 线段 x2Min TIL Unity x1Min rec1 Math

AABB 碰撞检测,也就是轴对齐碰撞检测,用平行于x,y轴的矩形表示物体。

如何判断两个矩形是否相撞,可以通过分别判断x,y轴上的线段是否相交。

假设线段分别为 (s1,e1), (s2,e2),判断线段相交

  1. 可以根据 两个线段长度和的一半 和 两个线段中点构成的线段比较长短。

  2. s2<e1 && s1<e2

  3. 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);
    }
}

AABB-box碰撞检测 - 知乎 (zhihu.com)

标签:int,线段,x2Min,TIL,Unity,x1Min,rec1,Math
From: https://www.cnblogs.com/fcnaud/p/17034005.html

相关文章

  • 痞子衡嵌入式:MCUBootUtility v4.0发布,开始支持MCX啦
    --痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v3.5.0)发布过去9个月了,这一次痞子衡为大家带来了版本升级v4.0.0,这个版本主要有两个重要更新需要跟大家......
  • Unity初始界面设计与人物移动代码
    初始界面设计的比较简洁,只有三个按键,开始游戏,设置,退出,一张背景。本来想整一个玩家自定义按键,但是觉得太麻烦且没必要。做到现在的感受就是,遇到不会的地方,网上的教程五花......
  • 点击获取Cesium中加载的3DTile模型的属性信息
    1.添加鼠标点击事件//鼠标单击左键事件viewer.screenSpaceEventHandler.setInputAction(functiononMouseClick(click){//自己需要写逻辑的地方......
  • Reptile
    Chapter1chapute1.requests1.1安装pipinstallrequests  #爬虫1.2使用获取html代码importrequestsresponse=requests.get("https://www.autob......
  • Unity URP管线如何实现屏幕后处理
    URP管线可扩展的自己的RendererFeature,这里写了一个屏幕后处理的demo,首先shader如下:1Shader"MyURP/Kerry/PostProcess/URPFeature_PostProcessDemo"2{3Pro......
  • Unity URP Shader之如何获取屏幕坐标
    获取屏幕坐标,可使用Unity提供的内置函数float4ComputeScreenPos(float4positionCS);来获取,该方法定义如下:float4ComputeScreenPos(float4positionCS){float......
  • 线段树
    概述线段树通过在原数组上建一棵二叉树,高效地处理各种结合性问题。线段树的生命就在于pushup和pushdown,更具体地,就在于结合性和差分性。操作线段树什么都支......
  • 吉老师线段树
    概述所谓吉老师线段树,指的其实是吉如一发明/整理的线段树上区间最值操作和区间历史最值的维护方式。操作区间最值操作\(\foralli\in[l,r],a_i=\min/\max(a_i,v)\)......
  • 某个被洛谷 ban 掉的吉老师线段树
    概述所谓吉老师线段树,指的其实是吉如一发明/整理的线段树上区间最值操作和区间历史最值的维护方式。操作区间最值操作\(\foralli\in[l,r],a_i=\min/\max(a_i,v)\)......
  • Java中的StringUtils引入及使用
    pom.xml中引入依赖<!--https://mvnrepository.com/artifact/org.apache.commons/commons-lang3--><dependency><groupId>org.apache.commons</groupId><artifactId>......