求 3d 中 2 个任意立方体的交集

2024-04-09

所以,我想找出一个函数,可以让您确定两个任意旋转和大小的立方体是否相交。

如果立方体的旋转不是任意的(而是锁定到特定的轴),则相交很简单;您可以通过检查它们的边界来检查它们是否在所有三个维度上相交,以查看它们在所有三个维度上是否相交或在彼此之内。如果它们交叉或仅在两个之内,则它们不相交。此方法可用于确定任意立方体是否甚至是交集的候选者,使用它们的最高/最低 x、y 和 z 创建外部边界。

这是第一步。理论上,从这些信息中我们可以分辨出它们各自位于哪一侧,这意味着我们可以从交叉点中消除一些四边形(边)。但是,我不能假设我们拥有该信息,因为立方体的旋转可能会使简单地确定变得困难。

我的想法是获取每对四边形,找到它们平面的交点,然后确定该线是否与每对边的至少一条边相交。如果任意一对边有一条交线与其任意边相交,则四边形相交。如果不相交,则两个立方体不相交。

然后,我们可以通过平面相交线与其边缘相交的位置来确定第二个立方体上相交的深度。

然而,这只是推测。有没有更好、更有效的方法来确定这两个立方体的交集?我可以想到许多不同的方法来做到这一点,而且我还可以看出它们在所需的计算量方面可能非常不同。

我目前正在使用 Java 工作,但 C/C++ 解决方案也很酷(我可以移植它们);甚至是伪代码,因为这可能是一个大问题。


要在三个维度中找到两个任意立方体的交点(接触)点,您必须分两个阶段进行:

  1. 检测碰撞。这本身通常是两个阶段,但为了简单起见,我们将其称为“碰撞检测”。

该算法可以是 SAT(分离轴定理),也可以是多胞体展开/缩减的某种变体。再次,为了简单起见,我们假设您将使用 SAT。

我不会详细解释,因为其他人已经做过很多次了,而且比我做得更好。由此得出的“结论”是,碰撞检测并不是为了告诉您where发生碰撞;只是它已经发生了。

  1. 检测到交叉点后,您需要计算接触点。这是通过多边形裁剪算法完成的。在这种情况下,我们使用https://en.wikipedia.org/wiki/Sutherland%E2%80%93 霍奇曼算法 https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm

有更简单、更好的方法可以做到这一点,但 SAT 在 3d 中很容易掌握,SH 剪辑也很容易让您了解,因此对您来说这是一个很好的起点。

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

求 3d 中 2 个任意立方体的交集 的相关文章

  • Java中字符串中特殊字符的替换

    Java中如何替换字符串 E g String a adf sdf 如何替换和避免特殊字符 您可以删除除此之外的所有字符可打印的 ASCII 范围 http en wikipedia org wiki ASCII ASCII printab
  • 如何使用 Java 中的 Web 服务(例如 Axis2)发送复杂对象的数组或集合?

    我对 SOAP Web 服务还比较陌生 虽然我完成了一些较小的 Web 服务项目 但我偶然从来不需要返回 或用作参数 复杂 对象的数组或集合 当我尝试这样做时 根据我的 SOAP 绑定风格 我会得到不同的奇怪行为 当我使用RPC 文字 我可
  • 在文本文件中写入多行(java)

    下面的代码是运行命令cmd并使用命令行的输出生成一个文本文件 下面的代码在 Eclipse 的输出窗口中显示了正确的信息 但在文本文件中只打印了最后一行 谁能帮我这个 import java io public class TextFile
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • SAML 服务提供商 Spring Security

    当使用预先配置的服务提供者元数据时 在 Spring Security 中 是否应该有 2 个用于扩展元数据委托的 bean 定义 一份用于 IDP 元数据 一份用于 SP 元数据
  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • Hibernate.createBlob() 方法从 Hibernate 4.0.1 开始已弃用,并移至 Hibernate.getLobCreator(Session session).createBlob()

    Method Hibernate createBlob 已弃用自休眠4 0 1并搬到Hibernate getLobCreator Session session createBlob 任何解决方案我应该在方法内传递什么getLobCrea
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • IntelliJ - 调试模式 - 在程序内存中搜索文本

    我正在与无证的第三方库合作 我知道有一定的String存储在库深处的某个字段中的某处 我可以预测的动态值 但我想从库的 API 中获取它 有没有一种方法可以通过以下方式进行搜索 类似于全文搜索 full程序内存处于调试模式并在某个断点处停止
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • 将 Azure AD 高级自定义角色与 Spring Security 结合使用以进行基于角色的访问

    我创建了一个演示 Spring Boot 应用程序 我想在其中使用 AD 身份验证和授权 并使用 AD 和 Spring Security 查看 Azure 文档 我执行了以下操作 package com myapp contactdb c
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话

