哈囉大家好,我是熊尼

今天來講一個蠻經典的題目,在許多地方的基本練習題中都能夠看到

那就是——三角形的種類判斷與面積計算

那在解這個題目呢需要先知道三角形必須要最小兩邊和大於第三邊才能形成

並且三角形大致分成三種

  1. 銳角三角形
  2. 直角三角形
  3. 鈍角三角形

而這三種三角形的分類依據就是兩個最短邊長的平方和跟第三邊邊長的平方成什麼關係

假設有一個三角形三邊邊長分別是a,b,ca最小,c最大,且a + b > c

a+ b= c則它是直角三角形

a+ b< c則它是頓角三角形

a+ b> c則它是銳角三角形

至於對原理部分有興趣的人呢就去問數學老師吧,我絕不會說是用餘弦定理可

以證明的XD

 

!分類完之後來處理面積

面積部分呢在國中以前的階段都是用底X/2來處理

那在這裡我是用一個名字聽起來很中二的公式來做處理

海龍公式(Heron's formula)

其公式為

若s=a+b+c/2,a、b、c是三角形三邊邊長

則△=√s(s-a)(s-b)(s-c)

其詳細證明可參考此

->http://www2.chsh.chc.edu.tw/bee/1050206/heron%20formula.pdf

 

在瞭解完原理後接著來將這個公式在程式中實現

題目一樣來自於這本

getImage

那首先先來看看輸出

首先來輸入直角三角形的標準三邊長

截圖 2020-02-09 下午8.16.58

再來一個鈍角

截圖 2020-02-09 下午8.18.14

來一個銳角

截圖 2020-02-09 下午8.19.32

最後還有一個成不了三角形的

截圖 2020-02-09 下午8.20.14

開始


1.功能需求

  1. 判斷輸入的三個參數會組合成什麼樣的三角形
  2. 以這三項參數為基準求出該三角形的面積

 

2.解題步驟邏輯

  1. 首先請使用者輸入三邊長
  2. 對三邊長進行排序
  3. 判斷是否能成為三角形,並判斷種類
  4. 套用公式,並輸出

3.解題

C:

#include<stdlib.h>
#include<stdio.h>
#include<math.h>

int main(int argc, const char * argv[]) {
    int a,b,c,box;
        
        //輸入邊長
        printf("請輸入底邊 :\n");
        scanf("%d",&a);//底
        printf("請輸入高邊 :\n");
        scanf("%d",&b);//高
        printf("請輸入斜邊 :\n");
        scanf("%d",&c);//斜
    
        //開始排列大小
        if(a > b){
            box = a;
            a = b;
            b = box;
            if(a > c){
                box = a;
                a = c;
                c = box;
            }
        }else{
            if(b > c){
                box = b;
                b = c;
                c = box;
            }
        }
        
        //判斷是否能形成三角形
        if((a+b) > c){
            //判斷三角形種類
            if((a*a + b*b) > c*c){
                int d = (a+b+c)/2;
                float area = sqrt(d*(d-a)*(d-b)*(d-c));
                printf("這是銳角三角形\n");
                printf("面積為 = %f\n",area);
            }else if((a*a + b*b) == c*c){
                int d = (a+b+c)/2;
                float area = sqrt(d*(d-a)*(d-b)*(d-c));
                printf("這是直角三角形\n");
                printf("面積為 = %f\n",area);
            }else{
                int d = (a+b+c)/2;
                float area = sqrt(d*(d-a)*(d-b)*(d-c));
                printf("這是鈍角三角形\n");
                printf("面積為 = %f\n",area);
            }
    
        }else{
            printf("此三參數無法構成三角形\n");
        }
    return 0;

}

 

C++

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int a,b,c,box;

    //輸入邊長
    cin >> a >> b >> c;
    //開始排列大小
    if(a > b){
        box = a;
        a = b;
        b = box;
        if(a > c){
            box = a;
            a = c;
            c = box;
        }
    }else{
        if(b > c){
            box = b;
            b = c;
            c = box;
        }
    }

    //判斷是否能形成三角形
    if((a+b) > c){
        //判斷三角形種類
        if((a*a + b*b) > c*c){
            int d = (a+b+c)/2;
            float area = sqrt(d*(d-a)*(d-b)*(d-c));
            cout << "it's acute triangle\n";
            cout << "area = " << area;
        }else if((a*a + b*b) == c*c){
            int d = (a+b+c)/2;
            float area = sqrt(d*(d-a)*(d-b)*(d-c));
            cout << "it's right triangle\n";
            cout << "area = " << area;
        }else{
            int d = (a+b+c)/2;
            float area = sqrt(d*(d-a)*(d-b)*(d-c));
            cout << "it's obtuse triangle\n";
            cout << "area = " << area;
        }

    }else{
        cout << "it's not triangle\n";
    }

}

 

其中的海龍公式

int d = (a+b+c)/2;
float area = sqrt(d*(d-a)*(d-b)*(d-c));

大致就是這樣,sqrt就是平方根的指令


結語

數學大家在學的時候每次都覺得很抽象、看不懂

但實際去了解公式後,發現這些數學的應用比想像中還要好用(`・ω・´)+

而且重點是!!這些東西其實對於大學碩班的研究都很有用

之前在做電動車(人在裡面開的那種)時,在車架的計算與評估料件時

今天介紹的公式就特別管用(´・з・)

 

那今天的介紹到這邊!

覺得我的網誌最你有幫助,歡迎加入書籤~我每週都會更新哦

 

arrow
arrow

    碼農日常 發表在 痞客邦 留言(2) 人氣()