def test_color2(self): c1 = Color(0.9, 0.6, 0.75) c2 = Color(0.7, 0.1, 0.25) c3 = c1 + c2 self.assertTrue(equals(c3.x, 1.6)) self.assertTrue(equals(c3.y, 0.7)) self.assertTrue(equals(c3.z, 1))
def test_color3(self): c1 = Color(0.9, 0.6, 0.75) c2 = Color(0.7, 0.1, 0.25) c3 = c1 - c2 self.assertTrue(equals(c3.x, 0.2)) self.assertTrue(equals(c3.y, 0.5)) self.assertTrue(equals(c3.z, 0.5))
def test_ray_intersects_cube_7(self): c = Cube() r = Ray(Point(0, 0.5, 0), Vector(0, 0, 1)) xs = c.local_intersect(r) self.assertTrue(equals(xs.count, 2)) self.assertTrue(equals(-1, xs[0].t)) self.assertTrue(equals(1, xs[1].t))
def test_create1(self): c = Canvas(10, 20) self.assertTrue(equals(10, c.width)) self.assertTrue(equals(20, c.height)) for i in range(10): for j in range(20): pixel = c.pixels[j][i] self.assertTrue(pixel.equals(Color(0, 0, 0)))
def test_a_ray_strikes_a_cylinder3(self): cyl = Cylinder() direction = Vector(0.1, 1, 1).normalize() r = Ray(Point(0.5, 0, -5), direction) xs = cyl.local_intersect(r) self.assertEqual(2, xs.count) self.assertTrue(equals(6.80798, xs[0].t)) self.assertTrue(equals(7.08872, xs[1].t))
def test_a_ray_strikes_a_cylinder1(self): cyl = Cylinder() direction = Vector(0, 0, 1).normalize() r = Ray(Point(1, 0, -5), direction) xs = cyl.local_intersect(r) self.assertEqual(2, xs.count) self.assertTrue(equals(5.0, xs[0].t)) self.assertTrue(equals(5.0, xs[1].t))
def test_schlick_approximation_with_small_angle_and_n2_larger_than_n1(self): shape = GlassSphere() r = Ray(Point(0, 0.99, -2), Vector(0, 0, 1)) ls = [ Intersection(1.8589, shape), ] xs = Intersections(ls) comps = xs[0].prepare_computations(r, xs) reflectance = comps.schlick() self.assertTrue(equals(reflectance, 0.48873))
def test_schlick_approximation_under_total_internal_reflection(self): shape = GlassSphere() r = Ray(Point(0, 0, sqrt(2)/2), Vector(0, 1, 0)) ls = [ Intersection(-sqrt(2)/2, shape), Intersection(sqrt(2)/2, shape) ] xs = Intersections(ls) comps = xs[1].prepare_computations(r, xs) reflectance = comps.schlick() self.assertTrue(equals(reflectance, 1.0))
def test_schlick_approximation_with_perpendicular_viewing_angle(self): shape = GlassSphere() r = Ray(Point(0, 0, 0), Vector(0, 1, 0)) ls = [ Intersection(-1, shape), Intersection(1, shape) ] xs = Intersections(ls) comps = xs[1].prepare_computations(r, xs) reflectance = comps.schlick() self.assertTrue(equals(reflectance, 0.04))
def equals(A, B): assert A.size == B.size, "input array have different length {} and {}".foramt( len(A), len(B)) for j in range(A.size): assert len(A[j]) == len( B[j]), "input array have different length {} and {}".foramt( len(A[j]), len(B[j])) for i in range(len(A[j])): equal = misc.equals(A[j][i], B[j][i]) if not equal: return False return True
def test_color1(self): c = Color(-0.5, 0.4, 1.7) self.assertTrue(equals(c.x, -0.5)) self.assertTrue(equals(c.y, 0.4)) self.assertTrue(equals(c.z, 1.7))
def test_camera3(self): c = Camera(125, 200, pi / 2) self.assertTrue(equals(c.pixel_size, 0.01))
def test_ray_miss_cube5(self): c = Cube() r = Ray(Point(0, 2, 2), Vector(0, -1, 0)) xs = c.local_intersect(r) self.assertTrue(equals(0, xs.count))
def equals(self, v): return equals(self.x, v.x) and \ equals(self.y, v.y) and \ equals(self.z, v.z) and \ equals(self.w, v.w)
def test_color4(self): c1 = Color(0.2, 0.3, 0.4) c2 = c1 * 2 self.assertTrue(equals(c2.x, 0.4)) self.assertTrue(equals(c2.y, 0.6)) self.assertTrue(equals(c2.z, 0.8))
def test_ray_miss_cube3(self): c = Cube() r = Ray(Point(0, 0, -2), Vector(0.5345, 0.8018, 0.2673)) xs = c.local_intersect(r) self.assertTrue(equals(0, xs.count))
def test_nor3(self): v = Vector(1, 2, 3) self.assertTrue(equals(1, v.normal().mag()))
def test_mag5(self): v = Vector(-1, -2, -3) self.assertTrue(equals(sqrt(14), v.mag()))
def test_mag4(self): v = Vector(1, 2, 3) self.assertTrue(equals(sqrt(14), v.mag()))
def test_mag3(self): v = Vector(0, 0, 1) self.assertTrue(equals(1, v.mag()))
def test_mag1(self): v = Vector(1, 0, 0) self.assertTrue(equals(1, v.mag()))