圆与圆段碰撞

2023-11-23

我正在努力寻找一个可靠的解决方案来检测圆和圆段之间的碰撞。想象一下游戏敌人的视场锥体,其中圆圈代表感兴趣的物体。

底部的图表是我为了尝试解决一些可能的情况而绘制的,但我确信还有更多。

我了解如何快速排除极端情况,我丢弃任何不与整个圆碰撞的目标,并且主圆的中心在目标圆内的任何情况都自动为真(图中的E)。

我正在努力寻找一种好方法来检查其余的情况。我尝试比较圆心与线段外线端点之间的距离,并且尝试计算出目标圆中心与主圆中心的角度,并确定其是否在线段内,但这两种方法似乎都无法捕获所有情况。

具体来说,如果目标圆靠近中心但不接触它(下面的 E 和 B 之间的某个位置),或者如果线段比目标圆窄(因此中心位于线段内但两个边缘都在),则似乎会变得很奇怪都在它外面)。

有可靠的方法来做到这一点吗?

额外信息:该段由位置 P、方向 O(其大小为圆半径)和视图大小 S 来描述。

迄今为止,我最成功的尝试涉及确定向量 ca1 和 ca2 的角度,并检查它们中的任何一个是否位于向量 a1 和 a2 的角度之间。这适用于如上所述的某些情况,但不适用于目标圆大于线段的情况。

Edit 2在实施下面的最佳建议后,仍然存在误报,我不确定如何最好地消除该误报。请参阅下面的粉红色图。右下角的圆报告为与线段碰撞,因为它的边界与半空间和主圆重叠。

collision types current solution

false positive edge case


最终编辑

在发现另一个边缘情况(第四张图)后,我决定采用一种方法,该方法结合了下面的两个最佳答案,并且似乎涵盖了所有基础。为了方便后面的人,我将在这里描述它。

首先排除任何未通过快速环对环测试的东西。

然后测试圆与线段的两条外线之间的碰撞。如果触及其中任何一个,则返回 true。

最后,使用圆心和两条外线进行一些点到半空间测试(如下 Gareth 所描述)。如果它通过了它所在的两个,否则返回 false。


A. 检查是否与整个圆相交。
B. 检查它是否与任何一条直线相交。
C. 如果不是,请检查圆心之间的角度是否位于线段的角度范围内(点积对此很有用)。

交叉口需要A && (B || C)

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

