与圆心相连的直线

来源:互联网 发布:java接口的实现 编辑:程序博客网 时间:2024/05/17 08:56
/** 程序的版权和版本声明部分* Copyright (c)2014, 烟台大学计算机学院学生* All rightsreserved.* 文件名称: fibnacci.cpp* 作    者:高古尊* 完成日期:2014年5月26日* 版本号: v1.0** 输入描述:* 问题描述:* 程序输出:* 问题分析:*/#include <iostream>#include <Cmath>using namespace std;class Point{private:    double x,y;public:    Point():x(0),y(0) {};    Point(double x1,double y1):x(x1),y(y1) {};    double getx()    {        return x;    };    double gety()    {        return y;    };    friend ostream &operator<<(ostream&,Point);    ~Point() {};};ostream &operator<<(ostream&out,Point p){    out<<'('<<p.getx()<<','<<p.gety()<<')';    return out;}class Circle:public Point{private:    double r;public:    Circle():Point(0,0),r(0) {};    Circle(double x1,double y1,double r1):Point(x1,y1),r(r1) {};    double getr()    {        return r;    };    ~Circle() {};};int locate(Point p,Circle c){    if(((p.getx()-c.getx())*(p.getx()-c.getx())+(p.gety()-c.gety())*(p.gety()-c.gety())-c.getr()*c.getr())<1e-8)    {        return 0;    }    else    {        return (p.getx()-c.getx())*(p.getx()-c.getx())+(p.gety()-c.gety())*(p.gety()-c.gety())>c.getr()*c.getr()?1:-1;    }}ostream &operator<<(ostream&out,Circle c){    out<<'('<<c.getx()<<','<<c.gety()<<','<<c.getr()<<')';    return out;}int main( ){    char ch;    double x,y,r;    cout<<"请输入点p的坐标:";    cin>>ch>>x>>ch>>y>>ch;    Point p(x,y);    cout<<"圆c的圆心坐标和半径:";    cin>>ch>>x>>ch>>y>>ch>>r;    Circle c(x,y,r);    double x1,y1,x2,y2;    x1=c.getx()-sqrt(pow(c.getr(),2)/(1+pow((c.gety()-p.gety())/(c.getx()-p.getx()),2)));    x2=c.getx()+sqrt(pow(c.getr(),2)/(1+pow((c.gety()-p.gety())/(c.getx()-p.getx()),2)));    y1=(c.gety()-p.gety())/(c.getx()-p.getx()*(x1-p.getx())+p.gety());    y2=(c.gety()-p.gety())/(c.getx()-p.getx()*(x2-p.getx())+p.gety());    Point p1(x1,y1),p2(x2,y2);    cout<<"直线与圆的两个交点";    cout<<p1<<' '<<p2<<endl;    return 0;}

0 0
原创粉丝点击