题目描述
定义一个平面坐标系下的点类Point,有整型数据成员x,y坐标值。成员函数包括:(1)带默认值的构造函数,默认值均为0;(2)拷贝构造函数;(3)置x,y坐标值;(4)取x,y的坐标值,参数为两个整型量的引用,分别用于获取x,y坐标值。(5)输出函数,用于输出x,y坐标值。(6)求两个点之间距离的函数,参数是Point类的对象引用。
定义一个平面坐标系下的三角形类Triangle,数据成员为三个Point类的对象p1、p2、p3。成员函数包括:(1)带参数的构造函数,参数为整型量x1,y1,x2,y2,x3,y3,分别是三角形三个顶点的坐标。(2)带参数的构造函数,参数是三个Point类对象的引用。(3)求三角形周长。(4)求三角形面积。(5)输出三角形的三个顶点坐标、周长和面积。
定义一个普通函数:判断三个顶点坐标能否构成三角形。
main()中,从键盘输入三个点坐标,判断这三个点能否构成三角形,不能,则提示重新输入,并重新输入点坐标;能,则输出三个顶点坐标、周长和面积。
输入描述
三个点的坐标,如果不能构成三角形,再重新输入三个点的坐标
输出描述
三个顶点坐标
三角形周长、三角形面积
输入样例
0 0
1 1
2 2
0 0
5 6
3 0
输出样例
顶点坐标不正确,不能构成三角形!请重新输入坐标!
三角形三个顶点坐标为:
(0,0) (5,6) (3,0)
三角形周长为:17.1348,面积为:9
#include<iostream>
#include<cmath>
using namespace std;
class Point
{
public:
Point(int a=0,int b=0)
{
x=a;
y=b;
}
Point(const Point &a)//拷贝构造函数
{
x=a.x;
y=a.y;
}
void input()
{
cin>>x>>y;
}
int getx(int &x)
{
return x;
}
int gety(int &y)
{
return y;
}
void output()
{
cout<<"("<<x<<","<<y<<")";
}
double distance(Point &a)
{
double dx=x-a.x,dy=y-a.y;
return sqrt(dx*dx+dy*dy);
}
private:
int x,y;
};
class Triangle
{
public:
Triangle(int x1,int y1,int x2,int y2,int x3,int y3)
{
A=(x1,y1);
B=(x2,y2);
C=(x3,y3);
}
Triangle(Point &a,Point &b,Point &c)
{
A=a;
B=b;
C=c;
}
double Len()
{
return A.distance(B)+B.distance(C)+C.distance(A);
}
double Area()
{
double s=Len()/2.0;
return sqrt(s*(s-A.distance(B))*(s-B.distance(C))*(s-C.distance(A)));
}
void output()
{
cout<<endl<<"三角形周长为:"<<Len()<<",面积为:"<<Area();
}
private:
Point A,B,C;
};
bool ifTriangle(Point &p1,Point &p2,Point &p3)
{
here:
if((p1.distance(p2)+p2.distance(p3)>p3.distance(p1))&& (p1.distance(p2) + p3.distance(p1) > p2.distance(p3)) && (p2.distance(p3) + p3.distance(p1) > p1.distance(p2)))
{
cout << "三角形三个顶点坐标为:" << endl;
p1.output();
p2.output();
p3.output();
Triangle T(p1,p2,p3);
T.output();
}
else
{
cout << "顶点坐标不正确,不能构成三角形!请重新输入坐标!" << endl;
return false;
}
}
int main()
{
Point A,B,C;
here:
A.input();
B.input();
C.input();
if (ifTriangle(A, B, C) == false)
{
goto here;
}
return 0;
}
判断是否是三角形
两边之和大于第三边
或者(两边之差小于第三边)
但是要列出3个
比如
a+b>c&&a+c>b&&b+c>a
if((p1.distance(p2)+p2.distance(p3)>p3.distance(p1))&& (p1.distance(p2) + p3.distance(p1) > p2.distance(p3)) && (p2.distance(p3) + p3.distance(p1) > p1.distance(p2)))
```