66 lines
1.5 KiB
Python
66 lines
1.5 KiB
Python
#!/usr/bin/python3
|
|
|
|
from util.io import readvalue
|
|
|
|
def positive_float(v):
|
|
x = float(v)
|
|
if(x <= 0):
|
|
raise ValueError("{} is a non-positive float".format(v))
|
|
return x
|
|
|
|
|
|
class Circle(object):
|
|
__slots__ = ["x", "y", "radius"]
|
|
|
|
def __init__(self, x, y, radius):
|
|
self.x = x
|
|
self.y = y
|
|
self.radius = radius
|
|
|
|
def has_intersection(self, other):
|
|
if(not isinstance(other, Circle)):
|
|
raise TypeError("cannot calculate intersection of Circle and {}".format(type(other)))
|
|
|
|
distance = ((self.x - other.x)**2 + (self.y - other.y)**2)**0.5
|
|
if(distance < self.radius + other.radius):
|
|
return True
|
|
return False
|
|
|
|
def __contains__(self, other):
|
|
if(not isinstance(other, Circle)):
|
|
raise TypeError("cannot calculate wether {} is in Circle".format(type(other)))
|
|
|
|
distance = ((self.x - other.x)**2 + (self.y - other.y)**2)**0.5
|
|
|
|
if(other.radius + distance < self.radius):
|
|
return True
|
|
return False
|
|
|
|
@staticmethod
|
|
def read_Circle():
|
|
radius = readvalue("radius> ", positive_float)
|
|
x = readvalue("x> ", float)
|
|
y = readvalue("y> ", float)
|
|
|
|
return Circle(x, y, radius)
|
|
|
|
|
|
if( __name__ == "__main__"):
|
|
print("Create Circle 1:")
|
|
c1 = Circle.read_Circle()
|
|
print("Create Circle 2:")
|
|
c2 = Circle.read_Circle()
|
|
|
|
print("\n")
|
|
|
|
if(c1.has_intersection(c2)):
|
|
print("The two circles have an intersection.")
|
|
else:
|
|
print("The two circles have no intersection.")
|
|
|
|
if(c2 in c1):
|
|
print("Circle 1 contains Circle 2")
|
|
if(c1 in c2):
|
|
print("Circle 2 contains Circle 1")
|
|
|