def test_multiply_a_vector_by_a_fraction(): v = vector(1, -2, 3) scalar = 0.5 expected_vector = vector(0.5, -1, 1.5) with tf.Session() as sess: actual, expected = sess.run([v * scalar, expected_vector]) assert ((actual == expected).all())
def test_dividing_a_vector_by_a_scalar(): v = vector(1, -2, 3) scalar = 2 expected_vector = vector(0.5, -1, 1.5) with tf.Session() as sess: actual, expected = sess.run([v / scalar, expected_vector]) assert ((actual == expected).all())
def test_sum_of_two_vectors_is_a_vector(): v1 = vector(3, -2, 5) v2 = vector(-2, 3, 1) expected_vector = vector(1, 1, 6) with tf.Session() as sess: actual, expected = sess.run([v1 + v2, expected_vector]) assert ((actual == expected).all())
def test_dot_product_of_vectors(): v1 = vector(1, 2, 3) v2 = vector(2, 3, 4) actual_dot_product = dot(v1, v2) with tf.Session() as sess: actual = sess.run(actual_dot_product) assert (actual == 20)
def test_difference_of_two_vectors_is_a_vector(): v1 = vector(3, 2, 1) v2 = vector(5, 6, 7) expected_vector = vector(-2, -4, -6) with tf.Session() as sess: actual, expected = sess.run([v1 - v2, expected_vector]) assert ((actual == expected).all())
def test_a_scaling_matrix_applied_to_a_vecor(): transform = transformations.scaling(2, 3, 4) v = vector(-4, 6, 8) expected_vector = vector(-8, 18, 32) with tf.Session() as sess: [expected, actual] = sess.run([expected_vector, transform(v)]) assert((expected == actual).all())
def test_multiplying_the_inverse_of_a_scaling_matrix(): transform = transformations.scaling(2, 3, 4) inverse = transformations.invert(transform) v = vector(-4, 6, 8) expected_vector = vector(-2, 2, 2) with tf.Session() as sess: [expected, actual] = sess.run([expected_vector, inverse(v)]) assert((expected == actual).all())
def test_normalize_vector(): v = vector(1, 2, 3) expected_vector = vector(1. / math.sqrt(14), 2. / math.sqrt(14), 3. / math.sqrt(14)) actual_vector = normalize(v) with tf.Session() as sess: actual, expected = sess.run([actual_vector, expected_vector]) np.testing.assert_almost_equal(actual, expected, 7)
def test_cross_product_of_vectors(): v1 = vector(1, 2, 3) v2 = vector(2, 3, 4) actual_cross_product = cross(v1, v2) expected_cross_product = vector(-1, 2, -1) with tf.Session() as sess: actual, expected = sess.run( [actual_cross_product, expected_cross_product]) assert ((actual == expected).all())
def test_computing_the_magnitude_of_vector(): actual_magnitude = tf.norm(vector(-1, -2, -3)) expected_magnitude = tf.constant(math.sqrt(14), dtype=tf.float32) with tf.Session() as sess: actual, expected = sess.run([actual_magnitude, expected_magnitude]) np.testing.assert_almost_equal(actual, expected, 7)
def test_translation_does_not_affect_vectors(): transform = transformations.translation(5, -3, 2) expected_vector = vector(-3, 4, 5) with tf.Session() as sess: [expected, actual] = sess.run( [expected_vector, transform(expected_vector)]) assert((expected == actual).all())
def test_difference_of_a_vector_and_a_point_is_a_point(): p = point(3, 2, 1) v = vector(5, 6, 7) expected_point = point(-2, -4, -6) with tf.Session() as sess: actual, expected = sess.run([p - v, expected_point]) assert ((actual == expected).all())
def test_difference_of_two_point_is_a_vector(): p1 = point(3, 2, 1) p2 = point(5, 6, 7) expected_vector = vector(-2, -4, -6) with tf.Session() as sess: actual, expected = sess.run([p1 - p2, expected_vector]) assert ((actual == expected).all())
def test_sum_of_vector_and_point_is_a_point(): v = vector(3, -2, 5) p = point(-2, 3, 1) expected_point = point(1, 1, 6) with tf.Session() as sess: actual, expected = sess.run([v + p, expected_point]) assert ((actual == expected).all())
def test_a_vector_is_an_array_with_w_set_to_0(): actual_vector = vector(4.3, -4.2, 3.1) expected_vector = tf.constant(np.array([4.3, -4.2, 3.1, 0]), dtype=tf.float32) with tf.Session() as sess: actual, expected = sess.run([actual_vector, expected_vector]) assert ((actual == expected).all())
def test_translating_a_ray(): origin = point(1, 2, 3) direction = vector(0, 1, 0) r = Ray(origin, direction) expected_origin = point(4, 6, 8) expected_direction = vector(0, 1, 0) m = tftracer.transformations.translation(3, 4, 5) with tf.Session() as sess: [actual_origin, actual_direction, expected_origin, expected_direction] = sess.run([ r.transform(m).origin, r.transform(m).direction, expected_origin, expected_direction ]) assert (np.allclose(actual_origin, expected_origin)) assert (np.allclose(actual_direction, expected_direction))
def test_a_sphere_behind_a_ary(): xs = Sphere().intersect(Ray(point(0, 0, 5), vector(0, 0, 1))) with tf.Session() as sess: [actual_xs] = sess.run([xs]) assert (len(actual_xs) == 2) assert (actual_xs[0] == -6.0) assert (actual_xs[1] == -4.0)
def test_a_ray_originates_inside_a_sphere(): xs = Sphere().intersect(Ray(point(0, 0, 0), vector(0, 0, 1))) with tf.Session() as sess: [actual_xs] = sess.run([xs]) assert (len(actual_xs) == 2) assert (actual_xs[0] == -1.0) assert (actual_xs[1] == 1.0)
def test_a_ray_misses_a_sphere(): xs = Sphere().intersect(Ray(point(0, 2, -5), vector(0, 0, 1))) with tf.Session() as sess: [actual_xs] = sess.run([xs]) assert (len(actual_xs) == 2) assert (math.isnan(actual_xs[0])) assert (math.isnan(actual_xs[1]))
def test_a_ray_intersects_a_sphere_at_a_tangent(): xs = Sphere().intersect(Ray(point(0, 1, -5), vector(0, 0, 1))) with tf.Session() as sess: [actual_xs] = sess.run([xs]) assert (len(actual_xs) == 2) assert (actual_xs[0] == 5.0) assert (actual_xs[1] == 5.0)
def test_intersecting_a_scaled_sphere_with_a_ray(): r = Ray(point(0., 0., -5.), vector(0., 0., 1.)) s = Sphere(transformations.scaling(2, 2, 2)) xs = s.intersect(r) with tf.Session() as sess: actual_xs = sess.run(xs) assert (len(actual_xs) == 2) assert (actual_xs[0] == 3) assert (actual_xs[1] == 7)
def test_computing_a_point_from_a_distance(): origin = point(2, 3, 4) direction = vector(1, 0, 0) r = Ray(origin, direction) with tf.Session() as sess: [ expected1, expected2, expected3, expected4, actual1, actual2, actual3, actual4 ] = sess.run([ point(2, 3, 4), point(3, 3, 4), point(1, 3, 4), point(4.5, 3, 4), r.position(0), r.position(1), r.position(-1), r.position(2.5) ]) assert ((expected1 == actual1).all()) assert ((expected2 == actual2).all()) assert ((expected3 == actual3).all()) assert ((expected4 == actual4).all())