Exercise 15.1. 定义一个叫做Circle 类,类的属性是圆心 (center) 和半径 (radius) , 其中,
圆心 (center) 是一个 Point 类,而半径 (radius) 是一个数字。
实例化一个圆心 (center) 为 (150, 100) ,半径 (radius) 为 75 的Circle 对象。
1、编写一个名称为point_in_circle 的函数,该函数可以接受一个圆类 (Circle) 对象和点类
(Point) 对象,然后判断该点是否在圆内。在圆内则返回True 。
2、编写一个名称为rect_in_circle 的函数,该函数接受一个圆类 (Circle) 对象和矩形
(Rectangle) 对象,如果该矩形是否完全在圆内或者在圆上则返回True 。
3、编写一个名为rect_circle_overlap 函数,该函数接受一个圆类对象和一个矩形类对象,如
果矩形有任意一个角落在圆内则返回True 。或者写一个更具有挑战性的版本,如果该矩
形有任何部分落在圆内返回True 。
#######15.9 p175import mathclass Circle: # """ This is a circle Class, incude Center and radius """class Point: """ This is a point """class Rectangle(): """ This is a 矩形 """radius=Circle()radius.x=75.0center=Circle()center.box=Point()center.box.x=150.0center.box.y=100.0##矩形box=Rectangle()box.wei=100.0box.hei=100.0box.point=Point()#计算点到圆心的距离def point_in_len(x,y): b=math.sqrt((x-center.box.x)**2+(y-center.box.y)**2) return b#计算点是否在圆内def point_in_circle(x,y): b=point_in_len(x,y) if b <=radius.x: print( b) return True else: return False##计算矩形全部在圆内def rect_in_circle(x,y): x1=x+box.wei y1=y+box.hei b1=math.sqrt((x-center.box.x)**2+(y-center.box.y)**2) b2= math.sqrt((x1-center.box.x)**2+(y-center.box.y)**2) b3= math.sqrt((x-center.box.x)**2+(y1-center.box.y)**2) b4=math.sqrt(box.wei**2+box.hei**2) if b4 <=radius.x: if b1<=radius.x and b2<=radius.x and b3<=radius.x: return True else: return False else: return Falsedef rect_circle_overlap(x,y): ### #算如果矩形在圆形的一部分就返回Ture, #原理:比对在矩形的范围内所有的点,是否有到圆心的距离,小于半径的 ###原理:如果有符合的就计数+1 ##并计算 计数是否大于1,如果大于1,则认为矩形有点是在圆形中 x2=int(x) x3=x2+int(x+box.wei) y2=int(y) y3=y2+int(y+box.hei) count=0 for x1 in range(x2,x3): for y1 in range(y2,y3): len1=math.sqrt((x1-center.box.x)**2+(y1-center.box.y)**2) if len1 >radius.x: count=count+0 else: count+=1 if count >=1: return Truepoint=Point()point.x=90.0point.y=90.0print(point_in_circle(point.x,point.y))###矩形box.point.x=160.0box.point.y=100.0###计算矩形是否全部包含在圆形内print(rect_in_circle(box.point.x,box.point.y))##计算矩形是否有部分在圆形内print(rect_circle_overlap(box.point.x,box.point.y))