Python-矩形和圆形

时间秒杀一切 提交于 2019-12-04 05:51:29

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))

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!