本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
提示:(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类;(2)三角形类参考下面CTriangle类的声明;(3)充分利用CPoint类中已有的代码实现;(4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。
#include<iostream>
#include<math.h>
using namespace std;
class CPoint{
public:
CPoint(float x,float y):xpoint(x),ypoint(y){}
float pointdistance(CPoint p) const;
float outputX() const;
float outputY() const;
private:
float xpoint;
float ypoint;
};
float CPoint::pointdistance(CPoint p) const
{
return sqrt(pow((p.xpoint-xpoint),2)+pow((p.ypoint-ypoint),2));
}
float CPoint::outputX() const
{
return xpoint;
}
float CPoint::outputY() const
{
return ypoint;
}
class CTriangle
{
public:
CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z){} //给出三点的构造函数
void setTriangle(CPoint &X,CPoint &Y,CPoint &Z);//
float perimeter(void);//计算三角形的周长
float area(void);//计算并返回三角形的面积
bool isRightTriangle(); //是否为直角三角形
bool isIsoscelesTriangle(); //是否为等腰三角形
private:
CPoint A,B,C; //三顶点
};
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)
{
A=X;
B=Y;
C=Z;
cout<<"A: ("<<A.outputX()<<","<<A.outputY()<<")"<<endl;
cout<<"B: ("<<B.outputX()<<","<<B.outputY()<<")"<<endl;
cout<<"C: ("<<C.outputX()<<","<<C.outputY()<<")"<<endl;
}
float CTriangle::perimeter(void)
{
float c=0;
c=A.pointdistance(B)+A.pointdistance(C)+B.pointdistance(C);
return c;
}
float CTriangle::area(void)
{
float p,s;
p=(A.pointdistance(B)+A.pointdistance(C)+B.pointdistance(C))/2;
s=sqrt(p*(p-A.pointdistance(B))*(p-A.pointdistance(C))*(p-B.pointdistance(C)));
return s;
}
bool CTriangle::isRightTriangle()
{
float max,min[2],temp;
temp=(A.pointdistance(B)>A.pointdistance(C))?A.pointdistance(B):A.pointdistance(C);
min[0]=(A.pointdistance(B)>A.pointdistance(C))?A.pointdistance(C):A.pointdistance(B);
max=(temp>B.pointdistance(C))?temp:B.pointdistance(C);
min[1]=(temp>B.pointdistance(C))?B.pointdistance(C):temp;
if(pow(max,2)-(pow(min[0],2)+pow(min[1],2))<1e-7)
return true;
else
return false;
}
bool CTriangle::isIsoscelesTriangle()
{
if((A.pointdistance(B)==A.pointdistance(C))||(A.pointdistance(B)==B.pointdistance(C))||(A.pointdistance(C)==B.pointdistance(C)))
return true;
else
return false;
}
void main()
{
CPoint X(0,0),Y(1,0),Z(0,1);
CTriangle ct(X,Y,Z);
ct.setTriangle(X,Y,Z);
cout<<"output the perimeter of this triangle: c="<<ct.perimeter()<<endl;
cout<<"output the area of this triangle: s="<<ct.area()<<endl;
cout<<"the triangle is righttriangle: yes/no(1/0): "<<ct.isRightTriangle()<<endl;
cout<<"the triangle is oscelestriangle: yes/no(1/0): "<<ct.isIsoscelesTriangle()<<endl;
}