I'm trying to check if a circle is contained within another circle. I'm not sure if the math behind it is the problem or if its my if statement because I keep getting True
for anything I pass.
#Get_center returns (x,y)
#Get_radius returns radius length
def contains(self,circle):
distance = round(math.sqrt((circle.get_center()[0]-self.get_center()[0])**2 + (circle.get_center()[1] - self.get_center()[1])**2))
distance_2 = distance + circle.get_radius()
if distance_2 > distance:
return True #Circle 2 is contained within circle 1
You have
distance_2 = distance + circle.get_radius()
, sodistance_2
will always be higher thandistance
anddistance_2 > distance
will always be true.I don't know about python but the math is simple. See the below picture
To check if circle 2 inside circle 1,
If you want strict containment, that means that the absolute value of the difference of radii will be less than the distance between centers. You can exploit that in order to avoid taking square root (because squares of two positive numbers will have the same order as the numbers themselves):
Btw, just as a style note, there is no need to write getters and setters in Python. You can just have fields and if you need to modify how they are accessed, you can override it later on (without effecting any of the classes which access them).
Making this easy from the earliest versions (maybe even from the start) was one of the reasons Python was so appealing and managed to take off. Python code tends to be very short because of this. So you don't lose sight of the forest for the trees.