def pocket_walls_collision(self, start_point, end_point): incoming_vec = self.coords - start_point pocket_wall_vec = end_point - start_point projected = Vec2D.projection(incoming_vec, pocket_wall_vec) distance = Vec2D.get_distance(incoming_vec, projected) if 0 <= math.fabs(projected.x) <=\ math.fabs(end_point.x - start_point.x) and\ 0 <= math.fabs(projected.y) <=\ math.fabs(end_point.y - start_point.y) and\ distance < self.RADIUS: self.coords = Vec2D.normalized(incoming_vec - projected) *\ self.RADIUS + start_point + projected self.velocity = 2 * (self.velocity.dot(pocket_wall_vec) / pocket_wall_vec.dot(pocket_wall_vec)) *\ pocket_wall_vec - self.velocity