当前位置: 首页 > news >正文

游戏中的数学计算

游戏中的数学计算

判断点是否在圆形区域内

对于一个点 (x,y),它到圆心 (xCenter,yCenter) 的最短距离d_sqr= (xxCenter)^2 +(yyCenter)^2,如果d_sqr小于等于半径 radius^2,那么这个点就在圆内(包括边界)。

判断点是否在正方形区域内

public static bool IsPointInRotatedSquareWithQuickReject(float pointX, float pointY,float squareCenterX, float squareCenterY,float squareSize, float rotationRadians){// 平移坐标到正方形中心float dx = pointX - squareCenterX;float dy = pointY - squareCenterY;// 1. 快速拒绝:外接圆检测 外接圆半径 = (size/2) * √2// √2 ≈ 1.41421356237 → 0.5*1.4142 ≈ 0.7071float circumcircleRadius = squareSize * 0.70710678118f; float distanceSqr = dx * dx + dy * dy;// 如果距离平方 > 外接圆半径平方,直接返回falseif (distanceSqr > circumcircleRadius * circumcircleRadius){return false;}// 2. 精确检测:坐标变换 + 边界判断float cosTheta = MathF.Cos(rotationRadians);float sinTheta = MathF.Sin(rotationRadians);// 将点坐标反向旋转到正方形局部坐标系float localX = dx * cosTheta + dy * sinTheta;float localY = -dx * sinTheta + dy * cosTheta;// 判断局部坐标是否在轴对齐正方形内float halfSize = squareSize / 2;return Math.Abs(localX) <= halfSize && Math.Abs(localY) <= halfSize;}

判断圆形区域与矩形区域 相交

public bool CheckCircleSquareIntersect(LVector2 circleCenter, LFloat circleRadius, LVector2 squareCenter, LFloat squareSize)
{// 计算圆心在正方形坐标系中的偏移量LFloat dx = circleCenter.x - squareCenter.x;LFloat dy = circleCenter.y - squareCenter.y;// 正方形的半边长LFloat halfSize = squareSize / 2;// 约束到正方形边界内的最近点// 即在正方形内 找一个距离圆 最近的点LFloat closestX = LMath.Clamp(dx, -halfSize, halfSize);LFloat closestY = LMath.Clamp(dy, -halfSize, halfSize);// 计算平方距离LFloat distanceSqr = (dx - closestX) * (dx - closestX) + (dy - closestY) * (dy - closestY);// 判断是否相交var checkCircleSquareIntersect = distanceSqr <= (circleRadius * circleRadius);if (checkCircleSquareIntersect){Log.Error($"is intersect distance is : {distanceSqr}, r^2 is {circleRadius * circleRadius}");}return checkCircleSquareIntersect;
}

相关文章:

  • 从时间到宇宙:探索时间同步的底层奥秘与工程实践
  • javascript中运算符的优先级
  • 【时时三省】(C语言基础)函数的递归调用例题
  • Python中质数筛选及优化效率对比
  • 【笔记】修改abu量化本地部署数据文件夹目录
  • Redis集群热点Key问题解决方案
  • HTML应用指南:利用GET请求获取全国罗森门店位置信息
  • 文本编辑器vi的使用
  • 2025年软件测试面试题,精选33道,附答案
  • 5月28日星期三今日早报简报微语报早读
  • SCDN如何同时保障网站加速与DDoS防御?
  • 【C++基础知识】匿名命名空间
  • 可视化数据大屏适配方案之Scale等比缩放
  • AI日报 - 2025年05月28日
  • 鸿蒙如何引入crypto-js
  • 麒麟系统QT打包程序问题
  • gtx的测试
  • 题目 3342: 蓝桥杯2025年第十六届省赛真题-红黑树
  • Android --- ObjectAnimator 和 TranslateAnimation有什么区别
  • 【部署】手搓一个dify可用的rerank模型接口服务
  • 专门做二手手机的网站吗/南昌seo快速排名
  • 江西医院网站建设/网络营销推广方法和手段
  • 儿童网站源码/淘宝关键词排名查询
  • 网站开发顶岗周记/疫情最新消息今天公布
  • 网站设计公司竞争优势/济南百度推广公司电话
  • 北京建站模板系统/微信推广多少钱一次