第十二周实验报告4

来源:互联网 发布:程序编辑软件 编辑:程序博客网 时间:2024/05/16 07:23
#include<iostream>#include<Cmath>#include<iomanip>using namespace std;class Point {public:Point(){x = 0; y = 0;}Point(double x0,double y0) {x = x0; y = y0;}~Point(){}double getx(){return x;}double gety(){return y;}friend ostream & operator << (ostream &, Point &);double x, y;  };  class Circle: public Point {public:Circle(){radii = 0;}Circle(double x0, double y0, double r);  ~Circle(){};friend int locate(Point p1, Circle c1);double Length(Point p1, Point p2);friend ostream & operator << (ostream &, Circle &);friend bool operator > (Circle & c1, Circle & c2);friend bool operator < (Circle & c1, Circle & c2);friend bool operator >= (Circle & c1, Circle & c2);friend bool operator <= (Circle & c1, Circle & c2);friend bool operator == (Circle & c1, Circle & c2);friend bool operator != (Circle & c1, Circle & c2);friend void crossover_point1(Point & p1, Circle & c1, Point & p4, Point & p5);protected:double radii;};Circle::Circle(double x0, double y0, double r):Point(x0, y0),radii(r){}void crossover_point1(Point & p1, Circle & c1, Point & p4, Point & p5){double x0 = (c1.x - p1.x) * c1.radii / sqrt((c1.x - p1.x) * (c1.x - p1.x) + (c1.y - p1.y) * (c1.y - p1.y));double y0 = (c1.y - p1.y) * c1.radii / sqrt((c1.x - p1.x) * (c1.x - p1.x) + (c1.y - p1.y) * (c1.y - p1.y));p4.x = c1.x + x0;p4.y = c1.y + y0;p5.x = c1.x - x0;p5.y = c1.y - y0;}int locate(Point p1, Circle c1){double length = sqrt((p1.x - c1.x) * (p1.x - c1.x) + (p1.y - c1.y) * (p1.y - c1.y));if(length < c1.radii){return 1;}else if(length == c1.radii){return 0;}else{return -1;}}ostream & operator << (ostream & out, Point & p){out << "(" << p.x << "," << p.y << ")" << endl;return out;}ostream & operator << (ostream & out, Circle & c){out << "以" << "(" << c.x << "," << c.y << ")为圆心," << "半径为 " << c.radii << "的圆 " << endl;return out;}bool operator > (Circle & c1, Circle & c2){if(c1.radii > c2.radii){return true;}else{return false;}}bool operator < (Circle & c1, Circle & c2){if(c1.radii < c2.radii){return true;}else{return false;}}bool operator >= (Circle & c1, Circle & c2){if(c1.radii >= c2.radii){return true;}else{return false;}}bool operator <= (Circle & c1, Circle & c2){if(c1.radii <= c2.radii){return true;}else{return false;}}bool operator == (Circle & c1, Circle & c2){if(c1.radii == c2.radii){return true;}else{return false;}}bool operator != (Circle & c1, Circle & c2){if(c1.radii != c2.radii){return true;}else{return false;}}int main( ){Circle c1(3, 2, 4), c2(4, 5, 5);      //c2应该大于c1Point p1(1, 1), p2(3, -2), p3(7, 3);  //分别位于c1内、上、外cout << "圆c1: " << c1;cout << "点p1: " << p1;cout << "点p1在圆c1之" << ((locate(p1, c1)>0)? "外" :((locate(p1, c1)<0)? "内" : "上" )) << endl;cout << "点p2: " << p2;cout << "点p2在圆c1之" << ((locate(p2, c1)>0)? "外" :((locate(p2, c1)<0)? "内" : "上" )) << endl;cout << "点p3: " << p3;cout << "点p3在圆c1之" << ((locate(p3, c1)>0)? "外" :((locate(p3, c1)<0)? "内" : "上" )) << endl;cout << endl; cout << "圆c1: " << c1;if(c1 > c2){cout << "大于" << endl;}if(c1 < c2){ cout << "小于" << endl; }if(c1 >= c2){cout << "大于等于" << endl;}if(c1 <= c2){cout << "小于等于" << endl; }if(c1 == c2){cout << "等于" << endl; }if(c1 != c2){cout << "不等于" << endl; }cout << "圆c2: " << c2;cout << endl; Point p4, p5;crossover_point1(p1, c1, p4, p5);cout << "点p1: " << p1;cout << "与圆c1: " << c1;cout << "的圆心相连,与圆交于两点,分别是:" << endl;cout << "交点: " << p4;cout << "交点: " << p5;cout << endl; system("pause");return 0;}
 

圆c1: 以(3,2)为圆心,半径为 4的圆点p1: (1,1)点p1在圆c1之外点p2: (3,-2)点p2在圆c1之上点p3: (7,3)点p3在圆c1之内

圆c1: 以(3,2)为圆心,半径为 4的圆小于小于等于不等于圆c2: 以(4,5)为圆心,半径为 5的圆

点p1: (1,1)与圆c1: 以(3,2)为圆心,半径为 4的圆的圆心相连,与圆交于两点,分别是:交点: (6.57771,3.78885)交点: (-0.577709,0.211146)

请按任意键继续. . .


原创粉丝点击