首页 > 其他分享 >检查某个点是否靠近 Bounds 的指定边缘

检查某个点是否靠近 Bounds 的指定边缘

时间:2024-01-31 22:35:18浏览次数:20  
标签:min Mathf point float Bounds 靠近 edgeDirection bounds 某个

/// <summary>
    /// 检查某个点是否靠近 Bounds 的指定边缘
    /// </summary>
    /// <param name="point"></param>
    /// <param name="bounds"></param>
    /// <param name="edgeDirection">edgeDirection == "XAxis" || edgeDirection == "YAxis" || edgeDirection == "ZAxis"</param>
    /// <param name="distanceThreshold">边缘容差</param>
    /// <returns></returns>
    public static bool IsPointNearEdge(Vector3 point, Bounds bounds, string edgeDirection, float distanceThreshold = 0.1f)
    {
        // 获取边界框的最小和最大位置
        float minX = Mathf.Min(bounds.min.x, bounds.max.x);
        float maxX = Mathf.Max(bounds.min.x, bounds.max.x);
        float minY = Mathf.Min(bounds.min.y, bounds.max.y);
        float maxY = Mathf.Max(bounds.min.y, bounds.max.y);
        float minZ = Mathf.Min(bounds.min.z, bounds.max.z);
        float maxZ = Mathf.Max(bounds.min.z, bounds.max.z);

        // 判断指定方向是否为有效的边缘方向
        //bool isValidEdgeDirection = edgeDirection == EdgeDirection.XAxis || edgeDirection == EdgeDirection.YAxis || edgeDirection == EdgeDirection.ZAxis;
        bool isValidEdgeDirection = edgeDirection == "XAxis" || edgeDirection == "YAxis" || edgeDirection == "ZAxis";

        // 判断指定点是否在边缘附近指定的距离范围内
        if (!isValidEdgeDirection)
        {
            Debug.LogError("超出范围");
            return false;
        }

        Debug.Log(edgeDirection);

        // 判断指定点是否在指定方向上靠近了另外两个方向的边缘
        switch (edgeDirection)
        {
            case "XAxis":
                return (Mathf.Abs(point.x - minX) <= distanceThreshold || Mathf.Abs(point.x - maxX) <= distanceThreshold) &&
                       (point.y >= minY && point.y <= maxY) && (point.z >= minZ && point.z <= maxZ);
            case "YAxis":
                return (Mathf.Abs(point.y - minY) <= distanceThreshold || Mathf.Abs(point.y - maxY) <= distanceThreshold) &&
                       (point.x >= minX && point.x <= maxX) && (point.z >= minZ && point.z <= maxZ);
            case "ZAxis":
                return (Mathf.Abs(point.z - minZ) <= distanceThreshold || Mathf.Abs(point.z - maxZ) <= distanceThreshold) &&
                       (point.x >= minX && point.x <= maxX) && (point.y >= minY && point.y <= maxY);
            default:
                return false;
        }
    }

 

标签:min,Mathf,point,float,Bounds,靠近,edgeDirection,bounds,某个
From: https://www.cnblogs.com/Roz-001/p/18000271

相关文章

  • 查找目录中所有内容文本中不含某个特定字符串的文件列表
    查找目录中所有内容中不含某个特定字符串的文件的列表find/your/search/dir-typef!-execgrep-q"PatternString"{}\;-print-typef表示只查找文件;!表示对匹配条件进行取反,即不含特定字符串;{}\; 将每个被找到的文件作为参数传递给find后面的grep命令,其中:花......
  • Cesium 从某个位置飞到某个位置
    viewer.camera.flyTo({destination:newCesium.Cartesian3(-3961951.575572026,3346492.0945766014,3702340.5336036095),orientation:{direction:newCesium.Cartesian3(0.8982074415844437,-0.4393530288745287,0.013......
  • java 判断数字在某个区间的语法
    Java判断数字在某个区间的语法介绍区间判断语法if语句switch语句示例代码总结介绍在Java编程中,经常需要判断一个数字是否在某个区间内。例如,判断一个学生成绩是否及格,判断一个年龄是否在合法范围等。本文将介绍Java中判断数字在某个区间的语法,并给出相应的代码示例。......
  • djangoadmin如何实现用户注册或新增后自动分配到某个组
    默认后台设置多个组,当后台新增或通过前台注册新用户后,自动分配到普通用户组以获取对应的权限,方便管理。大概意思就是这样:要实现在DjangoAdmin开发中,将新增用户或新注册的用户自动分配到某个组中,可以使用信号(signal)来完成。在对应的app下新建一个文件如signal.py:fromdjango......
  • 关于list里面对象某个字段的值和map的key对比
    开发中,我常遇到这样的情况,就是一个list集合里面装了10个对象,好多条数据某个字段(A字段)的值是想同的,通过这个字段去确定另外一个值(B字段),就会拿着这个A字段去查询别的表,然后再给B字段赋值,但这有个问题,就是遍历10次去查询,那么数据库的IO交互就很多次。对于这个解决这个问题,我是这样处......
  • java 反射获取某个类的属性名和属性的值
    /***根据字段饰扣可以为空获取每个属性的变更内容如课程名称:英语-->数学;*@paramvo*@paramfieldName字段名:传值类型为CourseName周首字母大写*@paramdescribe字段的描述:可以理解为就是字段的名称如课程名称*@paramsbStringBuffer对象*@return*@th......
  • js用前缀名查找class或id节点,js模糊查询某个dom节点
     1//参数dom为htmldom节点2//参数key为需模糊查询的名称字段3functionqueryClassNode(dom,key){4letcollectArray=[];5for(leti=0;i<dom.childNodes.length;i++){6//核心点7if(d......
  • 在vue2中使用leaflet.AnimatedMarker来移动某个目标
    需求是:点击某个按钮后让扫描仪沿着某条线移动进行扫描效果:  扫描仪是沿着河流移动的,河流的生成方式通过geojson数据生成,geojson里包含了河流的一些点位的经纬度,扫描仪根据经纬度来移动leaflet:1.9.4 leaflet.AnimatedMarker:1.0.0 1.引入 importLfrom'leaf......
  • systemtap统计 探测linux驱动中某个函数的执行时间
    直接上脚本:#!/usr/bin/stapglobalstart,endprobemodule("your_driver").function("your_function"){start[tid()]=gettimeofday_ns()}probemodule("your_driver").function("your_function").return{end[tid()]=get......
  • Git将某个文件合并到指定分支
    企业开发中,经常会单独拉分支去做自己的需求开发,但是某些时候一些公共的配置我们需要从主线pull,这时候整个分支merge显然不合适1.切换至待合并文件的分支gitcheckout<branch>2.将目标分支的单个文件合并到当前分支gitcheckout<目标分支>--<文件路径>3.提交合并后的......