决定性方法与三角形的交叉积区域

时间:2015-08-21 17:47:10

标签: algorithm

我想知道哪种方法(决定方法或交叉产品)更有效地计算三角形的面积? 对于决定因素,我认为在area = 1/2 * det()对于这个方法,我使用这个http://mathworld.wolfram.com/TriangleArea.html。 我认为在cross = det()但是有交叉产品的交叉产品。当他们没有0(0,0)的原点时,我必须翻译系统,这意味着从每个点减去原点的协调点。 这就是我所做的。

1 个答案:

答案 0 :(得分:2)

我认为通过“决定性方法”(在Google中找不到),您的意思是:

给出3分ABC(假设它们是position vectors)让a = B-Cb = A-C。然后因为determinant的特殊属性:

  

实矢量行列式的绝对值等于这些矢量所跨越的平行六面体的体积

我们有|det(M)| = 2 SABC其中SABC是三角形ABC的区域,M是一个特殊的矩阵,“定义”“平行六面体”:

enter image description here

因此,三角形的面积可以计算为SABC = 1/2 |axby - aybx|,其中ax = Bx - Cx和其他人以类似方式定义。

这个公式非常简单有效。唯一的问题是它只适用于平面点(2D情况)。如果你的点位于n维空间的某个地方,你需要先在它们之间绘制一个平面。

在3D情况下,您可以使用跨产品公式。它可以看作是上述方法的延伸,我稍后会详细说明。

跨产品方法的工作原理如下:像以前一样选择ab并注意其交叉产品的长度等于相应的平行四边形的区域:

enter image description here

v = a × b。然后是SABC = 1/2 sqrt(vx2 + vy2 + vz2)。请注意,您不需要显式计算v:它的每个组件都可以表示为具有简单封闭形式的2D行列式。

如果你有2D矢量,你可以通过添加常量第三个分量(例如0)轻松地将它们嵌入到3D空间中。事实证明,在这种情况下,vxvy将为我们留下S ABC = 1/2 | v z |这将与行列式方法的答案一致。

所以,总之

  • 如果你的点在2D空间中,则使用行列式方法。
  • 如果您在3D空间中的点数,则使用跨产品方法(您可以使用它) 在2D情况下,但是一些子表达式总是评估为0)。
  • 在n维空间的情况下,两种方法都不起作用。