Math 如何在二维中找到两个三角形的交点/重叠点的中心点?

Math 如何在二维中找到两个三角形的交点/重叠点的中心点?,math,collision-detection,computational-geometry,Math,Collision Detection,Computational Geometry,在上下文中,我试图在3D物理引擎中解析碰撞细节。以下是在两个凸面形状的分离平面上的二维投影内发生的 我有两个三角形,我们称它们为A和B。它们存储为一组3个点(例如A1、A2、A3)。我已经知道这两个三角形重叠了。如何确定大致位于重叠中心的点“P” 我所能想到的最好的方法就是找到6条线的交点,然后根据存在的交点,包括任意数量的三角形点。选择的点,连同交点,可以形成一个多边形,我可以找到它的中心。 然而,我知道这将是一个相当大的计算量,鉴于这将在实时环境中使用,我想找到一个更好的方法 下面是我指的一

在上下文中,我试图在3D物理引擎中解析碰撞细节。以下是在两个凸面形状的分离平面上的二维投影内发生的

我有两个三角形,我们称它们为A和B。它们存储为一组3个点(例如A1、A2、A3)。我已经知道这两个三角形重叠了。如何确定大致位于重叠中心的点“P”

我所能想到的最好的方法就是找到6条线的交点,然后根据存在的交点,包括任意数量的三角形点。选择的点,连同交点,可以形成一个多边形,我可以找到它的中心。 然而,我知道这将是一个相当大的计算量,鉴于这将在实时环境中使用,我想找到一个更好的方法

下面是我指的一个例子:

除了著名的求两个凸多边形相交的算法(一般术语不是三角形)如(带and),您还可以使用(三角形相交算法)的算法来求两个三角形之间的相交区域


现在,由于两个凸面对象的交点是凸面的,因此您可以使用从上述算法之一获得的交点区域顶点来轻松计算交点的质心。

图桑算法没有看起来那么简单,而且对于两个三角形来说是完全多余的。我会使用萨瑟兰-霍奇曼裁剪算法。它将在其中一个三角形上经过三次,并从三到六个顶点输出,形成一个凸多边形

顶点的平均值将位于该多边形内。您甚至可以通过鞋带公式的扩展来计算区域的质心


为了简化某些计算,可以从应用基础更改开始,这样其中一个三角形将减少到顶点(0,0),(0,1),(1,0),这样半平面的方程就是x≥0,y≥0,1-x-y≥0这将使测试和交叉更容易。

如果您知道它们重叠,您知道交叉点吗?您需要创建重叠区域的多边形,然后找到它的质心。@johnalexiu不,我没有。它们是EPA通道的最后一步生成的,这意味着沿碰撞法线投影时,minkowski空间的原点位于组合三角形内;由于外壳是凸的,这意味着当这些三角形投影到法平面上时,它们也必须重叠。根据分离轴原理,如果你将一个三角形的每个顶点的坐标插入另一个三角形的边的方程中,反过来,你可以证明没有交点。由此我推测,你不可能用少于六个比较来解决你的问题,涉及一些2x2行列式。你怎么知道三角形重叠?也许在你得出这个结论的过程中有一些有用的数据/属性可以被重用以获得更快的解决方案。你似乎喜欢过度使用的解决方案。对于三角形,图桑算法将比“暴力”更昂贵,而且实现起来更复杂。三角纸增加了一层复杂性,因为它解决了3D问题。我看不出有什么理由更喜欢周长质心而不是顶点质心,因为它更容易计算。亲爱的@YvesDaoust,你说得对。但是,不需要从头开始实现Toussant。有很多很好的库和实现(我已经提到其中一个作为示例)。顺便说一句,这是一个正确的解决方案,但在你看来是一个困难的解决方案。此外,我认为这是一个基于意见的讨论,因为我更喜欢Toussiant,因为它具有普遍性,我在合理的时间内实现了它。OP要求一个高效、实时的解决方案。不是大锤。