三角形面积的求解方法(由点或边求解)
来源:互联网 发布:object oriented Java 编辑:程序博客网 时间:2024/06/07 15:32
我们设三角形的三个顶点为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| = ((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分量组成,恰好是循环的。坐标平移一下就好了。
|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))
推荐:在二维的时候使用叉乘公式,三维的时候使用海伦公式~~~不过如果是需要符号的情况时,就只能使用行列式的计算公式了。
0 0
- 三角形面积的求解方法(由点或边求解)
- 三角形的面积c++求解?
- 求解三角形(一)
- 求解三角形(二)
- 简单多边形的面积求解
- 马鞍点的求解
- 求解圆形的面积和周长
- 求解矩形的面积和周长
- 简单多面体(三角形网格表示)的惯性张量求解
- 利用PostGIS实现求解点集的最小面积包围矩形
- 线性代数的求解方法
- 素数的求解方法:
- 犀利的异或求解
- 八皇后求解方法(递归求解)
- 求解多边形面积
- 求解形状面积
- 由在三点坐标求三角形面积
- hdu 4609 (FFT求解三角形)
- Android类似于QQ账号登陆下拉框效果的实现(附源码)
- hdu 2524矩形A + B
- Snail—UI学习之文本编辑视图UITextView
- springMVC工作原理
- 鼠标放到滚动的文字上面,滚动停止。鼠标移除,继续滚动
- 三角形面积的求解方法(由点或边求解)
- ATB战斗模式
- VC资源分配、释放表
- 用python编写mapreduce版的wordcount程序
- Microservices - James Lewis, Martin Fowler
- C# string与StringBuilder的不同
- Sereja and Array-数组操作或者线段树或树状数组
- iOS中使用的tableview为group形式时如何设置不同sections的间距
- 指针能否比较大小