# collision.py
# Example solution for Lab 6, problem 1
#
# Aseem Kishore
#
# 6.189 - Intro to Python
# IAP 2008 - Class 4
# Imports should usually go at the top of a program instead of in the main code.
from math import *
# These helper functions let me "abstract away" the syntax of getting a ball's
# x- and y- coordinates, or its radius. This makes my code more readable and
# also helps prevent bugs where I use x instead of y, etc.
def get_x(ball):
return ball[0]
def get_y(ball):
return ball[1]
def get_r(ball):
return ball[2]
# I got this function from the second day of class. We've been trying to tell
# you guys the importance of functions; here's one -- reuse. There are many
# applications for finding the distance between two points; detecting collision
# is one, so we can reuse the function. This is also why we don't ask for input
# or print our result inside the function.
def distance(x1, y1, x2, y2):
return sqrt((x2-x1)**2 + (y2-y1)**2)
# Here is my detect collision function. Note that I'm NOT taking six variables
# like x1, y1, r1, x2, y2, r2 -- that's the purpose of combining x, y, r into a
# tuple, as every ball has an x, y and r.
def collision(ball1, ball2):
d = distance(get_x(ball1), get_y(ball1), get_x(ball2), get_y(ball2))
sum_of_radii = get_r(ball1) + get_r(ball2)
return d < sum_of_radii
# My test cases
print "First test case:",
a = (0, 0, 1)
b = (3, 3, 1)
if collision(a, b):
print "Oops, we detected a collision!"
else:
print "Passed!"
print "Second test case:",
a = (5, 5, 2)
b = (2, 8, 3)
if collision(a, b):
print "Passed!"
else:
print "Oops, we didn't detect a collision!"