碰撞检测:圆形物体

2023-12-13

我正在开发一个 Java 游戏(但开发语言并不重要),其中包括球或冰球等圆形物体,现在正在处理碰撞。 我使用计时器,因此在每一帧中我都会检查是否发生碰撞。

这是一个代表对象右上角部分的图表。

enter image description here

对象的中心由点[0,0]表示,半径为10px,单位为像素。

现在如果我的对象(例如,obj_1) 是方形/菱形(蓝线),查找是否有另一个 (obj_2)碰撞它我只需要获取它们的坐标并通过检查Math.abs(obj_1.x - obj_2.x) + Math.abs(obj_1.y - obj_2.y) <= radius如果发生碰撞我就会知道。

但圆形(红线)的问题更加棘手,因为它占用更多空间,并且所占用的空间不受直线限制。当然,我必须对一些值进行舍入(例如在上图中,如果我想检查以下位置的碰撞)x = 2我必须将 y 值四舍五入(看起来像 9.5 到 10)。但我根本不知道如何得到这个公式。任何帮助将不胜感激。


正如您提到的,实现语言并不重要,我将为您提供一个用于检测圆形物体碰撞的通用解决方案。

另外,据我所知,场景中的所有物体都是圆形的。下面的解决方案不适用于检测圆形和其他形状之间的碰撞。

假设你有两个圆圈c1 and c2。假设对应的半径为c1.r and c2.r,并且中心是(c1.x,c1.y) and (c2.x,c2.y),那么下面的函数将判断 c1 和 c2 是否发生碰撞

boolean areColliding(Circle c1, Circle c2){

   center_distance = sqrt((x1-x2)^2 +(y1-y2)^2);  //this is the distance between the centers of the two circles.

  if((c1.r+c2.r) < center_distance)
           return false;
  else
          return true;

}

该伪代码函数将返回true如果圆圈发生碰撞,则为 false,否则为 false。

基本上,该函数的作用是检查圆心之间的距离是否大于它们各自半径的总和。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

碰撞检测:圆形物体 的相关文章

