# ball_collide.py
# MIT OCW 6.189 Homework 3
# http://o...content-available-to-author-only...t.edu/courses/electrical-engineering-and-computer-science/6-189-a-gentle-introduction-to-programming-using-python-january-iap-2011/assignments/MIT6_189IAP11_hw3.pdf
# Written for Python 3.x
# Mechanical MOOC
# Glenn Richard
# July 20, 2013
# ********** Exercise 3.2 **********
import math
class Ball():
def __init__(self, x, y, r):
self.x = x
self.y = y
self.r = r
def __str__(self):
return "Ball(x: " + str(self.x) + ", y: " + str(self.y) + ", r: " + str(self.r) + ")"
# Define your function here
def ball_collide(b1, b2):
##### YOUR CODE HERE #####
sum_radii = b1.r + b2.r
dist = math.sqrt((b1.x - b2.x) ** 2 + (b1.y - b2.y) ** 2)
return dist <= sum_radii
# Test Cases for Exercise 3.2
b1 = Ball(0, 0, 1)
b2 = Ball(3, 3, 1)
b3 = Ball(5, 5, 2)
b4 = Ball(2, 8, 3)
b5 = Ball(7, 8, 2)
b6 = Ball(4, 4, 3)
print(str(b1) + " and " + str(b2) + " " + str(ball_collide(b1, b2))) # Should be False
print(str(b3) + " and " + str(b4) + " " + str(ball_collide(b3, b4))) # Should be True
print(str(b5) + " and " + str(b6) + " " + str(ball_collide(b5, b6))) # Should be True
IyBiYWxsX2NvbGxpZGUucHkKIyBNSVQgT0NXIDYuMTg5IEhvbWV3b3JrIDMKIyBodHRwOi8vby4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udC5lZHUvY291cnNlcy9lbGVjdHJpY2FsLWVuZ2luZWVyaW5nLWFuZC1jb21wdXRlci1zY2llbmNlLzYtMTg5LWEtZ2VudGxlLWludHJvZHVjdGlvbi10by1wcm9ncmFtbWluZy11c2luZy1weXRob24tamFudWFyeS1pYXAtMjAxMS9hc3NpZ25tZW50cy9NSVQ2XzE4OUlBUDExX2h3My5wZGYKIyBXcml0dGVuIGZvciBQeXRob24gMy54CiMgTWVjaGFuaWNhbCBNT09DCiMgR2xlbm4gUmljaGFyZAojIEp1bHkgMjAsIDIwMTMKIyAqKioqKioqKioqICBFeGVyY2lzZSAzLjIgKioqKioqKioqKgppbXBvcnQgbWF0aApjbGFzcyBCYWxsKCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSwgcik6CiAgICAgICAgc2VsZi54ID0geAogICAgICAgIHNlbGYueSA9IHkKICAgICAgICBzZWxmLnIgPSByCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gIkJhbGwoeDogIiArIHN0cihzZWxmLngpICsgIiwgeTogIiArIHN0cihzZWxmLnkpICsgIiwgcjogIiArIHN0cihzZWxmLnIpICsgIikiCiMgRGVmaW5lIHlvdXIgZnVuY3Rpb24gaGVyZQpkZWYgYmFsbF9jb2xsaWRlKGIxLCBiMik6CiAgICAjIyMjIyBZT1VSIENPREUgSEVSRSAjIyMjIwogICAgc3VtX3JhZGlpID0gYjEuciArIGIyLnIKICAgIGRpc3QgPSBtYXRoLnNxcnQoKGIxLnggLSBiMi54KSAqKiAyICsgKGIxLnkgLSBiMi55KSAqKiAyKQogICAgcmV0dXJuIGRpc3QgPD0gc3VtX3JhZGlpCgojIFRlc3QgQ2FzZXMgZm9yIEV4ZXJjaXNlIDMuMgpiMSA9IEJhbGwoMCwgMCwgMSkKYjIgPSBCYWxsKDMsIDMsIDEpCmIzID0gQmFsbCg1LCA1LCAyKQpiNCA9IEJhbGwoMiwgOCwgMykKYjUgPSBCYWxsKDcsIDgsIDIpCmI2ID0gQmFsbCg0LCA0LCAzKQpwcmludChzdHIoYjEpICsgIiBhbmQgIiArIHN0cihiMikgKyAiICIgKyBzdHIoYmFsbF9jb2xsaWRlKGIxLCBiMikpKSAjIFNob3VsZCBiZSBGYWxzZQpwcmludChzdHIoYjMpICsgIiBhbmQgIiArIHN0cihiNCkgKyAiICIgKyBzdHIoYmFsbF9jb2xsaWRlKGIzLCBiNCkpKSAjIFNob3VsZCBiZSBUcnVlCnByaW50KHN0cihiNSkgKyAiIGFuZCAiICsgc3RyKGI2KSArICIgIiArIHN0cihiYWxsX2NvbGxpZGUoYjUsIGI2KSkpICMgU2hvdWxkIGJlIFRydWUK
Ball(x: 0, y: 0, r: 1) and Ball(x: 3, y: 3, r: 1) False
Ball(x: 5, y: 5, r: 2) and Ball(x: 2, y: 8, r: 3) True
Ball(x: 7, y: 8, r: 2) and Ball(x: 4, y: 4, r: 3) True