三角形类别判断

 三角形类别判断: 定义二维点(point) 类, 包含点的坐标x和y, 再定义二维
的三角形(triangle) 类, 在三角形类中能对三角形类别进行判断。 首先判断
输入的三个点能否构成三角形, 然后判断是否为等腰三角形、 等边三角形、
直角三角形、 等腰直角三角形。
注意: 要考虑计算机中实数计算的精度误差

#include <iostream>
#include<cmath>//头文件
using namespace std;

class Point//点类
{
public:

    void set1(double x,double y)//设置
    {
        nx=x;
        ny=y;
    }
    double getx()//返回x
    {

        return nx;
    }
    double gety()//返回y
    {
        return ny;
    }
private://私有成员
    double nx;
    double ny;
};


class Triangle//三角类
{
public:
    bool bds(Point a,Point b,Point c);//判断是不是三角形
    void bdss(Point a,Point b,Point c);//判断是啥三角形
};



bool Triangle::bds(Point a,Point b,Point c)//判断是不是三角形
{
    if((a.getx()==b.getx())&&(a.getx()==c.getx()))//横坐标相同
        return false;
    if ((a.gety()==b.gety())&&(a.gety()==c.gety()))//纵坐标相同
        return false;
    double x,y,z;//分别为三边的长度
    x=sqrt((a.getx()-b.getx())*(a.getx()-b.getx())+(a.gety()-b.gety())*(a.gety()-b.gety()));
    y=sqrt((a.getx()-c.getx())*(a.getx()-c.getx())+(a.gety()-c.gety())*(a.gety()-c.gety()));
    z=sqrt((c.getx()-b.getx())*(c.getx()-b.getx())+(c.gety()-b.gety())*(c.gety()-b.gety()));
    if((x+y>z)||(x+z>y)||(z+y>x))//两边之和大于第三边
    {
        return true;
    }
    else
        return false;
}


void Triangle::bdss(Point a,Point b,Point c)//判断是啥三角形
{
    double x,y,z;//分别为三边的长度
    x=sqrt((a.getx()-b.getx())*(a.getx()-b.getx())+(a.gety()-b.gety())*(a.gety()-b.gety()));
    y=sqrt((a.getx()-c.getx())*(a.getx()-c.getx())+(a.gety()-c.gety())*(a.gety()-c.gety()));
    z=sqrt((c.getx()-b.getx())*(c.getx()-b.getx())+(c.gety()-b.gety())*(c.gety()-b.gety()));
    if((fabs(x-y)<1e-4)&&(fabs(y-z)<1e-4))//三边在误差允许的范围内相等
    {
        cout<<"这是一个等边三角形"<<endl;
    }
    else if(((x*x+y*y)-z*z<1e-6)||((x*x+z*z)-y*y<1e-6)||((y*y+z*z)-x*x<1e-6))//判断直角三角形
    {
        if((fabs(x-y)<1e-6)||fabs(x-z)<1e-6||(fabs(y-z)<1e-6))//判断等腰三角形
        {
            cout<<"这是一个等腰直角三角形"<<endl;
        }
        else
        cout<<"这是一个直角三角形"<<endl;
    }
    else if(fabs(x-y)<1e-6||(fabs(x-z)<1e-6)||(fabs(y-z)<1e-6))
    {
        cout<<"这是一个等腰三角形"<<endl;
    }
    else
        cout<<"这是一个普通的三角形"<<endl;

}


int main()
{
    Triangle t;//实例化
    Point a; //实例化

    Point b; //实例化

    Point c; //实例化

    while(1)
    {
        double x1,y1,x2,y2,x3,y3;
        cout<<"请依次输入x1,y1,x2,y2,x3,y3"<<endl;
        cin>>x1>>y1>>x2>>y2>>x3>>y3;//输入
        a.set1(x1,y1);
        b.set1(x2,y2);
        c.set1(x3,y3);
        if(t.bds(a,b,c))//是不是三角形
        {
            t.bdss(a,b,c);//是啥三角形
        }
        else
        {
            cout<<"这三个点构不成三角形"<<endl;
        }
        int c;
        cout<<"是否继续?1/0"<<endl;
        cin>>c;
        if(c==0)
        {
            break;//跳出循环
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值