import os import sys dir = os.path.split(os.path.realpath(__file__))[0] sys.path.append(dir + '/..') import numpy as np from itertools import product from itertoolset import ncycles from geometry import * from optics import * from make import * checkers_per_side = 10 squares_per_checker = 10 x = np.linspace(-5.0, 5.0, checkers_per_side*squares_per_checker+1) y = np.linspace(-5.0, 5.0, checkers_per_side*squares_per_checker+1) vertices = np.array(tuple(product(x,y,[0]))) triangles = [] for j in range(y.size-1): for i in range(x.size-1): triangles.append([j*len(x)+i, (j+1)*len(x)+i,(j+1)*len(x)+i+1]) triangles.append([j*len(x)+i, j*len(x)+i+1,(j+1)*len(x)+i+1]) checkerboard = Mesh(vertices, triangles, remove_duplicate_vertices=True) checker_color_line1 = take(checkers_per_side*squares_per_checker*2, cycle([0]*2*squares_per_checker + [0xffffff]*2*squares_per_checker))*squares_per_checker checker_color_line2 = take(checkers_per_side*squares_per_checker*2, cycle([0xffffff]*2*squares_per_checker + [0]*2*squares_per_checker))*squares_per_checker checker_color = take(len(checkerboard.triangles), cycle(checker_color_line1 + checker_color_line2)) print len(checkerboard.triangles) print len(checker_color) checker_surface_line1 = take(checkers_per_side*squares_per_checker*2, cycle([black_surface]*2*squares_per_checker + [lambertian_surface]*2*squares_per_checker))*squares_per_checker checker_surface_line2 = take(checkers_per_side*squares_per_checker*2, cycle([lambertian_surface]*2*squares_per_checker + [black_surface]*2*squares_per_checker))*squares_per_checker checker_surface = take(len(checkerboard.triangles), cycle(checker_surface_line1 + checker_surface_line2)) checkerboard_solid = Solid(checkerboard, vacuum, vacuum, surface=checker_surface, color=checker_color) print len(checker_surface) water_sphere_solid = Solid(sphere(theta=np.pi/64), water, vacuum) mirror_sphere_solid = Solid(sphere(theta=np.pi/64), vacuum, vacuum, surface=shiny_surface) diffuse_sphere_solid = Solid(sphere(theta=np.pi/64), vacuum, vacuum, surface=lambertian_surface) checkerboard_scene = Geometry() checkerboard_scene.add_solid(checkerboard_solid, displacement=(0,0,-1.5)) checkerboard_scene.add_solid(water_sphere_solid, displacement=(2.0,-2.0,0)) checkerboard_scene.add_solid(mirror_sphere_solid, displacement=(-2.0,-2.0,0)) checkerboard_scene.add_solid(diffuse_sphere_solid, displacement=(0.0,2.0,0)) #from view import * from render import * view(checkerboard_scene)