圆与圆段碰撞 的相关文章

  • 如何将一组重叠范围划分为不重叠范围?

    假设您有一组范围 0 100 一 0 75 b 95 150 c 120 130 d 显然 这些范围在某些点上重叠 您将如何剖析这些范围以生成不重叠范围的列表 同时保留与其原始范围相关的信息 在本例中为范围后面的字母 例如 运行算法后的上述
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • 使用 C 创建立体声正弦波

    我正在尝试用 C 创建立体声正弦 WAV 并且可能有不同的 可能是空白的 左声道和右声道 使用此函数为每个通道生成一个音调 int16 t create tone float frequency float amplitude float
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 7 张牌扑克手牌评估器

    有谁知道评估 7 张牌扑克牌的快速算法吗 这比简单地暴力检查 7 张牌中每 21 个 5 张牌的组合更有效 Cheers Pete 我写了一篇JavaScript 核心评估方法仅使用位操作 因此速度非常快 考虑到这一点 查看 21 种组合还
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • 找到一条穿过任意节点序列的最短路径?

    In 这个先前的问题 https stackoverflow com questions 7314333 find shortest path from vertex u to v passing through a vertex wOP询
  • 在 Javascript 中检测 Flash 文件何时完成播放

    我正在使用 Javascript 将 Flash 文件嵌入到网站中 然后需要在播放完成后将其删除 有没有办法用普通的 Javascript 来做到这一点 或者是否需要将回调类型的函数添加到 Flash 文件本身 我该如何编码 JavaScr
  • 归并排序中递归树的高度log(n)+1是怎么来的

    我按照 stackoveflow 的建议阅读了一些问题和答案 我正在遵循 cormen 的 算法简介 一书进行自学 那本书里已经解释得很清楚了 但唯一没有解释的是如何在合并排序分析中计算树的高度 如果在后面的章节中对此进行解释的话 我仍然在
  • Florian 的 Grisu2 算法如何工作?

    我遇到了一个关于将 double 转换为 ascii 的问题 经过搜索 我得到了 Florian 的论文 使用整数快速准确地打印浮点数 http www cs tufts edu nr cs257 archive florian loits
  • 在java中使用BUBBLE SORT对二维字符串数组进行排序

    类似的问题已经被问过 但从来没有关于二维字符串数组 因此在尝试了很长时间之后我找不到我想要的 我正在尝试使用 BubbleSort 对 java 中的 2D 字符串数组进行排序 作为输入 我收到一个二维字符串数组 一个表 以及您应该排序的
  • 照片马赛克算法。如何在给定基本图像和瓷砖列表的情况下创建马赛克照片?

    Hy 我要做的是创建一个程序 使用 C 或 C 它将 24 位 像素位图和图像集合作为输入 我必须创建一个马赛克图像 类似于使用库的输入图像给定的图像 创建与输入类似的马赛克照片 到目前为止 我可以访问输入的图像像素及其颜色 但我有点卡住了
  • 有没有时间复杂度为O(N)的排序算法?

    大多数排序算法的复杂度为 O NN 或 O NlogN 来实现结果 但是 对于特定的输入集 有些算法的复杂度为 O N 我想知道是否有一种排序算法在所有情况下都具有 O N 的复杂度 如果您只能比较 检查两个项目是否为 正在排序的值 那么您
  • 数学/算法使图像适合屏幕保留纵横比

    我需要数学 算法方面的帮助来拍摄已知尺寸的图像并适合两个屏幕尺寸之一 720 x 480 或 1280 x 1024 图像尺寸来自 XML 文件 但这些尺寸是 Web 尺寸 我还从 XML 中选择了一些图像 这些图像的分辨率可能比 Web
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex

