• 浙大版《C语言程序设计(第3版)》题目集 习题3-5 三角形判断 (15 分)


    习题3-5 三角形判断 (15 分)

    给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。1​​,y1​​)、(x2​​,y2​​)、(x3​​,y3​​),检验它们能否构成三角形

    输入格式:

    输入在一行中顺序给出六个[100,100]范围内的数字,即三个点的坐标x1、y1、x2、y2、x3、y3。(。x1,y1)、(x2,y2)、(x3,y3)1​​、y1​​、x2​​、y2​​、x3​​、y3​​。

    输出格式:

    若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。

    输入样例1:

    4 5 6 9 7 8
    

    输出样例1:

    L = 10.13, A = 3.00
    

    输入样例2:

    4 6 8 12 12 18
    

    输出样例2:

    Impossible
    

    思路:先用两点间距离公式求出三边边长。(d=√[(x₂ - x₁)²+(y₂ - y₁)²])
       再用海伦公式判断是否能组成三角形,并求出面积。
      
    代码如下:
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        double x1 ,x2, x3, y1, y2, y3, a, b, c, L, A, s, delta;
        
        scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
        a=sqrt(pow(x1-x2,2)+pow(y1-y2,2));//两点间距离公式,下同。
        b=sqrt(pow(x2-x3,2)+pow(y2-y3,2));
        c=sqrt(pow(x1-x3,2)+pow(y1-y3,2));
        s=(a+b+c)/2;
        delta=(s-a)*(s-b)*(s-c);//用delta判别是否能成为三角形
        if(delta<=0) 
        printf("Impossible
    ");
        else
        {
        L=2*s;
        A=sqrt(s*delta);
        printf("L = %.2lf, A = %.2lf
    ",L,A);
        }
    
        return 0;
    }
    
    
    

      

    
    
    
    
    
     
    
    

     科普:海伦-秦九韶公式

        希羅公式Heron's formulaHero's formula),又译希罗公式希伦公式海龙公式,亦称“海伦-秦九韶公式”。此公式是亚历山大港的海伦发现的,并可在其于公元60年的《Metrica》中找到其证明,利用三角形的三条边长来求取三角形面积。亦有认为早于阿基米德已经懂得这条公式,而由于《Metrica》是一部古代数学知识的结集,该公式的发现时期很有可能先于海伦的著作。

        假设有一个三角形,边长分别为a,b,c,三角形的面积A可由以下公式求得:A={sqrt  {s(s-a)(s-b)(s-c)}},其中s={frac {a+b+c}{2}}。中国南宋末年数学家秦九韶发现或知道等价的公式,其著作《数书九章》卷五第二题即三斜求积。“问沙田一段,有三斜,其小斜一十三里,中斜一十四里,大斜一十五里,里法三百步,欲知为田几何?”答曰:“三百十五顷.”其术文是:“以小斜幂并大斜幂,减中斜幂,余半之,自乘于上;以小斜幂乘大斜幂,减上,余四约之为实,……开平方得积。”若以大斜记为a,中斜记为b,小斜记为c,秦九韶的方法相当于下面的一般公式:

                              A={sqrt  {{frac  1{4}}left[a^{2}c^{2}-left({frac  {a^{2}+c^{2}-b^{2}}{2}}
ight)^{2}
ight]}},其中ageq bgeq c

    像其他中国古代的数学家一样,他的方法没有证明。根据现代数学家吴文俊的研究,秦九韶公式可由出入相补原理得出。一些中国学者将这个公式称为秦九韶公式

    由于任何n边的多边形都可以分割成n-2个三角形,所以海伦公式可以用作求多边形面积的公式。比如说测量土地的面积的时候,不用测三角形的高,只需测两点间的距离,就可以方便地导出答案。

    各种证明如下:

    利用三角公式和代数式变形来证明

    与海伦在他的著作《Metrica》中的原始证明不同,在此我们用三角公式和公式变形来证明。设三角形的三边a,b,c的对角分别为A,B,C,则余弦定理

                                      cos C = frac{a^2+b^2-c^2}{2ab}

    利用和平方、差平方、平方差等公式,从而有

    {displaystyle {egin{aligned}sin C&={sqrt {1-cos ^{2}C}}\&={sqrt {(1+cos C)(1-cos C)}}\&={sqrt {left(1+{frac {a^{2}+b^{2}-c^{2}}{2ab}}
ight)left(1-{frac {a^{2}+b^{2}-c^{2}}{2ab}}
ight)}}\&={sqrt {left[{frac {(a+b)^{2}-c^{2}}{2ab}}
ight]left[{frac {c^{2}-(a-b)^{2}}{2ab}}
ight]}}\&={frac {sqrt {(a+b+c)(a+b-c)(c+a-b)(c-a+b)}}{2ab}}\&={frac {sqrt {(2s)(2s-2c)(2s-2b)(2s-2a)}}{2ab}}\&={frac {2}{ab}}{sqrt {s(s-c)(s-b)(s-a)}}end{aligned}}}
    
