优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++自定义类在高中数学解三角形中的运用

nanyue 2024-08-10 18:34:41 技术文章 12 ℃

解三角形是高中数学的重要内容,所谓解三角形,给出三边三角中的三个量,求解另外三个量的过程。解三角形用到的知识点有:

(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三角形的类,巧用类的构造函数解三角形。

Tags:

最近发表
标签列表