游戏中的2d数学-圆和矩形碰撞测试

原文参考:

https://yal.cc/rectangle-circle-intersection-test/

本文是关于圆-矩形如何进行碰撞检测。由于某些原因,这似乎一直被认为是一个复杂的事情,但其实不是。

先说重要的,你很有可能已经掌握了如何检测圆和点之间的碰撞检测-只需要检测点和圆之间的距离是否小于圆的半径就行了:

DeltaX = CircleX - PointX; DeltaY = CircleY - PointY; return (DeltaX * DeltaX + DeltaY * DeltaY) < (CircleRadius * CircleRadius);

令人感到惊奇的是,矩形-圆碰撞检测跟这个没太大差别,首先你需要找到距离圆心最近的点,该点位于矩形中(或者边上)。然后检测该点是否在圆内。

如果矩形不考虑旋转,找到离圆心最近的点很简单,圆的坐标和矩形坐标之间进行clap操作即可。

NearestX = Max(RectX, Min(CircleX, RectX + RectWidth)); NearestY = Max(RectY, Min(CircleY, RectY + RectHeight));

所以,结合上述2条语句,你得到了3行代码用来检测圆和矩形相交检测:

DeltaX = CircleX - Max(RectX, Min(CircleX, RectX + RectWidth)); DeltaY = CircleY - Max(RectY, Min(CircleY, RectY + RectHeight)); return (DeltaX * DeltaX + DeltaY * DeltaY) < (CircleRadius * CircleRadius);

此处原文有js交互,可以拖拽查看效果,这里不显示了

以上就是全部内容。就像我告诉你的一样,不是很复杂,对吧?

posted @   jeoyao  阅读(374)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示