1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
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)
|