python计算能够包含两个圆的最小圆
生活随笔
收集整理的這篇文章主要介紹了
python计算能够包含两个圆的最小圆
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
給定兩個圓的圓心和半徑,計算能夠包含兩個圓的最小圓
# 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)?
總結(jié)
以上是生活随笔為你收集整理的python计算能够包含两个圆的最小圆的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 隧道计算
- 下一篇: 采用递归与栈结合的方式实现迷宫分析与走迷