三角形面积的求解方法(由点或边求解)

我们设三角形的三个顶点为A(x0,y0,z0),B(x1,y1,z1),C(x2,y2,z2)。我们将三角形的两条边AB和AC看成是向量。然后,我们以A为原点,进行坐标平移,

得到向量B(x1-x0,y1-y0,z1-z0),向量C(x2-x0,y2-y0,z2-z0)。


①在三维的情况下,直接代入公式,可得向量B和向量C叉乘结果的模为:
|B×C| = ((y1-y0)*(z2-z0) + (z1-z0)*(x2-x0) + (x1-x0)*(y2-y0)) -
     ((y2-y0)*(z1-z0) + (z2-z0)*(x1-x0) + (x2-x0)*(y1-y0))
     |  1          1        1     |
    = |x1-x0 y1-y0 z1-z0|
     |x2-x0 y2-y0 z2-z0|
它的一半即为所要求的三角形面积S。
还有一种比较简单的写法。将向量AB和AC平移至原点后,设向量B为(x1,y1,z1),向量C为(x2,y2,z2),则他们的叉乘所得向量P为(x,y,z),其中:
    |y1 z1|     |z1 x1|     |x1 y1|
x = |     | y = |     | z = |     |
    |y2 z2|     |z2 x2|     |x2 y2|

然后用三维中的两点之间距离公式,求出(x,y,z)与(0,0,0)的距离,即为向量P的模,它的一半就是所要求的面积了。

以上公式都很好记:x分量由y,z分量组成,y分量由z,x分量组成,z分量由x,y分量组成,恰好是循环的。坐标平移一下就好了。


②在二维的情况下,我们可以取z = 0这个平面,即令z1 = z2 = 0,且
|P1×P2| = x1y2 - x2y1
       | x1 y1 | 
     = |            |
      | x2 y2  |
所以:
      
|B×C| = (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)
     |x1-x0 y1-y0|
    = |                    |
     |x2-x0 y2-y0|

它的一半即为所要求的三角形的面积S。


注意,用行列式求出来的面积是带符号的。如果A,B,C是按顺时针方向给出,则S为负;按逆时针方向给出,则S为正。


以二维的情况为例,三维亦同:
A(0,0) B(0,1) C(1,0) (A,B,C按顺时针方向给出)
S = ((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))/2;
  = ((0 - 0)*(0 - 0)-(1 - 0)*(1 - 0))/2
  = -0.5
A(1,0) B(0,1) C(0,0) (A,B,C按逆时针方向给出)
S = ((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))/2;
  = ((0 - 1)*(0 - 0)-(0 - 1)*(1 - 0))/2
  = 0.5
如果你不需要符号的话,再求一下绝对值就好了。这样也不用去管给出的点的顺序了。
以上是利用叉乘。其实还有一招,那就是海伦公式:
利用两点之间距离公式,求出三角形的三边长a,b,c后,令p = (a+b+c)/2。再套入以下公式就可以求出三角形的面积S :

S = sqrt(p*(p-a)*(p-b)*(p-c))


看起来好像比上面的都要简单…… -.-b 各位看客不要打我!
推荐:在二维的时候使用叉乘公式,三维的时候使用海伦公式~~~不过如果是需要符号的情况时,就只能使用行列式的计算公式了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值