解三角形是高中数学的重要内容,所谓解三角形,给出三边三角中的三个量,求解另外三个量的过程。解三角形用到的知识点有:
(1) 正弦定理
(2)余弦定理
(3)三角形内角和定理 .
C++的类,是C++编程的核心概念,它扩展了数据的基本变量类型。在一个类中可以包含多个内部变量,并且自带处理变量的内部函数。
类的内部变量,称为成员变量(member variable),或属性(property)。
类的内部函数,称为成员函数(member function),或方法(method)。
有一类特殊的成员函数,静态成员函数,它不用创建具体对象就可以直接使用。在调用时,需在静态函数明前冠以类名,如Triangle_SAS::angle_A(3,4,5)。
对类的成员变量的操作,原则上都由它的成员函数来完成的,这体现了类的封装性。也就是说,如果你想对类的成员变量进行某种操作,你就在类中添加一个成员函数来干这件事,而不是在类的外面直接操作类的成员变量。
解三角形的已知条件有多种情况:
(1)SAS 两边夹角
(2) ASA 两角夹边
(3)SSS 三条边
(4)AAS 两角和一个邻边
(5) ASS 一角和它的邻边及对边
根据这些已知条件,运用上述定理,解出未知的边和角。
以SAS为例,定义一个类Triangle_SAS,私有成员变量为三条边(a,b,c)和三个角(A,B,C)。构造函数的参数为两边和它们的夹角,在构造函数内解出另外三个成员变量的值,一同传给六个成员变量赋初值。
使用C++语言,编译软件用的是Qt Creator 6.0.2。代码如下:
#include <QCoreApplication> //控制台程序专用类
#include <iostream> //输入输出类
#include <iomanip> //格式控制类
//C++库函数查阅:cplusplus.com
#include <cmath> //数学函数库
#define PI 3.1415
//解三角形类
class Triangle_SAS
{
public:
Triangle_SAS(float side1,float angle,float side2) //三角形类的SAS构造函数
{
//将给出两边夹角的值,传给成员变量
a = side1;
b = side2;
C = angle;
//调用成员函数,解三角形,并将值赋给成员变量
c = side_opposite_angle();
A = angle_opposite_side1();
B = angle_opposite_side2();
}
void coutSAS()
{
//std::fixed和setprecision()是输出格式控制符,在库<iomanip>中。
//std::fixed表示固定宽度输出。
//setprecision(2)表示输出精确到两位小数
//输出三条边a,b,c
std::cout<<"sides: " << std::fixed
<< std::setprecision(2) << a <<" , "
<<b<<" , "<<c <<std::endl;
//输出三个角A,B,C
std::cout<<"angles: "<< std::fixed
<< std::setprecision(2) << A
<<" , "<< B <<" , "<<C <<std::endl;
}
//用public成员函数读取边a值,因为a是private成员
float geta()
{
return a;
}
float getb()
{
return b;
}
float getc()
{
return c;
}
//用public成员函数读取角A的值,因为A是private成员
float getA()
{
return A;
}
float getB()
{
return B;
}
float getC()
{
return C;
}
//静态成员函数,已知三边,求角
static float angle_A(int side_a, int side_b,int side_c)
{
float cosA = (pow(side_b,2)+pow(side_c,2)-pow(side_a,2))/(2*side_b*side_c);
return acos(cosA)/PI*180;
}
//静态成员函数,已知三边,求角B。
static float angle_B(float side_a, float side_b,float side_c)
{
float cosB = (pow(side_a,2)+pow(side_c,2)-pow(side_b,2))/(2*side_a*side_c);
return acos(cosB)/PI*180;
}
private:
//计算角angle的对边的长度
float side_opposite_angle()
{
//高中余弦定理 pow(c,2) = pow(a,2)+pow(b,2)-2*a*b*cos(C*PI/(float)180);
//平方根函数原型:float sqrt (float x)
//幂函数原型:float pow (float base,float exponent)
float t = pow(a,2)+pow(b,2)-2*a*b*cos(C*PI/(float)180); //C是角度要化成弧度
return sqrt(t); //返回边长
}
//计算边side1的对角
float angle_opposite_side1()
{
float cosA = (pow(b,2)+pow(c,2)-pow(a,2))/(2*b*c);
return acos(cosA)/PI*180;
}
//计算边side2的对角
float angle_opposite_side2()
{
float cosB = (pow(a,2)+pow(c,2)-pow(b,2))/(2*a*c);
return acos(cosB)/PI*180;
}
//成员变量:三角形的三条边和三个角
private:
float a;
float b;
float c;
float A; //A角对着a边,以此类推。
float B;
float C;
};
int main(int argc, char *argv[])
{
//QCoreApplication是Qt库中专门用于控制台程序的类
QCoreApplication a(argc, argv);
//创建一个三角形类的对象sas1, 代入两边夹角参数。
//构造函数会自动算出两外三个成员变量。
Triangle_SAS sas1(49,107,26);
//输出对象的六个成员变量的值
sas1.coutSAS();
return a.exec();
}
【结语】本文用C++类,定义了SAS三角形的类,巧用类的构造函数解三角形。