随机推荐

  • 不同数据库的表之间的关系

    是否可以在 SQL Server 2008 中定义不同数据库中的表之间的关系 您能推荐一个在线教程来学习它吗 我更喜欢ASP NET C 不 数据库之间不能有外键 数据完整性仅存在于单个数据库内 如果您需要跨数据库的事务一致性 那么您应该使
  • 如何在javascript中将字符串值转换为变量?

    var test1 document ready function test1 test1ID jQueryPlugin var test2 document ready function test2 test2ID jQueryPlugi
  • CORS 和 example.com

    我在 CORS 方面遇到了麻烦 我使用的 API 有 Access Control Allow Origin http www example com 因此 我无法访问继续访问我的网站所需的信息 但是 奇怪的是 如果我将 API url 放
  • 为什么使用 Nuxt v3 静态生成时 会输出两次后面的内容?

    我在用vue fontawesome https github com FortAwesome vue fontawesome与 Nuxt 3 一起使用 如上所述here https fontawesome com docs web use
  • Reactjs - 从应用程序中的任何位置获取组件

    我想知道是否有一种方法可以通过使用某种类型的 id 或类型来获取组件 就像在 DOM 操作中所做的那样 就像是 var Avatar React createClass render function React renderCompone
  • Rythm 模板引擎和 GAE

    有人设法让 Rythm 模板引擎与 Google Appengine 一起使用吗 Thanks 现在的节奏 版本1 0 0 20120505 http rythmengine com public rythm 1 0 0 20120505
  • 如何查询SOLR中的空字段?

    我有一个很大的 solr 索引 我注意到一些字段没有正确更新 索引是动态的 这导致某些字段具有空的 id 字段 我已经尝试过这些查询 但它们不起作用 id id NULL id null id id id TO 有没有办法查询空字段 Tha
  • 按字母顺序获取地图中的键的简单方法

    在 Go 中 让映射中的键按字母顺序排序的最简单方法是什么 这是我能做到的最短方法 package main import container vector import fmt import sort func main m map st
  • 可以放在桌子的底部吗?

    我想用一个 tfoot 表中的标签在语义上是正确的 但它一直显示在我的表的顶部 有没有办法让它显示在底部 正如其他人所说 tfoot是在之前定义的tbody但之后渲染 这是设计使然 不会改变语义 桌子有头 脚和身体 这些的顺序并不重要 Th
  • simple_form 提交的默认disable_with

    我想更改 simple form 中提交按钮的默认行为 这样我就不需要为所有表单显式指定 disable with gt true 如何在 simple form rb 中进行此特定更改 这在较新版本的 Rails 中略有不同 因为不推荐设
  • 纯js按属性名称开头选择元素

    语境 HTML div div div div p p 我想选择属性名称以以下开头的所有元素ng 使用 jQuery 以下链接是最接近此问题的线程 jQuery 如何按属性名称开头选择值 https stackoverflow com qu
  • java.net.UnknownHostException:www.google.com

    我正在开发一个健全性检查网络应用程序 我尝试使用 HttpUrlConnection 方法获取 url 响应 但收到 UnknownHostException System setProperty java net preferIPv4St
  • 使用 Kerberos、Web API 和 MVC 的示例项目

    是否有完整的 Visual Studio 解决方案 其中包含具有使用 Kerberos 进行身份验证的 MVC 应用程序的项目 这反过来又调用 ASP Net Web API 服务项目 在同一解决方案中 在服务调用期间将凭据委托给服务 Ge
  • UILabel - 已弃用方法“adjustsLetterSpacingToFitWidth”的替代方法

    因此 在我的代码中 我正在检查我的字符是否适合我的标签 并有以下行 return self adjustsLetterSpacingToFitWidth 这被放置在一个实现中UILabel 有人能告诉我确切的替代方案是什么吗 文档说 使用N
  • 具有 Linq-to-SQL 的 ADO.NET 数据服务

    在将 linq to sql 与 ado net 数据服务结合使用时 我遇到了一个奇怪的错误 我有一个连接到远程数据库的简单 silverlight 应用程序 我首先添加了 linq to sql 类并将一个表拖到设计器上 然后我添加了 A
  • 从 Pyspark 中包含时间戳的字符串列中提取日期

    我有一个数据框 其日期格式如下 date May 6 2016 5 59 34 AM 我打算以以下格式从中提取日期YYYY MM DD 所以结果应该是上述日期 2016 05 06 但是当我提取时使用以下内容 df withColumn p
  • Spark 无法再执行作业。执行器创建目录失败

    我们已经有一个小型 Spark 集群运行了一个月 它已经成功执行了作业 或者让我为该集群启动一个 Spark shell 无论我向集群提交作业还是使用 shell 连接到集群 错误总是相同的 root SPARK HOME bin spar
  • Javascript 按布尔属性对对象数组进行排序

    有关实际问题 请参阅最后的编辑 a false true true true true true true true true true true true true true true true true true true true t
  • 如何仅显示可组合项几秒钟?

    我有一个Text可组合在一个Box Box modifier Modifier Text text BlaBla 如何仅显示框 文本几秒钟 您可以使用LaunchedEffect并使用布尔标志延迟并在指定时间后将其设置为 false Com
  • 求 3d 中 2 个任意立方体的交集

    所以 我想找出一个函数 可以让您确定两个任意旋转和大小的立方体是否相交 如果立方体的旋转不是任意的 而是锁定到特定的轴 则相交很简单 您可以通过检查它们的边界来检查它们是否在所有三个维度上相交 以查看它们在所有三个维度上是否相交或在彼此之内