随机推荐

  • 带边框/轮廓的六边形形状

    我知道可以使用以下代码创建六边形形状 hex before content width 0 height 0 border bottom 30px solid 6C6 border left 52px solid transparent b
  • 在同一个 apache 服务器上运行 django 和 Flask

    我正在尝试在同一个 apache 服务器上运行 django 和 Flask WSGISocketPrefix var www wsgi
  • 字符串变量可以设置多少个字符?

    我有一个字符串类型的变量 例如string test 我可以设置多少个字符进行测试 谢谢 所有引用类型 如字符串 实例的最大大小是有限的 由 CLR 改为 2GB 由于 NET 中的一个字符占用 2 个字节 这意味着一个字符串最多可以容纳大
  • StreamProvider 不更新状态

    我正在尝试使用StreamProvider from this很棒的包 但我一直在努力让特定的流正常工作 我创建一个StreamController我用它来添加数据Stream通过其Sink 所有这一切似乎都运作良好 但是当使用这个Stre
  • 允许 PHP 会话延续到子域

    我对所有用户数据以及当用户访问其个人资料时使用 PHP 会话 不是 cookie 除了会话 id cookie user mydomain example他们会立即 注销 直到删除子域 有没有办法接受来自所有域的会话 只要它 mydomai
  • Internet Explorer 中的 标记

    既没有标签也不text decoration blink Internet Explorer 支持 css 中的样式 有什么技术可以在 IE 中制作闪烁文本吗 如果可能的话 避免眨眼 这会惹恼别人 但你可以用 JS jQuery 来做到这一
  • ASP.NET Identity 2 支持匿名用户吗?

    我想允许匿名 尚未注册和注册的用户在我的网站上发帖 Posts table Id int Subject nvarchar Body nvarchar UserId uniqueidentifier 该项目使用最新的 MS 技术 ASP N
  • 将 GVim 配色方案更改为类似于命令行 Vim

    是否可以使 GVim 的配色方案与命令行版本 Vim 中的配色方案完全匹配 与白色背景的 GVim 相比 我更喜欢 Vim 的颜色 但我仍然想使用 GVim 因为 Shift 键在命令行版本上映射得不太好 是的 可以使 gvim 与终端 V
  • 感人片段

    任何人都可以建议我为此的算法 您将获得 x 轴上 N 个线段的起点和终点 这些片段中有多少可以被恰好两条垂直于它们的线接触到 即使是在它们的边缘 输入示例 3 5 2 3 1 3 1 5 3 4 4 5 5 1 2 1 3 2 3 1 4
  • 我可以指定 WPF DataGrid 中哪些列是可编辑的吗?

    我有一个带有自动生成列的 WPF 4 0 DataGrid 我只想允许用户编辑第一列 有一个简单的方法可以做到这一点吗 我试图添加 DataGridCell 样式并根据 ColumnName 第一列始终具有相同的名称 或 ColumnInd
  • 强制 IE7 进入标准渲染模式(不是怪癖)

    由于 IE7 在怪异模式下渲染 我在 IE7 中遇到显示问题 我通过显示 document compatMode 并返回 BackCompat 而不是 CSS1Compat 来确认这一点 使用 IE8 并恢复到 IE7 是可行的 因为这样可
  • 如何在 Springfox 中更改 Swagger UI index.html 徽标和标题内容?

    我正在记录使用 Spring Boot 2 4 3 创建的 APIspringfox swagger3 0 0 所以我现在有以下页面 我的客户想要将 Swagger UI 徽标更改为他们自己的 我做不到 我搜索并找到了一些解决方案 但它不起
  • 仅当应用程序未运行时显示推送通知 android

    在我的应用程序中 我集成了推送通知GCM 每当通知出现时它就工作正常 但即使用户位于应用程序内部 也会出现推送通知 我希望仅当用户位于应用程序外部时才显示通知 这是我的推送通知代码 Gcm广播接收器 public class GcmBroa
  • 初学者选择 DirectX 9 还是 DirectX 10?

    我想做一些项目 让我的简历对游戏公司更有吸引力 所以我要开始买书了 但我不知道应该从阅读 DirectX 9 或 10 api 书籍开始 DirectX10 很棒 但业界似乎正在 缓慢向 10 迈进 那么我应该使用 9 还是使用 10 我建
  • 为应用程序选择多个 Internet 连接之一

    我有一台具有几种不同互联网连接的计算机 LAN WLAN WiFi 或 3G 所有这些都是活动的 机器可以使用其中任何一个 现在我想告诉我的应用程序使用可用的连接之一 例如 我想告诉我的应用程序仅使用 WiFi 而其他软件可能使用其他功能
  • Android - 自定义语音操作的意图

    当我使用谷歌语音搜索时 我可以说 发送文本 谷歌将启动我的短信程序 我可以说 听 谷歌将启动我的默认音乐应用程序 我的应用程序是否可以注册它自己的 特殊短语 例如 MyApp DoSomething 然后让 Google 启动 MyApp
  • 更优雅的多行 JavaScript 字符串方法

    我知道如何在不使用 的情况下打印大字符串的唯一方法是使用 反斜杠 丑陋的 div div 有没有办法在 longString 不受污染的情况下做到这一点 php 有 foo 长多行字符串
  • Android Actionbar 设置选项卡宽度

    目前我正忙于为我的公司开发 WHMCS 应用程序 作为导航 我想使用操作栏中的选项卡功能 但是 如何编辑选项卡的宽度 我需要在一个屏幕上同时显示 5 个内容 而无需滚动 我已经尝试过一些这样的样式
  • 如何在样式表中的 URL 中换行

    我有一个包含很长行 数据网址 的样式表 无论如何 我可以将这些行分成更小的行吗 长线示例 background image url data image png base64 really long string 您可以通过将 URI 用引
  • 圆与圆段碰撞

    我正在努力寻找一个可靠的解决方案来检测圆和圆段之间的碰撞 想象一下游戏敌人的视场锥体 其中圆圈代表感兴趣的物体 底部的图表是我为了尝试解决一些可能的情况而绘制的 但我确信还有更多 我了解如何快速排除极端情况 我丢弃任何不与整个圆碰撞的目标