第十二周实验报告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;
}
 

圆c1: 以(3,2)为圆心,半径为 4的圆 点p1: (1,1) 点p1在圆c1之外 点p2: (3,-2) 点p2在圆c1之上 点p3: (7,3) 点p3在圆c1之内

圆c1: 以(3,2)为圆心,半径为 4的圆 小于 小于等于 不等于 圆c2: 以(4,5)为圆心,半径为 5的圆

点p1: (1,1) 与圆c1: 以(3,2)为圆心,半径为 4的圆 的圆心相连,与圆交于两点,分别是: 交点: (6.57771,3.78885) 交点: (-0.577709,0.211146)

请按任意键继续. . .


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值