哈囉大家好,我是熊尼
今天來講一個蠻經典的題目,在許多地方的基本練習題中都能夠看到
那就是——三角形的種類判斷與面積計算
那在解這個題目呢需要先知道三角形必須要最小兩邊和大於第三邊才能形成
並且三角形大致分成三種
- 銳角三角形
- 直角三角形
- 鈍角三角形
而這三種三角形的分類依據就是兩個最短邊長的平方和跟第三邊邊長的平方成什麼關係
假設有一個三角形三邊邊長分別是a,b,c,a最小,c最大,且a + b > c。
若a2 + b2 = c2 則它是直角三角形
若a2 + b2 < c2 則它是頓角三角形
若a2 + b2 > c2 則它是銳角三角形
至於對原理部分有興趣的人呢就去問數學老師吧,我絕不會說是用餘弦定理可
以證明的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
在瞭解完原理後接著來將這個公式在程式中實現
題目一樣來自於這本
那首先先來看看輸出
首先來輸入直角三角形的標準三邊長
再來一個鈍角
來一個銳角
最後還有一個成不了三角形的
開始
1.功能需求
- 判斷輸入的三個參數會組合成什麼樣的三角形
- 以這三項參數為基準求出該三角形的面積
2.解題步驟邏輯
- 首先請使用者輸入三邊長
- 對三邊長進行排序
- 判斷是否能成為三角形,並判斷種類
- 套用公式,並輸出
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就是平方根的指令
結語
數學大家在學的時候每次都覺得很抽象、看不懂
但實際去了解公式後,發現這些數學的應用比想像中還要好用(`・ω・´)+
而且重點是!!這些東西其實對於大學碩班的研究都很有用
之前在做電動車(人在裡面開的那種)時,在車架的計算與評估料件時
今天介紹的公式就特別管用(´・з・)
那今天的介紹到這邊!
覺得我的網誌最你有幫助,歡迎加入書籤~我每週都會更新哦
留言列表