def local_normal_at(self, cube, point): maxc = max(abs(point.x), abs(point.y), abs(point.z)) if maxc == abs(point.x): return vector(point.x, 0, 0) elif maxc == abs(point.y): return vector(0, point.y, 0) else: return vector(0, 0, point.z)
def local_normal_at(self, cylinder, point): dist = point.x ** 2 + point.z ** 2 if dist < 1 and point.y >= cylinder.maximum - EPSILON: return vector(0, 1, 0) elif dist < 1 and point.y <= cylinder.minimum + EPSILON: return vector(0, -1, 0) else: return vector(point.x, 0, point.z)
def local_normal_at(self, cone, point): dist = point.x**2 + point.z**2 if dist < 1 and point.y >= cone.maximum - EPSILON: return vector(0, 1, 0) elif dist < 1 and point.y <= cone.minimum + EPSILON: return vector(0, -1, 0) else: y = sqrt(dist) if point.y > 0: y = -y return vector(point.x, y, point.z)
right.material = material() right.material.color = color(0.5, 1, 0.1) right.material.diffuse = 0.7 right.material.specular = 0.3 w.objects.append(right) left = sphere() left.transform = translation(-1.5, 0.33, -0.75) * scaling(0.33, 0.33, 0.33) left.material = material() left.material.color = color(1, 0.8, 0.1) left.material.diffuse = 0.7 left.material.specular = 0.3 w.objects.append(left) cam = camera(400, 200, pi / 3) cam.transform = view_transform(point(0, 1.5, -5), point(0, 1, 0), vector(0, 1, 0)) canvas = render(cam, w) end = time.time() print("Finished render.") print(str(round(end - start, 2)) + "s") start = time.time() print("Start writing file...") canvas_to_ppm(canvas).write_file("images/planes.ppm") end = time.time() print("Finished writing file.") print(str(round(end - start, 2)) + "s")
def step_impl(context): assert context.n3 == vector(0, 1, 0)
def step_impl(context): assert context.t.e2 == vector(1, -1, 0)
def step_impl(context): assert context.inv * context.v == vector(-2, 2, 2)
def step_impl(context): context.v = vector(-4, 6, 8)
def step_impl(context): context.up = vector(1, 1, 0)
def step_impl(context): context.r = ray(point(-2, 0, 0), vector(0.2673, 0.5345, 0.8018))
def step_impl(context): context.r = ray(point(0.5, 0, 5), vector(0, 0, -1))
def step_impl(context): context.r = ray(point(-5, 0.5, 0), vector(1, 0, 0))
def step_impl(context): assert context.normal == vector(-1, 0, 0)
def step_impl(context): context.direction = normalize(vector(0.1, 1, 1))
def step_impl(context): context.direction = normalize(vector(0, -1, 2))
def step_impl(context): assert context.comps.reflectv == vector(0, sqrt(2) / 2, sqrt(2) / 2)
def local_normal_at(self, s, p): return vector(0, 1, 0)
def step_impl(context): context.r = ray(point(0, -2, 0), vector(0.8018, 0.2673, 0.5345))
def step_impl(context): context.v = vector(-3, 4, 5)
def step_impl(context): context.r = ray(point(0, 0, -2), vector(0.5345, 0.8018, 0.2673))
def step_impl(context): assert context.transform * context.v == vector(-8, 18, 32)
def step_impl(context): context.r = ray(point(2, 0, 2), vector(0, 0, -1))
def step_impl(context): context.r = ray(point(0, 0.5, -2), vector(0, 0, 1))
def step_impl(context): context.r = ray(point(2, 2, 0), vector(-1, 0, 0))
def step_impl(context): assert context.t.normal == vector(0, 0, -1)
def step_impl(context): assert context.comps.eyev == vector(0, 0, -1)
def step_impl(context): context.r = ray(point(0, -1, 0), vector(0, 1, 0))
def step_impl(context): assert context.comps.normalv == vector(0, 0, -1)
def local_normal_at(self, s, point): return vector(point.x, point.y, point.z)
def step_impl(context): context.r = ray(point(0, 1, -1), vector(0, -sqrt(2) / 2, sqrt(2) / 2))