12周任务4

#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应该大于c1  
    Point 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;  
}  



运行结果:




感言:大的程序无外乎一个个小地程序,不想被落下,哎。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值