* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 作 者:马广明
* 完成日期:2014 年 4 月 1 日
* 问题介绍: 坐标求三角形周长面积--常成员函数
* 版 本 号:v1.0
*/
#include <iostream>
#include<Cmath>
using namespace std;
class CPoint
{
private:
float x;
float y;
public:
CPoint(float xx=0,float yy=0):x(xx),y(yy) {}
float Distance1(CPoint p) const;
void input();
void output()
{
cout<<"("<<x<<","<<y<<")"<<endl;
};
};
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 CPoint::input()
{
char h;
cout<<"请输入坐标(格式x,y):";
while(1)
{
cin>>x>>h>>y;
if(h==',')
break;
cout<<"格式不对,请重新输入:"<<endl;
}
}
float CPoint::Distance1(CPoint p)const
{
float a,b,c;
a=p.x-x;
b=p.y-y;
c=sqrt(a*a+b*b);
return c;
}
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)
{
A=X;
B=Y;
C=Z;
}
float CTriangle::perimeter(void)
{
float a;
a=A.Distance1(C)+B.Distance1(C)+A.Distance1(B);
return a;
}
float CTriangle::area(void)
{
float a,b;
a=(A.Distance1(C)+B.Distance1(C)+A.Distance1(B))/2;
b=a*(a-A.Distance1(C))*(a-A.Distance1(B))*(a-B.Distance1(C));
return b;
}
bool CTriangle::isRightTriangle()
{
float a,b,c;
a=B.Distance1(C);
b=A.Distance1(C);
c=A.Distance1(B);
if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(c*c+b*b==a*a))
{
return 1;
}
else
{
return 0;
}
}
bool CTriangle::isIsoscelesTriangle()
{
float a,b,c;
a=B.Distance1(C);
b=A.Distance1(C);
c=A.Distance1(B);
if((a==b)||(b==c)||(a==c))
{
return 1;
}
else
{
return 0;
}
}
int main()
{
CPoint X(2,2),Y(4,2),Z(3,5);
CTriangle ct(X,Y,Z);
cout<<"周长:"<<ct.perimeter()<<endl;
cout<<"面积:"<<ct.area()<<endl;
cout<<(ct.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;
cout<<(ct.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;
return 0;
}

坐标求三角形类
最新推荐文章于 2021-05-17 03:06:42 发布