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

网站建设公司服务公司友情链接也称为

网站建设公司服务公司,友情链接也称为,wordpress弹出搜索,提供网站建设方案服务一、介绍 分离轴算法(简称SAT)通常用于检查两个简单多边形(凸边形)之间或多边形与圆之间的碰撞。本质上,如果您能够绘制一条线来分隔两个多边形,则它们不会发生碰撞,如果找不到一条线来分割两个…

一、介绍

       分离轴算法(简称SAT)通常用于检查两个简单多边形(凸边形)之间或多边形与圆之间的碰撞。本质上,如果您能够绘制一条线来分隔两个多边形,则它们不会发生碰撞,如果找不到一条线来分割两个多边形,则它们发生碰撞。

如图:

 

 

        具体做法是遍历两个多边形的所有边,求得每条边的法向轴,再求出每个多边形在法向轴上的投影,求出投影的最大值点和最小值点,通过比较两个多边形的最值点的关系得出是否碰撞。

演示:

 

 

 

 

 

 

 

 运行代码:

获取在法向轴上投影的函数:

public void ProjectPolygon(Vector2 axis, Polygon polygon, ref float min, ref float max)
{//要在轴上投影一个点,使用点积float dotProduct = Vector2.Dot(axis, polygon.Points[0]);min = dotProduct;max = dotProduct;for (int i = 0; i < polygon.Points.Count; i++){dotProduct = Vector2.Dot(polygon.Points[i], axis);if (dotProduct < min){min = dotProduct;}else{if (dotProduct > max){max = dotProduct;}}}
}

 判断是否相交函数:、

  public float IntervalDistance(float minA, float maxA, float minB, float maxB){if (minA < minB){return minB - maxA;}else{return minA - maxB;}}

检测函数:

    public bool CollisionDetection(Polygon polygonA, Polygon polygonB){int edgeCountA = polygonA.Edges.Count;int edgeCountB = polygonB.Edges.Count;Vector2 edge;// 循环遍历两个多边形的所有边for (int edgeIndex = 0; edgeIndex < edgeCountA + edgeCountB; edgeIndex++){if (edgeIndex < edgeCountA){edge = polygonA.Edges[edgeIndex];}else{edge = polygonB.Edges[edgeIndex - edgeCountA];}//查找多边形当前是否相交// 找出垂直于当前边的轴Vector2 axis = new Vector2(-edge.y, edge.x);axis.Normalize();// 求多边形在当前轴上的投影float minA = 0; float minB = 0; float maxA = 0; float maxB = 0;ProjectPolygon(axis, polygonA, ref minA, ref maxA);ProjectPolygon(axis, polygonB, ref minB, ref maxB);// 检查多边形投影当前是否相交if (IntervalDistance(minA, maxA, minB, maxB) > 0)return false;}return true;}

结果演示:

碰撞检测算法-分离轴算法

参考链接:

https://code.tutsplus.com/collision-detection-using-the-separating-axis-theorem--gamedev-169t

How 2D Game Collision Works (Separating Axis Theorem) - YouTube

Collision Detection with SAT (Math for Game Developers) - YouTube

http://www.tj-hxxt.cn/news/113228.html

相关文章:

  • 做网站如何来钱来宾网站seo
  • 网站建设优化公司哪家好程序员培训班要多少钱
  • 网站开发用什么数据库直销怎么做才最快成功
  • 湖南省建设工程信息网站网络营销就业前景和薪水
  • 网站建设优化多少钱一个企业seo网站的优化流程
  • 曲靖做网站需要多少钱深圳做网站的
  • 做网站的软件下载高端网站建设定制
  • 数商云公司简介整站优化包年
  • 游戏网站做关键字网上营销方法
  • 网站上的付费文章怎么做网页搜索关键字
  • 抓取网站访客qq北京百度推广官网首页
  • wordpress theme o'connor系统优化软件哪个最好的
  • 网站判断手机跳转代码网站免费进入窗口软件有哪些
  • 网站建设厃金手指花总十三云搜索下载
  • 做网站多少钱啊seo是怎么优化推广的
  • 网站出现建设中一键注册所有网站
  • 建设网站项目的目的是什么意思郑州网站公司哪家好
  • 宠物医疗设计素材网站平台运营推广方案
  • 个人简历网站模板下载百度营稍
  • 化妆网站模板下载免费百度指数行业排行
  • 网站建设 河南互联网营销的特点
  • 球场 技术支持 东莞网站建设广东seo价格是多少钱
  • 那个公司做的网站详情页好看沈阳seo关键词排名
  • 张家港公司网站建设seo优化个人博客
  • 网站在百度无法验证码怎么办啊潍坊网站建设公司
  • 南昌网站建设_南昌做网站公司网站提交收录软件
  • 静态网站做毕业设计百度关键词排名推广
  • 个人网站 内容建设怎么投放网络广告
  • 网站设计模板之家百度引擎搜索入口
  • 做企业网站推广多少钱免费宣传平台有哪些