第12周项目4—点、圆的关系
来源:互联网 发布:obs点歌软件 编辑:程序博客网 时间:2024/05/11 18:30
问题及代码:
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:李盈盈 * 完成日期:2015年 05 月 24 日 * 版 本 号:v1.0 * * 问题描述:先建立一个Point(点)类,以Point为基类,派生出一个Circle(圆)类,定义友元函数int locate,判断点p与圆的位置关系。 * 输入描述:无 * 程序输出:按要求输出。 */#include <iostream>#include <cmath>using namespace std;class Circle;class Point{protected: double x; double y;public: Point(double xx=0,double yy=0); double distance(const Point &p2)const ; friend ostream & operator<<(ostream &,const Point &); friend void crossover_point(Point &p,Circle &c, Point &p1,Point &p2 ) ;};Point::Point(double xx,double yy){ x=xx; y=yy;}double Point::distance(const Point &p)const{ double dx = x-p.x; double dy = y-p.y; return sqrt(dx*dx+dy*dy);}ostream & operator<<(ostream &output,const Point &p){ output<<"["<<p.x<<","<<p.y<<"]"<<endl; return output;}class Circle:public Point{protected: double x; double y; double z;public: Circle(double xx=0,double yy=0,double zz=0); friend ostream &operator<<(ostream &,const Circle &); friend int locate(const Point &p, const Circle &c); double area()const; bool operator>(const Circle &); bool operator<(const Circle &); bool operator>=(const Circle &); bool operator<=(const Circle &); bool operator==(const Circle &); bool operator!=(const Circle &); friend void crossover_point(Point &p,Circle &c, Point &p1,Point &p2 ) ;};Circle::Circle(double xx,double yy,double zz):Point(xx,yy){ z=zz;}ostream &operator<<(ostream &output,const Circle &c){ output<<"Center=["<<c.x<<", "<<c.y<<"], r="<<c.z<<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.z) < 1e-7) return 0; //相等 else if (d < c.z) return -1; //圆内 else return 1; //圆外}bool Circle::operator>(const Circle &c){ return (this->z-c.z)>1e-7;}bool Circle::operator<(const Circle &c){ return (c.z-this->z)>1e-7;}bool Circle::operator>=(const Circle &c){ return !(*this<c);}bool Circle::operator<=(const Circle &c){ return !(*this>c);}bool Circle::operator==(const Circle &c){ return abs(this->z - c.z) < 1e-7;}bool Circle::operator!=(const Circle &c){ return abs(this->z - c.z) > 1e-7;}double Circle::area()const{ return 3.14*z*z;}void crossover_point(Point &p, Circle &c, Point &p1,Point &p2 ){ p1.x = (c.x + sqrt(c.z*c.z/(1+((c.y-p.y)/(c.x-p.x))*((c.y-p.y)/(c.x-p.x))))); p2.x = (c.x - sqrt(c.z*c.z/(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 c1(3,2,4),c2(4,5,5); //c2应该大于c1 Point p1(1,1),p2(3,-2),p3(7,3),p4,p5; //分别位于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<<"圆c1( "<<c1<<" )的面积是 "<<c1.area()<<endl; cout<<"圆c2( "<<c2<<" )的面积是 "<<c2.area()<<endl; cout<<"圆c1 "; if(c1>c2) cout<<"大于, "; if(c1<c2) cout<<"小于, "; if(c1>=c2) cout<<"大于等于, "; if(c1<=c2) cout<<"小于等于, "; if(c1==c2) cout<<"等于, "; if(c1!=c2) cout<<"不等于, "; cout<<"圆c2"<<endl; crossover_point(p1,c1, p4, p5); cout<<"点p1: "<<p1<<endl; cout<<"与圆c1: "<<c1<<endl; cout<<"的圆心相连,与圆交于两点,分别是:"<<endl; cout<<"交点1: "<<p4<<endl; cout<<"交点2: "<<p5<<endl; return 0;}
运行结果:
0 0
- 第12周项目4—点、圆的关系
- 第12周项目4-点、圆的关系
- 第12周项目-4、点、圆的关系
- 第12周项目4-圆与点的关系
- 第12周项目4-点、圆的关系
- 第12周项目4 - 点、圆的关系
- 第12周 项目4 点、圆的关系
- 第12周上机实践项目4——点、圆的关系(2)
- 第11周项目4-1点圆的关系
- 第12周 项目四-点、圆关系(4)
- 第12周 【项目4 - 点、圆的关系】(1)
- 第12周 【项目4 - 点、圆的关系】(2)
- 第12周 【项目4 - 点、圆的关系】(3)
- 第12周项目4-点、圆的关系(1)
- 第12周项目4-点、圆的关系(2)
- 第12周项目4-点和圆的关系(2)
- 第12周项目4-点和圆的关系(3)
- 第12周上机实践项目4——点、园的关系(1)
- zeromq札记---python
- 如何破解(免积分)下载百度文库+豆丁收费文档
- oracle学习之asm实例的数据库启动方式
- 机器学习之Transforming Auto-encoders
- 第十一周项目一 是春哥啊
- 第12周项目4—点、圆的关系
- delete和delete[] 区别(2)
- windows下安装elasticsearch
- Volley源码学习——打造网络通信框架
- android解析一个本地txt文件
- 2015 百度之星(资格)1004
- Qt 线程基础(QThread、QtConcurrent等)
- jsp include标签使用
- 数码管显示