三角形类别判断: 定义二维点(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;
}