#include <iostream>
#include <cmath>
using namespace std;
class Cpoint
{
public:
Cpoint(double xx=0,double yy=0):x(xx),y(yy){};
double Distancel(Cpoint p) const; //两点之间的距离(一点是当前点,另一点为参数p)
void input()
{
cout<<"输入坐标:";
cin>>x>>y;
}
private:
double x; //横坐标
double y; //纵坐标
};
double Cpoint::Distancel(Cpoint p) const
{
//将(x-p.x)更改为(this->x-p.x)可以更便于理解,d是当前点*this和参数给出的点p间的距离
double d=sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
return d;
}
class Ctriangle
{
public:
Ctriangle(Cpoint &X,Cpoint &Y,Cpoint &Z):A(X),B(Y),C(Z){}
void setTriangle(Cpoint &X,Cpoint &Y,Cpoint &Z);
double perimeter();//计算周长
double area();//计算并返回三角形面积
bool isRightTriangle();//是否为直角三角形
bool isIsoscelesTriangle();//是否为等腰三角形
private:
Cpoint A,B,C;//三顶点
};
void Ctriangle::setTriangle(Cpoint &X,Cpoint &Y,Cpoint &Z)
{
A=X;
B=Y;
C=Z;
}
double Ctriangle::perimeter()
{
double d;
d=B.Distancel(C)+C.Distancel(A)+A.Distancel(B);
return d;
}
double Ctriangle::area()
{
double a=B.Distancel(C),b=C.Distancel(A),c=A.Distancel(B);
double s=(a+b+c)/2;
return sqrt(s*(s-a)*(s-b)*(s-c));
}
bool Ctriangle::isRightTriangle()//是否为直角三角形
{
double a=B.Distancel(C),b=C.Distancel(A),c=A.Distancel(B);
double max=a;
if(b>max) max=b;
if(c>max) max=c;
if(((max==a)&&(abs(a*a-b*b-c*c)<1e-7))||((max==b)&&(abs(b*b-a*a-c*c)<1e-7))||((max==c)&&(abs(c*c-b*b-a*a)<1e-7)))
return true;
else
return false;
}
bool Ctriangle::isIsoscelesTriangle() //是否为等腰三角形
{
double a=B.Distancel(C),b=C.Distancel(A),c=A.Distancel(B);
if((abs(a-b)<1e-7)||(abs(b-c)<1e-7)||(abs(c-a)<1e-7))
return true;
else
return false;
}
int main()
{
Cpoint X,Y,Z;
X.input();
Y.input();
Z.input();
Ctriangle Q(X,Y,Z);
cout<<"该三角形周长:"<<Q.perimeter()<<",面积:"<<Q.area()<<endl;
cout<<"该三角形"<<(Q.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl; //比if判断更简洁
cout<<"该三角形"<<(Q.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;
return 0;
}
对象作为数据成员
最新推荐文章于 2021-07-05 19:40:17 发布