Esempio n. 1
0
def test_a_shearing_transformation_moves_z_in_proportion_to_y():
    transform = transformations.shearing(0, 0, 0, 0, 0, 1)
    with tf.Session() as sess:
        [expected, actual] = sess.run(
            [point(2, 3, 7), transform(point(2, 3, 4))])

    assert((expected == actual).all())
Esempio n. 2
0
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())
Esempio n. 3
0
def test_a_scaling_matrix_applied_to_a_point():
    transform = transformations.scaling(2, 3, 4)
    p = point(-4, 6, 8)
    expected_point = point(-8, 18, 32)

    with tf.Session() as sess:
        [expected, actual] = sess.run([expected_point, transform(p)])

    assert((expected == actual).all())
Esempio n. 4
0
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())
Esempio n. 5
0
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())
Esempio n. 6
0
def test_multiplying_by_the_inverse_of_a_translation_matrix():
    transform = transformations.translation(5, -3, 2)
    transform = transformations.invert(transform)
    p = point(-3, 4, 5)
    expected_point = point(-8, 7, 3)

    with tf.Session() as sess:
        [expected, actual] = sess.run([expected_point, transform(p)])

    assert((expected == actual).all())
Esempio n. 7
0
def test_multiplying__by_a_translation_matrix():
    transform = transformations.translation(5, -3, 2)
    p = point(-3, 4, 5)

    expected_point = point(2, 1, 7)

    with tf.Session() as sess:
        [expected, actual] = sess.run([expected_point, transform(p)])

    assert((expected == actual).all())
Esempio n. 8
0
def test_the_inverse_of_an_x_rotation_rotates_in_the_opposite_direction():
    p = point(0, 1, 0)
    half_quarter = transformations.rotation_x(math.pi/4)
    inverse = transformations.invert(half_quarter)
    expected_rotated = point(0, math.sqrt(2)/2, -math.sqrt(2)/2)

    with tf.Session() as sess:
        [expected, actual] = sess.run([expected_rotated, inverse(p)])

    assert(np.allclose(expected, actual))
Esempio n. 9
0
def test_chained_transofrmations_must_be_applied_in_reverse_order():
    p = point(1, 0, 1)
    A = transformations.rotation_x(math.pi/2)
    B = transformations.scaling(5, 5, 5)
    C = transformations.translation(10, 5, 7)

    CBA = transformations.concat(C, B, A)

    with tf.Session() as sess:
        [expected, actual] = sess.run([point(15, 0, 7), CBA(p)])

    assert(np.allclose(expected, actual))
Esempio n. 10
0
def test_individual_transformations_are_applied_in_sequence():
    p = point(1, 0, 1)
    A = transformations.rotation_x(math.pi/2)
    B = transformations.scaling(5, 5, 5)
    C = transformations.translation(10, 5, 7)

    with tf.Session() as sess:
        [expected_p2, expected_p3, expected_p4, actual_p2, actual_p3, actual_p4] = sess.run(
            [point(1, -1, 0), point(5, -5, 0), point(15, 0, 7), A(p), B(A(p)), C(B(A(p)))])

    assert(np.allclose(expected_p2, actual_p2))
    assert(np.allclose(expected_p3, actual_p3))
    assert(np.allclose(expected_p4, actual_p4))
Esempio n. 11
0
def test_rotating_a_point_around_the_x_axis():
    p = point(0, 1, 0)
    half_quarter = transformations.rotation_x(math.pi/4)
    full_quarter = transformations.rotation_x(math.pi/2)

    expected_half_quarter = point(0, math.sqrt(2)/2, math.sqrt(2)/2)
    with tf.Session() as sess:
        [expected, actual] = sess.run([expected_half_quarter, half_quarter(p)])

    assert(np.allclose(expected, actual))

    expected_full_quarter = point(0, 0, 1)
    with tf.Session() as sess:
        [expected, actual] = sess.run([expected_full_quarter, full_quarter(p)])

    assert(np.allclose(expected, actual))
Esempio n. 12
0
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)
Esempio n. 13
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)
Esempio n. 14
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]))
Esempio n. 15
0
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)
Esempio n. 16
0
def test_a_point_is_an_array_with_w_set_to_1():
    actual_point = point(4.3, -4.2, 3.1)
    expected_point = tf.constant(np.array([4.3, -4.2, 3.1, 1.0]),
                                 dtype=tf.float32)

    with tf.Session() as sess:
        actual, expected = sess.run([actual_point, expected_point])

    assert ((actual == expected).all())
Esempio n. 17
0
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))
Esempio n. 18
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)
Esempio n. 19
0
def perform_intersection(origin, direction):
    sphere_to_ray = origin - point(0, 0, 0)

    a = dot(direction, direction)
    b = 2 * dot(direction, sphere_to_ray)
    c = dot(sphere_to_ray, sphere_to_ray) - 1

    delta = b**2 - 4 * a * c

    t1 = (-b - tf.sqrt(delta)) / tf.scalar_mul(2, a)
    t2 = (-b + tf.sqrt(delta)) / tf.scalar_mul(2, a)

    return tf.stack([t1, t2])
Esempio n. 20
0
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())