三角形是一种非常常见也是一种非常重要的图形,而三角形的周长和面积也是三角形非常重要的两个特性,这次我将使用两个类处理三角形的特性,一个是CPoint类(顶点类),用于处理三角形的三个顶点,一个是CTriangle类(三角形类),用于处理三角形的三条边
计算三角形的边长(两点之间的距离)
使用海伦公式计算三角形的面积
首先定义一个CPoint类
class CPoint
{
private:
double x; //横坐标
double y; //纵坐标
public:
CPoint(double xx=0,double yy=0);
double Distance(CPoint p) const; // 两点之间的距离(一点是当前点,另一点为参数p)
void input(); //以x,y 形式输入坐标点
void output(); //以(x,y) 形式输出坐标点
};
然后完善CPoint的成员函数
//构造函数
CPoint::CPoint(double xx, double yy)
{
x = xx;
y= yy;
}
//输入点的坐标
void CPoint::input()
{
cout<<"请输入顶点的坐标,(以x,y的形式输入):";
char ch;
while(1)
{
cin>>x>>ch>>y;
if(',' != ch)
{
cout<<"格式错误,请重新输入:";
}
else
{
break;
}
}
}
//计算两点之间的距离
double CPoint::Distance(CPoint p) const
{
double d = sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
return d;
}
//输出点的坐标
void CPoint::output()
{
cout<<'('<<x<<','<<y<<')'<<endl;
}
然后定义一个CTriangle类
class CTriangle//三角形类
{
public:
CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z){}//给出三点的构造函数
double perimeter(void);//计算三角形的周长
double area(void);//计算并返回三角形的面积
bool isRightTriangle(); //是否为直角三角形
bool isIsoscelesTriangle(); //是否为等腰三角形
private:
CPoint A,B,C; //三顶点
};
完善成员函数
//计算三角形的周长
double CTriangle::perimeter()
{
double a = B.Distance(C);
double b = A.Distance(C);
double c = A.Distance(B);
return (a+b+c);
}
//计算并返回三角形的面积
double CTriangle::area(void)
{
//计算三角形的三边长
double a = B.Distance(C);
double b = A.Distance(C);
double c = A.Distance(B);
//使用海伦公式计算三角形的面积
double p = (a + b + c) / 2;
double q = p*(p-a)*(p-b)*(p-c);
double s = sqrt(q);
return s;
}
//是否为直角三角形
bool CTriangle::isRightTriangle()
{
//计算三角形的三边长
double a = B.Distance(C);
double b = A.Distance(C);
double c = A.Distance(B);
double max = a;//保存三条边中最长的边
if(b>max)
{
max = b;
}
if(c>max)
{
max = c;
}
if(((max == a) && (b*b+c*c == max*max)) || ((b == max) &&(a*a+c*c == max*max)) || ((c == max) &&(a*a+b*b == max*max)))
{
return true;
}
else
{
return false;
}
}
//是否为等腰三角形
bool CTriangle::isIsoscelesTriangle()
{
//计算三角形的三边长
double a = B.Distance(C);
double b = A.Distance(C);
double c = A.Distance(B);
if(a == b || a == c || b == c)
{
return true;
}
else
{
return false;
}
}
程序的全部代码:
#include <iostream>
#include <cmath>
using namespace std;
class CPoint
{
private:
double x; //横坐标
double y; //纵坐标
public:
CPoint(double xx=0,double yy=0);
double Distance(CPoint p) const; // 两点之间的距离(一点是当前点,另一点为参数p)
void input(); //以x,y 形式输入坐标点
void output(); //以(x,y) 形式输出坐标点
};
//构造函数
CPoint::CPoint(double xx, double yy)
{
x = xx;
y= yy;
}
//输入点的坐标
void CPoint::input()
{
cout<<"请输入顶点的坐标,(以x,y的形式输入):";
char ch;
while(1)
{
cin>>x>>ch>>y;
if(',' != ch)
{
cout<<"格式错误,请重新输入:";
}
else
{
break;
}
}
}
//计算两点之间的距离
double CPoint::Distance(CPoint p) const
{
double d = sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
return d;
}
//输出点的坐标
void CPoint::output()
{
cout<<'('<<x<<','<<y<<')'<<endl;
}
class CTriangle//三角形类
{
public:
CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z){}//给出三点的构造函数
double perimeter(void);//计算三角形的周长
double area(void);//计算并返回三角形的面积
bool isRightTriangle(); //是否为直角三角形
bool isIsoscelesTriangle(); //是否为等腰三角形
private:
CPoint A,B,C; //三顶点
};
//计算三角形的周长
double CTriangle::perimeter()
{
double a = B.Distance(C);
double b = A.Distance(C);
double c = A.Distance(B);
return (a+b+c);
}
//计算并返回三角形的面积
double CTriangle::area(void)
{
//计算三角形的三边长
double a = B.Distance(C);
double b = A.Distance(C);
double c = A.Distance(B);
//使用海伦公式计算三角形的面积
double p = (a + b + c) / 2;
double q = p*(p-a)*(p-b)*(p-c);
double s = sqrt(q);
return s;
}
//是否为直角三角形
bool CTriangle::isRightTriangle()
{
//计算三角形的三边长
double a = B.Distance(C);
double b = A.Distance(C);
double c = A.Distance(B);
double max = a;//保存三条边中最长的边
if(b>max)
{
max = b;
}
if(c>max)
{
max = c;
}
if(((max == a) && (b*b+c*c == max*max)) || ((b == max) &&(a*a+c*c == max*max)) || ((c == max) &&(a*a+b*b == max*max)))
{
return true;
}
else
{
return false;
}
}
//是否为等腰三角形
bool CTriangle::isIsoscelesTriangle()
{
//计算三角形的三边长
double a = B.Distance(C);
double b = A.Distance(C);
double c = A.Distance(B);
if(a == b || a == c || b == c)
{
return true;
}
else
{
return false;
}
}
void main()
{
CPoint a, b, c;//定义a,b,c三点
//输入点的坐标
a.input();
b.input();
c.input();
//输出点的坐标
a.output();
b.output();
c.output();
//定义一个三角形
CTriangle Tril(a, b, c);
//计算三角形的周长和面积并且输出
cout<<"该三角形的周长为:"<<Tril.perimeter()<<",面积为:"<<Tril.area()<<endl<<endl;
cout<<"该三角形"<<(Tril.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl<<endl;
cout<<"该三角形"<<(Tril.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl<<endl;
system("pause");
}
执行结果