scientific-programming-exer.../ex_04.py

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