/*
*程序的版权和版本声明部分:
*Copyright(c)2014,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:张凯
*完成日期:2014年 04月3号
*版本号:v1.0
*对任务及求解方法的描述部分:
*输入描述: 无
*问题描述: 无
*程序输出:无
*问题分析:
*算法设计:
*/
#include <iostream>
#include <Cmath>
using namespace std;
class Cpoint
{
private:
double x; // 横坐标
double y; // 纵坐标
public:
Cpoint(double xx=0,double yy=0);
double distance1(Cpoint p) const; // 两点之间的距离
double distance2(Cpoint p) const; //求两三点间距离的平方
void input(); //以x,y 形式输入坐标点
void output(); //以(x,y) 形式输出坐标点
};
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(void);//计算三角形的周长
double area(void);//计算并返回三角形的面积
bool sfwsjx();
bool isRightTriangle(); //是否为直角三角形
bool isIsoscelesTriangle(); //是否为等腰三角形
private:
Cpoint A,B,C; //三顶点
};
Cpoint::Cpoint(double xx,double yy)
{
x=xx;
y=yy;
}
double Cpoint::distance1(Cpoint p) const
{
double s;
s=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
return s;
}
double Cpoint::distance2(Cpoint p) const
{
double l;
l=((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
return l;
}
void Cpoint::input()
{
cin>>x>>y;
}
void Cpoint::output()
{
cout<<"("<<x<<", "<<y<<")"<<endl;
}
void CTriangle::setTriangle(Cpoint &X,Cpoint &Y,Cpoint &Z)
{
A=X;
B=Y;
C=Z;
}
double CTriangle::perimeter(void)
{
double a=A.distance1(B);
double b=B.distance1(C);
double c=C.distance1(A);
return (a+b+c);
}
double CTriangle::area(void)
{
double a,b,c,p;
a=A.distance1(B);
b=B.distance1(C);
c=C.distance1(A);
p=(a+b+c)/2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
bool CTriangle::sfwsjx()
{
double a,b,c;
a=A.distance1(B);
b=B.distance1(C);
c=C.distance1(A);
if(a+b>c||a+c>b||b+c>a)
return true;
else
return false;
}
bool CTriangle::isRightTriangle()
{
double x,y,z;
x=A.distance2(B);
y=B.distance2(C);
z=C.distance2(A);
if(x+y==z||x+z==y||y+z==x)
return true;
else
return false;
}
bool CTriangle::isIsoscelesTriangle()
{
double a,b,c;
a=A.distance1(B);
b=B.distance1(C);
c=C.distance1(A);
if(a==b||b==c||a==c)
return true;
else
return false;
}
int main()
{
Cpoint X,Y,Z;
cout<<"请输入三个顶点A,B,C:"<<endl;
X.input();
Y.input();
Z.input();
CTriangle ct(X,Y,Z);
cout<<"三角形的周长为:"<<ct.perimeter()<<endl;
cout<<"三角形的面积为:"<<ct.area()<<endl;
cout<<"输入的三点"<<(ct.sfwsjx()?"能":"不能")<<"构成三角形"<<endl;
cout<<"该三角形"<<(ct.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;
cout<<"该三角形"<<(ct.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;
return 0;
}
运行结果:
心得体会: 在判断是否为直角三角形时,没用精度,又定义了一个计算距离平方的函数,这样感觉更加精确。