javascript - 如何确定正常矩形和旋转矩形之间是否存在碰撞?
问题描述
确定两个 AABB(轴对齐边界框)矩形之间是否发生碰撞很简单:
doRectanglesCollide(r1X, r1Y, r1W, r1H, r2X, r2Y, r2W, r2H) {
return r1X < r2X + r2W && r1X + r1W > r2X && r1Y < r2Y + r2H && r1Y + r1H > r2Y;
}
确定两个旋转矩形之间是否发生碰撞的效率要低得多。
但是,有一个窍门。可以将两个矩形旋转相同的量,使得其中一个变为 AABB 矩形。
那时,只需要一个函数来确定 AABB 矩形和旋转矩形是否相交。我认为它比使用分离轴定理来确定两个旋转的矩形是否相交要有效得多,因为后者是确定两个任意多边形是否相交的通用公式。
所以,换个说法,这是我的问题:我有两个旋转的矩形。除了使用链接的答案之外,没有更有效的算法可以利用这样一个事实,即可以通过将其中一个矩形旋转两个来将它们制成 AABB 矩形这一事实-radians
?因为到那时,问题就变成了 AABB 矩形和旋转矩形是否相交的问题。
解决方案
推荐阅读
- php - 提交表格以填写最近的 ID 行 [MySQL]
- powershell - powershell脚本根据文件名的开头删除文件
- reactive-programming - 在 Spring Boot 中对加盖的 mongodb 集合进行排序
- go - Bazel **BUILD**文件中的`importmap`和`importpath`有什么区别
- css - 在html中模拟latex \underbracket(即在句子的特定部分下方写文字)
- jquery - Bootsrap jquery Dropdown - 如何在内容区域中显示数据值
- apache-kafka - 带有 min.insync.replicas 的 NotEnoughReplicasException 的意外行为
- http - 谁负责 OSI 中的表示层和会话层?
- webpack - 如何在 Nextjs 中使用 Workbox 实现自定义 Service Worker
- symfony - Sylius:如何使用自定义控制器创建我自己的自定义资源而不会出现“无法自动装配”异常?