0we海伦
原理简介
原理简介
我国宋代的数学家秦九韶也提出了“三斜求积术”,它与海伦公式基本一样。
假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:
S=?[p(p-a)(p-b)(p-c)]
而公式里的p为半周长:
p=(a+b+c)/2
——————————————————————————————————————————————
注1:"Metrica"(《度量论》)手抄本中用s作为半周长,所以
S=?[p(p-a)(p-b)(p-c)] 和S=?[s(s-a)(s-b)(s-c)]两种写法都是可以的,但多用p作为半周长。
——————————————————————————————————————————————
由于任何n边的多边形都可以分割成n-2个三角形,所以海伦公式可以用作求多边形面积的公式。比如说测量土地的面积的时候,不用测三角形的高,只需测两点间的距离,就可以方便地导出
。 编辑本段证明过程
证明(1)
与海伦在他的著作"Metrica"(《度量论》)中的原始证明不同,在此我们用三角公式和公式变形来证明。设三角形的三边a、b、c的对角分别为A、B、C,则余弦定理为
cosC = (a^2+b^2-c^2)/2ab
S=1/2*ab*sinC
=1/2*ab*?(1-cos^2 C)
=1/2*ab*?[1-(a^2+b^2-c^2)^2/4a^2*b^2]
=1/4*?[4a^2*b^2-(a^2+b^2-c^2)^2]
=1/4*?[(2ab+a^2+b^2-c^2)(2ab-a^2-b^2+c^2)]
=1/4*?[(a+b)^2-c^2][c^2-(a-b)^2]
=1/4*?[(a+b+c)(a+b-c)(a-b+c)(-a+b+c)]
设p=(a+b+c)/2
则p=(a+b+c)/2, p-a=(-a+b+c)/2, p-b=(a-b+c)/2,p-c=(a+b-c)/2,
上式=?[(a+b+c)(a+b-c)(a-b+c)(-a+b+c)/16]
=?[p(p-a)(p-b)(p-c)]
所以,三角形ABC面积S=?[p(p-a)(p-b)(p-c)] 证明(2)
我国宋代的数学家秦九韶也提出了“三斜求积术”。它与海伦公式基本一样,其实在《九章算术》中,已经有求三角形公式“底乘高的一半”,在实际丈量土地面积时,由于土地的面积并不是的三角形,要找出它来并非易事。所以他们想到了三角形的三条边。如果这样做求三角形的面积也就方便多了。但是怎样根据三边的长度来求三角形的面积,直到南宋,我国著名的数学家秦九韶提出了“三斜求积术”。
秦九韶他把三角形的三条边分别称为小斜、中斜和大斜。“术”即
。三斜求积术就是用小斜平方加上大斜平方,送到中斜平方,取相减后余数的一半,自乘而得一个数,小斜平方乘以大斜平方,送到上面得到的那个。相减后余数被4除,所得的数作为“实”,作1作为“隅”,开平方后即得面积。
所谓“实”、“隅”指的是,在方程px 2=q,p为“隅”,q为“实”。以?、a,b,c
示三角形面积、大斜、中斜、小斜,所以
q=1/4{a^2*c^2-[(a^2+c^2-b^2)/2 ]^2}
当P,1时,? 2,q,
?=?1/4{a^2*c^2-[(a^2+c^2-b^2)/2 ]^2}
因式分解得
? ^2=1/16[4a^2c^2-(a^2+c^2-b^2)^2]
=1/16[(c+a) ^2-b ^2][b^ 2-(c-a)^ 2]
=1/16(c+a+b)(c+a-b)(b+c-a)(b-c+a)
=1/16(c+a+b)(a+b+c-2b)(b+c+a-2a)(b+a+c-2c)
=1/16 [2p(2p-2a)(2p-2b)(2p-2c)]
=p(p-a)(p-b)(p-c)
由此可得:
S?=?[p(p-a)(p-b)(p-c)]
其中p=1/2(a+b+c)
这与海伦公式完全一致,所以这一公式也被称为“海伦,秦九韶公式”。
S=?1/4{a^2*c^2-[(a^2+c^2-b^2)/2 ]^2} .其中c>b>a.
根据海伦公式,我们可以将其继续推广至四边形的面积运算。如下题:
已知四边形ABCD为圆的内接四边形,且AB=BC=4,CD=2,DA=6,求四边形ABCD的面积
这里用海伦公式的推广
S圆内接四边形= 根号下(p-a)(p-b)(p-c)(p-d) (其中p为周长一半,a,b,c,d,为4边)
代入解得s=8? 3
证明(3)
在?ABC中?A、?B、?C对应边a、b、c
O为其内切圆圆心,r为其内切圆半径,p为其半周长
有tanA/2tanB/2+tanB/2tanC/2+tanC/2tanA/2=1
r(tanA/2tanB/2+tanB/2tanC/2+tanC/2tanA/2)=r
?r=(p-a)tanA/2=(p-b)tanB/2=(p-c)tanC/2
? r(tanA/2tanB/2+tanB/2tanC/2+tanC/2tanA/2)
=[(p-a)+(p-b)+(p-c)]tanA/2tanB/2tanC/2
=ptanA/2tanB/2tanC/2
=r
?p^2r^2tanA/2tanB/2tanC/2=pr^3
?S^2=p^2r^2=(pr^3)/(tanA/2tanB/2tanC/2)
=p(p-a)(p-b)(p-c)
?S=?p(p-a)(p-b)(p-c)
证明(4)
通过正弦定理:和余弦定理的结合证明 (具体可以参考证明方法1) 编辑本段推广
关于三角形的面积
在解题中主要应用的有:
设?ABC中,a、b、c分别为角A、B、C的对边,ha为a边上的高,R、r分别为?ABC外接圆、内切圆的半径,p = (a+b+c)/2,则
S?ABC
=1/2 aha
=1/2 ab×sinC
= r p
= 2R^2sinAsinBsinC
= ?[p(p-a)(p-b)(p-c)]
其中,S?ABC =?[p(p-a)(p-b)(p-c)] 就是著名的海伦公式,在希腊数学家海伦的著作《测地术》中有记载。
编辑本段海伦公式在解题中有十分重要的应用。
一、 海伦公式的证明
证一 勾股定理
如右图
勾股定理证明海伦公式 。
证二:斯氏定理
如右图。
斯氏定理证明海伦公式 证三:余弦定理
分析:由变形? S = 可知,运用余弦定理 c2 = a2 + b2 ,2abcosC 对
其进行证明。
证明:要证明S =
则要证S =
=
= ab×sinC
此时S = ab×sinC/2为三角形计算公式,故得证。
证四:恒等式
恒等式证明(1)
恒等式证明(2) 证五:半角定理
?由证一,x = = ,c = p,c
y = = ,a = p,a
z = = ,b = p,b
? r3 = ? r =
?S?ABC = r?p = 故得证。
二、 海伦公式的推广
由于在实际应用中,往往需计算四边形的面积,所以需要对海伦公式
进行推广。由于三角形内接于圆,所以猜想海伦公式的推广为:在任意内
接与圆的四边形ABCD中,设p= ,则S四边形=
现根据猜想进行证明。
证明:如图,延长DA,CB交于点E。
设EA = e EB = f
??1+?2 =180? ?2+?3 =180?
??1 =?3 ??EAB,?ECD
? = = =
解得: e = ? f = ?
由于S四边形ABCD = S?EAB
将?,?跟b = 代入公式变形?,得到:
?S四边形ABCD =
所以,海伦公式的推广得证。
编辑本段例题:
C语言版:
如图四边形ABCD内接于圆O中,SABCD = ,AD = 1,AB = 1, CD = 2.
求:四边形可能为等腰梯形。
解:设BC = x
由海伦公式的推广,得:
(4,x)(2,x)2 =27
x4,12x2,16x,27 = 0
x2(x2—1),11x(x,1),27(x,1) = 0
(x,1)(x3,x2,11x,27) = 0
x = 1或x3,x2,11x,27 = 0
当x = 1时,AD = BC = 1
? 四边形可能为等腰梯形。
在程序中实现(VBS):
dim a,b,c,p,q,s
a=inputbox("请输入三角形第一边的长度")
b=inputbox("请输入三角形第二边的长度")
c=inputbox("请输入三角形第三边的长度")
a=1*a
b=1*b
c=1*c
p=(a+b+c)*(a+b-c)*(a-b+c)*(-a+b+c)
q=sqr(p)
s=(1/4)*q
msgbox("三角形面积为"&s), ,"三角形面积"
在VC中实现
#include
#include
main()
int a,b,c,s;
printf("输入第一边\n");
scanf("%d",&a);
printf("输入第二边\n");
scanf("%d",&b);
printf("输入第三边\n");
scanf("%d",&c);
s=(a+b+c)/2;
printf("面积为:%f\n",sqrt(s*(s-a)*(s-b)*(s-c)));
C#版:
using System;
using System.Collections.Generic;
using System.Text;
namespace CST09078
class Program
static void Main(string[] args)
double a, b, c, p, s;
Console.WriteLine("输入第一条边的长度:\n");
a = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("输入第二条边的长度:\n");
b = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("输入第三条边的长度:\n");
c = Convert.ToDouble(Console.ReadLine());
p =(a+b+c)/2;
s = Math.Sqrt(p*(p - a)*(p - b)*(p - c));
Console.WriteLine("我算出来的面积是{0}", s);
Console.Read();