13.3

来源:互联网 发布:巫师3a卡优化 编辑:程序博客网 时间:2024/06/04 18:44

 

#include <iostream>#include <Cmath>using namespace std;class Circle;class Point{    public:    Point(double xx=0,double yy=0):x(xx),y(yy){}    friend ostream &operator<<(ostream &,const Point &);    friend void crossover_point(Point &p, Circle &c, Point &p1,Point &p2);    protected:    double x,y;};ostream &operator<<(ostream &output,const Point & c){    output<<"("<<c.x<<","<<c.y<<")"<<endl;    return output;}class Circle:public Point{    public:    Circle(double xx=0,double yy=0,double r=0):Point(xx,yy),R(r){}    friend ostream & operator<<(ostream &,const Circle &);    friend void crossover_point(Point &p, Circle &c, Point &p1,Point &p2);    protected:    double R;    };ostream &operator<<(ostream &output,const Circle &c){    output<<"圆心为:("<<c.x<<","<<c.y<<")"<<"半径为:"<<c.R<<endl;    return output;}void crossover_point(Point &p, Circle &c, Point &p1,Point &p2 ){    p1.x = (c.x + sqrt(c.R*c.R/(1+((c.y-p.y)/(c.x-p.x))*((c.y-p.y)/(c.x-p.x)))));    p2.x = (c.x - sqrt(c.R*c.R/(1+((c.y-p.y)/(c.x-p.x))*((c.y-p.y)/(c.x-p.x)))));    p1.y = (p.y + (p1.x -p.x)*(c.y-p.y)/(c.x-p.x));    p2.y = (p.y + (p2.x -p.x)*(c.y-p.y)/(c.x-p.x));}int main(){    Circle c(3,2,4);    Point p1(1,1),p2,p3;    crossover_point(p1,c, p2, p3);    cout<<"点p1"<<p1;    cout<<"与圆c"<<c<<"的圆心相交于圆c的两点分别是:"<<p2<<","<<p3<<endl;    return 0;}

求得的交点如何返回,不是太懂!

0 0
原创粉丝点击