问题及代码:
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:Project4.cpp
* 作 者:陈旭
* 完成日期:2015年6月 4日
* 版 本 号:v1.0
*
* 问题描述:点,圆关系
* 输入描述:略
* 程序输出:略
*/
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
protected:
double x;
double y;
public:
Point(double a=0,double b=0)
{
x=a;
y=b;
};
double distance(const Point &p) const;
friend ostream & operator<<(ostream &,const Point &);
};
double Point::distance(const Point &p) const
{
double px=x-p.x;
double py=y-p.y;
return sqrt(px*px+py*py);
}
ostream &operator<<(ostream &output,const Point &p)
{
output<<"["<<p.x<<","<<p.y<<"]"<<endl;
return output;
}
class Circle:public Point
{
private:
double r;
public:
Circle(double a=0,double b=0,double c=0):Point(a,b),r(c) {};
friend ostream & operator<<(ostream &,const Circle &);
friend int locate(const Point &p,const Circle &c);
};
ostream &operator<<(ostream &output,const Circle &c)
{
output<<"Center=["<<c.x<<","<<c.y<<"],r="<<c.r<<endl;
return output;
}
int locate(const Point &p,const Circle &c)
{
const Point cp(c.x,c.y);
double d=cp.distance(p);
if(abs(d - c.r) < 1e-7)
return 0; //相等
else if (d < c.r)
return -1; //圆内
else
return 1; //圆外
}
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;
return 0;
}
运行结果:
本文探讨了点与圆之间的距离计算,并通过实例展示了如何判断点相对于圆的位置(内部、外部或上部)。通过具体代码实现,清晰阐述了算法逻辑。
1278

被折叠的 条评论
为什么被折叠?



