欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python计算能够包含两个圆的最小圆

发布时间:2025/3/19 python 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 python计算能够包含两个圆的最小圆 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

给定两个圆的圆心和半径,计算能够包含两个圆的最小圆

# Defines two classes, Point() and Disk(). # The latter has an "area" attribute and three methods: # - change_radius(r) # - intersects(disk), that returns True or False depending on whether # the disk provided as argument intersects the disk object. # - absorb(disk), that returns a new disk object that represents the smallest # disk that contains both the disk provided as argument and the disk object. # # Written by kangyuchengfrom math import pi, hypotclass Point:def __init__(self, x = 0, y = 0):self.x = xself.y = ydef __repr__(self):return f'Point({self.x:.2f}, {self.y:.2f})'class Disk:area = 0.00r = 0.00centre = Point()def __init__(self, **kwargs):radius = kwargs.get("radius")centre = kwargs.get("centre")if radius is not None:self.area = radius * radius * piself.r = radiusif centre is not None:self.centre = centredef change_radius(self,r):self.r = rself.area = r * r * pidef intersects(self, disk):l = self.r + disk.rx = self.centre.x - disk.centre.xy = self.centre.y - disk.centre.yd = hypot(x,y)if d <= l:return Trueelse:return Falsedef absorb(self, disk):x = 0.00 # 新圆的圆心 xy = 0.00 # 新圆的圆心 yr = 0.00 # 新圆的半径 rd = hypot(self.centre.x - disk.centre.x, self.centre.y - disk.centre.y) # 两圆的圆心距离if d < max(self.r, disk.r) - min(self.r, disk.r): # 大圆包含小圆if self.r > disk.r:r = self.rx = self.centre.xy = self.centre.yelse:r = disk.rx = disk.centre.xy = disk.centre.yelse: # 两圆不互相包含r = (self.r + disk.r + d) / 2.00d1 = r-self.rd2 = r-disk.rx = self.centre.x-d1*(self.centre.x-disk.centre.x)/(d1+d2)y = self.centre.y-d1*(self.centre.y-disk.centre.y)/(d1+d2)return Disk(centre = Point(x, y), radius = r )def __repr__(self):return f'Disk({self.centre}, {self.r:.2f})' #测试# disk_1 = Disk() # print(disk_1.area) # disk_2 = Disk(centre = Point(3, 0), radius = 4) # print(disk_2.area) # print(disk_1.intersects(disk_2)) # print( disk_2.intersects(disk_1) ) # disk_1.change_radius(2) # disk_4 = Disk(centre=Point(-4, 0), radius=2) # print(disk_4.intersects(disk_1)) # disk_5 = disk_4.absorb(disk_1) # disk_5.change_radius(5) # print(disk_5) # disk_6 = Disk(centre = Point(1, 2), radius = 6) # disk_7 = disk_5.absorb(disk_6) # print(disk_7.area ) # disk_8 = Disk() # disk_8.change_radius(7)

 

总结

以上是生活随笔为你收集整理的python计算能够包含两个圆的最小圆的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。