随机推荐

  • 在 PHP 中使用 exec 命令时可能出现权限问题

    我们有一个小型办公室内联网 用 PHP 构建 在 apache 服务器上 即 WAMP 它允许我们在文件服务器上创建项目文件夹 这是通过使用 shell exec xcopy 命令和以下开关将一组模板文件夹复制到新位置来实现的 e k i
  • 通过 yum 安装 Fiware-Cygnus 时出错

    我正在尝试通过 yum 安装 Fireware Cygnus yum install cygnus ngsi 但中间我遇到了一些错误 Transaction Check Error file usr cygnus init d cygnus
  • 管理 Google Cloud Datastore 中实体内实体的嵌套列表

    我是数据存储新手 我正在尝试创建一个简单的应用程序来跟踪图书借阅 我希望数据库架构如下 books book id name borrowing timestamp user id firstname email users name bo
  • 网格数据绑定问题

    我们的应用程序会生成特定结构的大量结果列表 问题是 如果我想在 DataGrid 中显示它 我必须创建一个 DataTable 并将其设置为将使用内存的网格的数据源 所以我创建了一个绑定列表我创建的一个类 称为myRow 并且在 myRow
  • Java Swing - 如何在 Mac 上双击项目文件以打开我的应用程序并加载文件?

    我创建了一个 Mac Java Swing 应用程序 并在 Info plist 文件中为其设置了文件扩展名 pkkt 因此当双击该文件时 它会打开我的应用程序 当我这样做时 程序运行良好 现在我需要在程序中加载 pkkt 项目 但文件路径
  • CSS 规范中的哪里规定了如何处理具有相同名称的多个属性?

    调试中另一个问题 我想确认我已经正确理解浏览器应该如何处理像这样的声明 background image url image0 jpg background image image set url image1 jpg 1x url ima
  • 使用 ggplot2 将注释放置在绘图中心

    我想在几个 ggplot 对象的中心放置一个注释 我研究并发现了一些类似的问题 例如这里 ggplot2中geom text的相对定位 到目前为止 我找到的唯一答案是操纵绝对范围 例如 y ymax 2 我想在打印到 pdf 之前在循环中添
  • Log4j,将 Web 应用程序配置为使用相对路径

    我有一个 java web 应用程序 必须部署在 Win 或 Linux 计算机上 我现在想添加 log4j 进行日志记录 并且想使用日志文件的相对路径 因为我不想在每次部署时更改文件路径 该容器很可能是 Tomcat 但也不一定 这样做的
  • 指针和字符串文字

    我多次看到以下言论 char ch Hello cout lt
  • 使用哪个 Android 控件?

    我正在迈出 Android 编程的第一步 我的应用程序是在数据库中创建条目 对于此任务 我创建了一个新的活动 一切都很好 但我不太喜欢它的样子 Currently the emulator shows this 我想要一些类似于 新联系人
  • 是扩展“语法”还是扩展“运算符”?

    我听说 两者都称为 传播 syntax 和 传播operator 后者更受欢迎 相关网址MDN 文档表明它最初被称为传播operator但后来改为扩展语法 并且MDN 的运营商列表没有提到它 谷歌似乎建议了这个词operator更受欢迎和接
  • 如何在 Jlist 中添加两列?

    我找到了双JList示例代码 但我需要在一个Jlist 如何在一个表格中添加两列Jlist 我尝试使用ListCellRenderer 但我未能向模型添加元素 Here s代码显示在带有图像的网页中 你的意思是这样的吗 我首先要通读一下如何
  • Elastic Search 忽略映射并且长字段显示为字符串

    我正在向 elasticsearch 添加一个架构 并在该架构中尝试添加一些先前已作为字符串处理的长字段 我创建了一个新索引并重新处理了数据 但在新索引中这些字段仍然显示为字符串 来自索引端点的映射的相关部分 image features
  • 如何从后台弹出片段

    我有一个活动 A 它调用片段 Bf 它又调用片段 Cf 我希望在调用 Cf 时将 Bf 放置在后台堆栈中 以便用户可以导航回它 但是 如果在 Cf 中按下特定按钮 我希望 Bf 从返回堆栈中删除 这可能吗 我看到有一个 popBackSta
  • WCF:数据契约正在转换为消息契约

    我的 WCF 服务导出单个操作 标记有捕获所有操作和回复操作 以便它代表服务的公共入口点 ServiceContract public interface IService OperationContract Action ReplyAct
  • 扩展克隆表行功能 - 更改行 ID

    我有这个小提琴 http jsfiddle net radi8 EwQUW 33 请注意 初始表的定义是 table class reference width 100 border 1 align left thead tr th wid
  • 用户编写的函数内的 purrr + dplyr NSE 问题

    经过大量的试验和错误并咨询以前的答案 例如如何检测是否是裸变量或字符串我想我已经自己完成了大部分需要做的事情 但我渴望了解在将我的 解决方案 投入生产之前我是否做出了一些错误的假设或愚蠢地处理问题 考虑以下数据 library dplyr
  • lapply / R 中的承诺

    我不确定 R 中的承诺在做什么 如果一个人跑 a lapply seq len 2 function n function n b lapply seq len 2 function n n 我们可以看到 a 1 2 b 1 1 据我所知
  • 如何安全输出包含 HTML 标签的内容?

    我有一个博客系统 用户必须将内容输入到html文本区域 包括html标签 例如 p 这存储在数据库中 如果此输入随后使用 php 回显到网页 我如何转义输出以防止 XSS 但保留 html 标记的含义 以便博客文章的格式正确 如果我使用ht
  • 碰撞检测:圆形物体

    我正在开发一个 Java 游戏 但开发语言并不重要 其中包括球或冰球等圆形物体 现在正在处理碰撞 我使用计时器 因此在每一帧中我都会检查是否发生碰撞 这是一个代表对象右上角部分的图表 对象的中心由点 0 0 表示 半径为10px 单位为像素