Here are some Misc images and videos.

If you are looking for my academic website, it can be found here. academic villanova website

I built a MEL script Maya plugin to automatically build architectural structres using procedural modeling. The plugin takes a shape grammar as an input and a footprint for the grammar to work on (box object). For simplification purposes, the footprint is rotated and translated to x,y,z = 0,0,0 and then the grammar is applied.

Here is an example of the House grammar

1: footprint >> roof facades

2: facades >> Comp('sidefaces'){facade}

3: facade >> Visible('street'){streetfacade}

4: facade >> Subdiv('X',1r,1r,1r) {wall|windowwall|wall} 0.5

Subdiv('X',1r,1r,1r,1r,1r,{wall|windows|wall|windows|wall} 0.25

Subdiv('X',1r,8,1r){wall|windows|wall} 0.25

5: streetfacade >> Subdiv('X',1r,6,1r){wall|doorwall|wall} 0.5

Subdiv('X',1r,1r,6,1r,1r){wall|windowwall|doorwall|windowwall|wall} 0.5

6: doorwall >> Subdiv('Y',1r,8){wall|door}

7: windows >> Repeat('X',3){windowwall}

8: windowwall >> Subdiv('Y',1r,4,1r){wall|window|wall}

9: door >> I('door.ma')

10: wall >> I('wall.ma')

11: window >> I('window.ma')

12: roof >> Roof('hipped',5){roofobj}

13: roofobj >> I('roof.ma')

Work in progress. An animation I was making for an advanced animation class composed in Maya and Adobe After Effects. Several groundhogs are displaced by the destruction of their home, but are in possession of orbs, magical in nature ...

I show an example of reinforcement learning here. The goal for the agent is to get from the start position 'S' to the end position 'G'. It has no idea what a good path is to take. Additionally, there are wind effects applied which correspond to the x-axis numbers. These wind effects push the agent north 0, 1, or 2 spaces.
In the first example, I use a Monte Carlo varying e-soft policy that moves from 1 to 0 as the number of iterations grows. I am able to achieve a good policy after a large number of iterations.

In the second example, I use the Sarsa algorithm with temporal difference. The sarsa method is able to learn after each time step. The parameters are epsilon = 0.1, alpha = 0.5, and gamma = 0.5. This gets the correct policy much faster that Monte Carlo methods.

Image rectification is the process of taking a perspective image and altering by ways of a perspective matrix to a rectangle or square. In these notes, I will outline the steps necessary to complete this procedure. For some of the mathematical equations and demonstration purposes, I will be using matlab.

The image shown above has the points (c,d,f,g) which have the pixel coordinates shown. We can use this information to get the points at infinity. As a rule, the cross product of points give the equations of the lines that connect them. Also the cross product of lines give the points of intersection. Thus we can say,

l1 = c x g and l2 = f x d

intersection of l1 and l2 = l1 x l2

The intersections of parallel lines in projective space is thus, (-436,-101,1) and (1117, -80, 1). Next, we want to send the points at infinity to the points (1,0,0) and (0,1,0). But, we already have 4 points, why do we need the points at infinity? Well, it makes solving the matrix much easier. Here is the system of equations that I will work with.

Looking at this set of equations, we can see that the matrix M consists of M = [ αp1 | β p2 | γ p3 ]. That is, we can see that the matrix M just consists of points p1, p2, and p3 scaled by some α, β, and γ scalar. Seeing that the fourth matrix is equal to M, we can solve for α, β, and γ.

We can take the inverse of [p1 p2 p3] and multiply it by p4 to then get the α, β, γ values. Solving for M in matlab gives us the following.

H = [[-436 -101 1];[1117 -80 1];[207 170 1]]'

v = inv(H)*[209 245 1]'

M = [v(1)*[-436 -101 1];v(2)*[1117 -80 1]; v(3)*[207 170 1]]'

I take the inv(M) and hit it with a scale (of 300) and then take the transpose which matlab wants to put into the maketform('projective', M)

Here is the result