python画正方形内切圆_Python计算,指定半径内,有多少个完整的正方形和不完整的...

题目:

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

8072514a82e7

image.png

思路1:

计算出每个点距离各自顶点方块四个点的距离,所有距离小于半径,则是完整的方块。若最大距离大于半径并且最小距离小于半径,则是不完整的方块。

给出代码:

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 distances

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

return [solid*4,(total-solid)*4]

if __name__ == '__main__':

assert checkio(2) #结果 [4, 12]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值