egin{align}
A & = frac{1}{2}ab sin C \
& = frac{ab}{2} cdot frac{2}{ab} sqrt{s(s-a)(s-b)(s-c)} \
& = sqrt{s(s-a)(s-b)(s-c)}
end{align}

    利用勾股定理和代数式变形来证明

    Triangle with notations 3.svg
    b^2=h^2+d^2
    a^2=h^2+(c-d)^2
    a^2-b^2=c^2-2cd
    d=frac{-a^2+b^2+c^2}{2c}
    
egin{align}
h^2 & = b^2-left(frac{-a^2+b^2+c^2}{2c}
ight)^2\
& = frac{(2bc-a^2+b^2+c^2)(2bc+a^2-b^2-c^2)}{4c^2}\
& = frac{((b+c)^2-a^2)(a^2-(b-c)^2)}{4c^2}\
& = frac{(b+c-a)(b+c+a)(a+b-c)(a-b+c)}{4c^2}\
& = frac{2(s-a)cdot 2scdot 2(s-c)cdot 2(s-b)}{4c^2}\
& = frac{4s(s-a)(s-b)(s-c)}{c^2}
end{align}
    
egin{align}
A & = frac{ch}{2}\
& = sqrt{frac{c^2}{4}cdot frac{4s(s-a)(s-b)(s-c)}{c^2}}\
& = sqrt{s(s-a)(s-b)(s-c)}
end{align}
    Heron formula.PNG

    用旁心来证明

    {displaystyle igtriangleup ABC}中,{displaystyle {overline {AB}}=c,{overline {BC}}=a,{overline {CA}}=b}

    I为内心,{displaystyle I_{a},I_{b},I_{c}}为三旁切圆。

    {displaystyle ecause angle I_{a}BI=angle I_{a}CI=90^{mathsf {o}}}

    {displaystyle 	herefore I_{a}CIB}四点共圆,并设此圆为圆O

    1. I做铅直线交{displaystyle {overline {BC}}}P,再延长{displaystyle {overleftrightarrow {IP}}},使之与圆O交于Q点。再过{displaystyle I_{a}}做铅直线交overline {BC}R点。
    2. 先证明{displaystyle Box I_{a}QPR}为矩形,{displaystyle ecause angle QPR=90^{mathsf {o}},angle I_{a}RP=90^{mathsf {o}}},又{displaystyle angle I_{a}QI=angle I_{a}BI=90^{mathsf {o}}}(圆周角相等)。{displaystyle 	herefore Box I_{a}QPR}为矩形。因此,{displaystyle {overline {I_{a}R}}={overline {QP}}}
    3. {displaystyle {overline {PI}}=}内切圆半径{displaystyle ={frac {igtriangleup }{frac {a+b+c}{2}}}}{displaystyle {overline {I_{a}R}}=}旁切圆半径{displaystyle ={frac {igtriangleup }{frac {b+c-a}{2}}}}。且易知{displaystyle {overline {BP}}={frac {c+a-b}{2}},{overline {PC}}={frac {a+b-c}{2}}}。由圆幂性质得到:{displaystyle {overline {PC}}	imes {overline {PB}}={overline {PQ}}	imes {overline {PI}}={overline {I_{a}R}}	imes {overline {PI}}}。故{displaystyle {frac {a+b-c}{2}}	imes {frac {c+a-b}{2}}={frac {igtriangleup }{frac {a+b+c}{2}}}	imes {frac {igtriangleup }{frac {b+c-a}{2}}}}{displaystyle Rightarrow igtriangleup ={sqrt {{frac {a+b+c}{2}}	imes {frac {b+c-a}{2}}	imes {frac {a+c-b}{2}}	imes {frac {a+b-c}{2}}}}}

    来源:维基百科-海伦-秦九韶公式(https://zh.wikipedia.org/wiki/%E6%B5%B7%E4%BC%A6%E5%85%AC%E5%BC%8F)

     
  • 相关阅读:
    设计一个栈,除了pop与push方法,还支持Min方法,可返回栈元素中的最小值,push、pop、min三个方法的时间复杂度必须是O(1)
    删除单向链表中间的某个节点,假定你只能访问该节点
    找出单向链表中倒数第K个节点
    关于ssh纠错笔记
    3维图像分割显示 标签: 图像分割level set3dmatlab 2015-04-16 17:59 228人阅读 评论(0)
    EM 算法 标签: clusteringalgorithm图像分割EM算法 2015-03-24 21:26 426人阅读 评论(0)
    kmeans算法分割图像 标签: kmeans图像分割算法 2015-03-23 20:02 509人阅读 评论(0)
    随机数
    IDL 日期时间函数整理
    显示程序运行时间_matlab
  • 原文地址:https://www.cnblogs.com/IT-Lead-The-World/p/10350950.html
Copyright © 2020-2023  润新知