summaryrefslogtreecommitdiff
path: root/project.py
blob: 10254f2875ee310cfbbebf3b988e94f27d155c05 (plain)
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
import numpy as np
from itertools import repeat
from chroma.transform import rotate, normalize

def from_film(position, axis1=(0,0,1), axis2=(1,0,0), size=(800,600),
              width=0.035, focal_length=0.018):
    """Project rays from a piece of film located at whose focal point is
    located at `position`. `axis1` and `axis2` specify the vectors pointing
    along the length and height of the film respectively.
    """

    height = width*(size[1]/float(size[0]))

    axis1 = normalize(axis1)
    axis2 = normalize(axis2)

    dx0 = width/size[0]
    dx1 = height/size[1]

    # for i in range(size[0]):
    #     for j in range(size[1]):
    #         grid[i*size[1]+j] = axis1*dx1*j - axis2*dx0*i

    x = np.arange(size[0])
    y = np.arange(size[1])

    yy, xx = np.meshgrid(y,x)

    n = size[0]*size[1]

    grid = -np.tile(axis2, (n,1))*xx.ravel()[:,np.newaxis]*dx0 + \
        np.tile(axis1, (n,1))*yy.ravel()[:,np.newaxis]*dx1

    grid += axis2*width/2 - axis1*height/2
    grid -= np.cross(axis1,axis2)*focal_length

    return grid+position, normalize(-grid)