point.h
#include<iostream>
#include<math.h>
#include<string>
#include"Shape.h"
#include<string.h>
using namespace std;
class Point: public Shape
{
static int count;
float x, y;
public:
Point(float a=0,float b=0,int o=0, string s=""):Shape(o, s), x(a),y(b){}
Point(const Point&in):Shape(in), x(in.x),y(in.y){}
float GetX() const{return x;}
float GetY() const{return y;}
float PutX (float a){x=a;}
float PutY (float b){y=b;}
static void fun(){count++;}
virtual float Area(){return 0;}
virtual void WriteToFile(ofstream &o)
{
count=0;
o<<getobj()<<"( "<<x<<","<<y<<")"<<getdes()<<endl;
fun();
}
//实现任务六,将数据写入到Point2.txt里面
//实现任务六里面的Point排序问题
friend bool operator<(const Point& p1,const Point& p2)
{
if(p1.x<p2.x)
return true;
else if(p1.x==p2.x&&p1.y<p2.y)
return true;
else
return false;
}//判断两个Point对象的大小
friend Point operator+(Point &p1,Point &p2)
{
Point p3;
p3.x=p1.x+p2.x;
p3.y=p1.y+p2.y;
return p3;
}
friend float Distance(Point &p1,Point &p2)
{
double distance;
distance=(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);
return sqrt(distance);
}
//④ 类 Point 实现成员函数 Distance_R(),求解 Point 对象和 Rect 对象之间的距离(最近的两点之间的距离);
friend float Distance_R(Point& p,Point& r1,Point &r2)
{
float distancemin1,distancemin2;
distancemin1=(p.x-r1.x)*(p.x-r1.x)+(p.y-r1.y)*(p.y-r1.y);
distancemin2=(p.x-r2.x)*(p.x-r2.x)+(p.y-r2.y)*(p.y-r2.y);
if(distancemin1>distancemin2)
{
return sqrt(distancemin2);
}
else
return sqrt(distancemin1);
}
//类 Point 实现成员函数 Distance_L(),求解 Point 对象和Line 对象之间的距离(最近的两点之间的距离)
friend float Distance_L(Point& p,Point& r1,Point& r2)
{
float distancemin1,distancemin2;
distancemin1=(p.x-r1.x)*(p.x-r1.x)+(p.y-r1.y)*(p.y-r1.y);
distancemin2=(p.x-r2.x)*(p.x-r2.x)+(p.y-r2.y)*(p.y-r2.y);
if(distancemin1>distancemin2)
{
return sqrt(distancemin2);
}
else
return sqrt(distancemin1);
}
};
int Point::count = 0;
ostream& operator<<(ostream &o,Point &c)
{
o<<c.getobj()<<'\t'<<c.GetX()<<'\t'<<c.GetY()<<'\t'<<c.getdes()<<endl;
return o;
};
Line.h
#include<iostream>
#include<string>
#include"Rect.h"
#include<iomanip>
using namespace std;
class Line:public Shape
{
Point p1;//左下角
Point p2;//右上角
double len;
static int count;
public:
Line(float x1=0,float y1=0,float x2=0,float y2=0,int o=0,double l=0,string s=""):Shape(o,s),p1(x1,y1),p2(x2,y2),len(l){}
virtual float Area(){return len;}
float Getp1_x() const{return p1.GetX();}
float Getp1_y() const{return p1.GetY();}
float Getp2_x() const{return p2.GetX();}
float Getp2_y() const{return p2.GetY();}
Point Getp1(){return p1;}
Point Getp2(){return p2;}
static void fun(){count++;}
virtual void WriteToFile(ofstream &o)
{
count=0;
o<<getobj()<<setw(5)<<"("<<p1.GetX()<<","<<p1.GetY()<<") ("<<p2.GetX()<<","<<p2.GetY()<<") "<<len<<" "<<getdes()<<endl;
fun();
}
bool operator<( const Line& in)const
{
if(len<in.len)
return true;
else
return false;
}
/*friend bool operator<(Rect re1,Rect re2)
{
string des1,des2;
des1=re1.getdes();
des2=re2.getdes();
if(des1<des2)
return true;
else
return false;
}*/
friend float Distance (Line &l1,Line &l2)
{
double distancemin;
double rdistance[5];
rdistance[0]=(l1.Getp1_x()-l1.Getp2_x())*(l1.Getp1_x()-l1.Getp2_x())+(l1.Getp1_y()-l1.Getp1_y())*(l1.Getp1_y()-l1.Getp1_y());
rdistance[1]=(l2.Getp1_x()-l2.Getp2_x())*(l2.Getp1_x()-l2.Getp2_x())+(l2.Getp1_y()-l2.Getp1_y())*(l2.Getp1_y()-l2.Getp1_y());
rdistance[2]=(l1.Getp1_x()-l2.Getp2_x())*(l1.Getp1_x()-l2.Getp2_x())+(l1.Getp1_y()-l2.Getp2_y())*(l1.Getp1_y()-l2.Getp2_y());
rdistance[3]=(l1.Getp1_x()-l2.Getp1_x())*(l1.Getp1_x()-l2.Getp1_x())+(l1.Getp1_y()-l2.Getp2_y())*(l1.Getp1_y()-l2.Getp1_y());
rdistance[4]=(l1.Getp2_x()-l2.Getp2_x())*(l1.Getp2_x()-l2.Getp2_x())+(l1.Getp2_y()-l2.Getp1_y())*(l1.Getp2_y()-l2.Getp2_y());
rdistance[5]=(l1.Getp2_x()-l2.Getp1_x())*(l1.Getp2_x()-l2.Getp1_x())+(l1.Getp2_y()-l2.Getp1_y())*(l1.Getp2_y()-l2.Getp1_y());
distancemin=rdistance[0];
for(int i=0;i<6;i++)
{
if(distancemin>rdistance[i])
distancemin=rdistance[i];
else
continue;
}
return sqrt(distancemin);
}
};
int Line::count=0;
ostream& operator<<(ostream& o,Line &c)
{
o<<c.getobj()<<' ';
o<<c.Getp1_x()<<' '<<c.Getp1_y()<<' '<<c.Getp2_x()<<' '<<c.Getp2_y()<<' '<<c.Area()<<endl;
}
Point.h
#include<iostream>
#include<math.h>
#include<string>
#include"Shape.h"
#include<string.h>
using namespace std;
class Point: public Shape
{
static int count;
float x, y;
public:
Point(float a=0,float b=0,int o=0, string s=""):Shape(o, s), x(a),y(b){}
Point(const Point&in):Shape(in), x(in.x),y(in.y){}
float GetX() const{return x;}
float GetY() const{return y;}
float PutX (float a){x=a