def main():
    floor = plane()
    floor.material = material()
    floor.material.color = color(0.9, 0.35, 0.25)
    floor.material.specular = 0
    
    
    middle = sphere(sphere_material=material(material_color=color(0.05, 0.5, 0.25), diffuse=0.25, specular=0.8,
                                                                  transparency=0.97, refractive_index=1.5,
                                                                  shininess=300,
                                                                  pattern=stripe_pattern(color(0.05, 0.5, 0.25),
                                                                                         color(0.5, 0.25, 0.05), transform=scaling(0.25, 0.25, 0.25))),
                    sphere_transform=translation(-0.5, 1, 0.5))
        
    right  = sphere(sphere_material=material(material_color=color(0.15, 0, 0),
                                                                  diffuse=0.15, specular=0.95, transparency = 0.95,
                                                                  reflective=0.98, ambient=0.01, refractive_index=1.5,
                                                                  shininess=300),
                    sphere_transform=np.matmul(translation(1.5, 0.5, -0.5), scaling(0.65, 0.65, 0.65)))
        
    left  = cube(cube_material=material(material_color=color(0.2, 0.2, 0.4), diffuse=0.2, specular=0.9, transparency=0.9, shininess=250, refractive_index=1.25),
                    cube_transform=np.matmul(translation(-1.5, 0.33, -0.75), scaling(0.4, 0.4, 0.4)))
        
    light_source = point_light(point(-10, 10, -10), color(1, 1, 1))
    
    this_world = world()
    this_world.objects=[floor, middle, left, right]
    this_world.light = [light_source]
    
    this_camera = camera(1600, 800, np.pi/3)
    this_camera.set_transform(view_transform(point(0, 1.5, -5), point(0, 1, 0), vector(0, 1, 0)))
    
    c = render(this_camera, this_world)
    c.write_image("second_render_cubeC.png")
def step_impl_sphere_with_material(context, item, red, green, blue, d, sp):
    the_material_color = color(np.float32(red), np.float32(green),
                               np.float32(blue))
    new_material = material(material_color=the_material_color,
                            diffuse=float(d),
                            specular=float(sp))
    new_sphere = sphere(sphere_material=new_material)
    ensure_context_has_dict(context)
    context.dict[str(item)] = new_sphere
def step_set_lighting_values(context, item, material, light, point_position,
                             eye_vector, normal_vector):
    assert (material in context.dict.keys())
    assert (light in context.dict.keys())
    assert (point_position in context.tuple.keys())
    assert (eye_vector in context.tuple.keys())
    assert (normal_vector in context.tuple.keys())
    material_val = context.dict[str(material)]
    light_val = context.dict[str(light)]
    point_value = context.tuple[str(point_position)]
    eye_vec_value = context.tuple[str(eye_vector)]
    norm_vec_value = context.tuple[str(normal_vector)]
    lighting_value = lighting(material_val, sphere(), light_val, point_value,
                              eye_vec_value, norm_vec_value)
    context.tuple[str(item)] = lighting_value
def step_set_lighting_values_with_shadow_explicit_point(
        context, item, material, light, px, py, pz, eye_vector, normal_vector,
        in_shadow):
    assert (material in context.dict.keys())
    assert (light in context.dict.keys())
    assert (eye_vector in context.tuple.keys())
    assert (normal_vector in context.tuple.keys())
    material_val = context.dict[str(material)]
    light_val = context.dict[str(light)]
    point_value = point(float(px), float(py), float(pz))
    eye_vec_value = context.tuple[str(eye_vector)]
    norm_vec_value = context.tuple[str(normal_vector)]
    in_shadow_value = True if in_shadow == "true" else False
    lighting_value = lighting(material_val, sphere(), light_val, point_value,
                              eye_vec_value, norm_vec_value, in_shadow_value)
    context.tuple[str(item)] = lighting_value
def __main__():
    floor = sphere(sphere_transform=scaling(10, 0.01, 10))
    floor.material = material()
    floor.material.color = color(1, 0.9, 0.9)
    floor.material.specular = 0

    left_wall = sphere()
    left_wall.set_transform(
        np.matmul(np.matmul(translation(0, 0, 5), rotation_y(-np.pi / 4)),
                  np.matmul(rotation_x(np.pi / 2), scaling(10, 0.01, 10))))

    left_wall.material = material()
    left_wall.material.color = color(0.3, 0.3, 0.9)
    left_wall.material.specular = 0

    right_wall = sphere()
    right_wall.set_transform(
        np.matmul(np.matmul(translation(0, 0, 5), rotation_y(np.pi / 4)),
                  np.matmul(rotation_x(np.pi / 2), scaling(10, 0.01, 10))))
    right_wall.material = floor.material

    middle = sphere(sphere_material=material(material_color=color(0.1, 1, 0.5),
                                             diffuse=0.7,
                                             specular=0.3),
                    sphere_transform=translation(-0.5, 1, 0.5))

    right = sphere(sphere_material=material(material_color=color(0.5, 1, 0.1),
                                            diffuse=0.7,
                                            specular=0.3),
                   sphere_transform=np.matmul(translation(1.5, 0.5, -0.5),
                                              scaling(0.5, 0.5, 0.5)))

    left = sphere(sphere_material=material(material_color=color(1, 0.8, 0.1),
                                           diffuse=0.7,
                                           specular=0.3),
                  sphere_transform=np.matmul(translation(-1.5, 0.33, -0.75),
                                             scaling(0.33, 0.33, 0.33)))

    light_source = point_light(point(-10, 10, -10), color(1, 1, 1))

    this_world = world()
    this_world.objects = [floor, left_wall, right_wall, middle, left, right]
    this_world.light = [light_source]

    this_camera = camera(100, 50, np.pi / 3)
    this_camera.set_transform(
        view_transform(point(0, 1.5, -5), point(0, 1, 0), vector(0, 1, 0)))

    c = render(this_camera, this_world)
    c.write_image("first_sphere_render_q.png")
def step_impl_sphere_with_transform(context, item, x, y, z):
    new_transform = scaling(np.float32(x), np.float32(y), np.float32(z))
    new_sphere = sphere(sphere_transform=new_transform)
    ensure_context_has_dict(context)
    context.dict[str(item)] = new_sphere
def step_given_s_is_sphere_with_translation(context, item, x, y, z):
    ensure_context_has_dict(context)
    context.dict[str(item)] = sphere(sphere_transform=translation(
        np.float32(x), np.float32(y), np.float32(z)))
def step_given_s_is_sphere(context, item):
    ensure_context_has_dict(context)
    context.dict[str(item)] = sphere()
def step_impl_generic_solid_sphere(context, item):
    ensure_context_has_dict(context)
    context.dict[str(item)] = sphere()