import utility

class Point: 
   def __init__(self,x,y,z):
      self.x = x
      self.y = y
      self.z = z
   def __eq__(self,other):
      return (utility.epsilon_equal(self.x, other.x) and utility.epsilon_equal(self.y, other.y) and utility.epsilon_equal(self.z, other.z))

class Vector:
   def __init__(self,x,y,z):
      self.x = x
      self.y = y
      self.z = z
   def __eq__(self,other):
      return (utility.epsilon_equal(self.x, other.x) and utility.epsilon_equal(self.y, other.y) and utility.epsilon_equal(self.z, other.z))

class Ray:
   def __init__(self,pt,dir):
      self.pt = pt
      self.dir = dir
   def __eq__(self, other):   
      return (utility.epsilon_equal(self.pt.x, other.py.y) and utility.epsilon_equal(self.pt.y, other.pt.y) and utility.epsilon_equal(self.pt.z, other.pt.z) and utility.epsilon_equal(self.dir.x, other.dir.x) and
      utility.epsilon_equal(self.dir.y, other.dir.y) and
      utility.epsilon_equal(self.dir.z, other.dir.z))
class Sphere:
   def __init__(self,center, radius):
      self.center = center
      self.radius = radius
   def __eq__(self, other):
      return (utility.epsilon_equal(self.center.x, other.center.x) and utility.epsilon_equal(self.center.y, other.center.y) and utility.epsilon_equal(self.radius, other.radius))

class Finish: 
   def __init__(self,ambient, diffuse, specular, roughness):
      self.ambient = ambient
      self.diffuse = diffuse
      self.specular = specular
      self.roughness = roughness
   def __eq__(self, other):
      return(utility.epsilon_equal(self.ambient, other.ambient), and utility.epsilon_equal(self.diffuse, other.diffuse) and utility.epsilon_equal(self.specular, other.specular) and utility.epsilon_equal(self.roughness, other.roughness))
class Color:
   def __initi__(self, red, green, blue):
      self.red = red
      self.green = green
      self.blue = blue
 
