Python计算,指定半径内,有多少个完整的正方形和不完整的

题目:
如下图所示:有一个无限大的方块矩阵,每个方块边长为1,给出一个半径,计算出该半径的圆内,有多少个完整的方块和不完整的方块。

Python计算,指定半径内,有多少个完整的正方形和不完整的
文章图片
image.png 思路1:
【Python计算,指定半径内,有多少个完整的正方形和不完整的】计算出每个点距离各自顶点方块四个点的距离,所有距离小于半径,则是完整的方块。若最大距离大于半径并且最小距离小于半径,则是不完整的方块。
给出代码:

from math import ceil, hypot#计算距离 def getMaxAndMinDistances(radius): radius = int(ceil(radius)) distances = [] for row in range(radius): for col in range(radius): temp = [hypot(row - radius, col - radius), hypot(row - radius, radius - col - 1), hypot(radius - row - 1, radius - col), hypot(radius - row - 1, radius - col - 1)] distances.append((min(temp), max(temp))) return distancesdef checkio(radius): distances = getMaxAndMinDistances(radius) #过滤掉不符合的元素 solid = len(list(filter(lambda x: x[1] < radius, distances))) partial = len(list(filter(lambda x: x[1] > radius > x[0], distances))) #上面只计算了一个象限,*4既是所有的结果 return [solid * 4, partial * 4]if __name__ == '__main__': checkio(2)# 结果是: [4, 12]

思路2:
计算出每个点距离圆心的长度,如果小于半径,则在圆内。
代码:
def check2(radius): ran, solid, total = range(int(radius)+1),0,0 for x in ran: for y in ran: #1j表示复数 solid+=abs(x+y*1j+1+1j)<=radius total+=abs(x+y*1j)

    推荐阅读