diff options
Diffstat (limited to 'project.py')
-rw-r--r-- | project.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/project.py b/project.py new file mode 100644 index 0000000..801a4de --- /dev/null +++ b/project.py @@ -0,0 +1,28 @@ +import numpy as np +from itertools import repeat +from chroma.transform import rotate + +def from_film(position, axis1=(0,0,1), axis2=(1,0,0), size=(800,600), width=0.035, focal_length=0.018): + height = width*(size[1]/float(size[0])) + + x = np.linspace(width/2, -width/2, size[0]) + z = np.linspace(-height/2, height/2, size[1]) + + zz, xx = np.meshgrid(z,x) + + grid = np.array(zip(xx.flatten(),repeat(0),zz.flatten())) + + axis1 = np.asarray(axis1)/np.linalg.norm(axis1) + axis2 = np.asarray(axis2)/np.linalg.norm(axis2) + + assert axis1.dot(axis2) == 0.0 + + if (axis1 != (0,0,1)).any(): + grid = rotate(grid, np.arccos(axis1.dot((0,0,1))), np.cross(axis1,(0,0,1))) + + if (axis2 != (1,0,0)).any(): + grid = rotate(grid, np.arccos(axis2.dot((1,0,0))), np.cross(axis2,(1,0,0))) + + grid -= np.cross(axis1,axis2)*focal_length + + return grid+position, -grid/np.apply_along_axis(np.linalg.norm,1,grid)[:,np.newaxis] |