6-218 平面二维点集与圆位置关系统计 (8 分)

Point类是平面二维点类:私有属性普通字段x,y(表示每个点的坐标);方法有四个:init__初始化方法(用来初始化点 坐标x,y),获取私有普通字段x,y的方法Get X与Get Y(用来获取私有普通字段x,y的值)、专有方法__Str(用格式化输出点信息)等必要的方法。

Circle类是表示平面圆类。Circle类有:私有属性普通字段center(圆心)、radius(半径),方法有三个:__init__初始化方法(用来初始化圆心、与半径)。方法GetStatistics计算该圆与二维点集的位置关系,位置关系有:“圆上、圆外、圆内”三种关系)

函数接口定义:

在这里描述定义两个完整类Point 与 类Circle:
class Point:


class Circle:

Point类是表平面二维点类,PointSet类是表平面二维点集类,需要考生完整定与实现(包括类声明语句class Point:,class Circle:)

裁判测试程序样例:


/* 您的答案将嵌入到这里 */

在这里给出类被调用进行测试的例子:
if __name__ == "__main__":
    Pointlist=[]  
    n=eval(input())  #读入整数n
    for i in range(n):  # 读入n个点
        x,y=eval(input())
        Pointlist.append(Point(x, y))
    cx,cy,r=eval(input())  #读入圆心坐标与半径
    cir=Circle(cx,cy,r) 
    Pdict=cir.GetStatistics(Pointlist)  
    print('点集为:',end='')
    for i in range(0, len(Pointlist)):  #  在一行输出各个点坐标
            print(Pointlist[i],end=' ')
    print()  #换行
    print('圆: 圆心{},半径({})'.format(cir.center,cir.radius))
    print('统计结果为:',end='')
    print(Pdict)  #输出统计的点位置关系



输入样例1:

在这里给出一组输入。例如:

1
0,1
0,0,1

输出样例1:

在这里给出相应的输出。例如:

点集为:(0,1) 
圆: 圆心(0,0),半径(1)
统计结果为:{'圆上': 1}

输入样例2:

在这里给出一组输入。例如:

6
5,5
1,2
3,4
5,0
3,2
-4,2
0,0,5

输出样例2:

在这里给出相应的输出。例如:

点集为:(5,5) (1,2) (3,4) (5,0) (3,2) (-4,2) 
圆: 圆心(0,0),半径(5)
统计结果为:{'圆外': 1, '圆内': 3, '圆上': 2}
class Point:
    count = 0
    def __init__(self, x, y):
        self.__x = x
        self.__y = y
        Point.count = Point.count + 1
    def GetX(self):
        return self.__x
    def GetY(self):
        return self.__y
    def __str__(self):
       return '('+str(self.__x)+','+str(self.__y)+')'

class Circle:
    center=()
    radius=0
    def __init__(self,cx,cy,r):
        self.__cx=cx
        self.__cy=cy
        self.__r=r
        Circle.center='('+str(cx)+','+str(cy)+')'
        Circle.radius = self.__r
    def GetStatistics(self,Pointlist):
        count1 = 0
        count2 = 0
        count3 = 0
        dic={}
        for i in range(len(Pointlist)):
            a=Pointlist[i].GetX()
            b=Pointlist[i].GetY()
            rad=(self.__r)*(self.__r)
            x=(self.__cx-a)*(self.__cx-a)+(self.__cy-b)*(self.__cx-b)
            if x>rad:
                count1+=1
                while count1==1:
                    dic["圆外"]=count1
                    break
            elif x<rad:
                count2+=1
                while count2==1:
                    dic["圆内"]=count2
                    break
            else:
                count3+=1
                while count3==1:
                    dic["圆上"]=count3
                    break
        if "圆外"in dic:
            dic["圆外"]=count1
        if "圆内"in dic:
            dic["圆内"]=count2
        if "圆上"in dic:
            dic["圆上"]=count3
        return dic

猜你喜欢

转载自blog.csdn.net/qq_51309939/article/details/118685266