Class 5: Space

Topics

• vectors, transformations
* what is a vector
* ops: length, normalization, scaling, addition/sub.
* dot product
* determinant, cross product
* what is a matrix
* ops: addition/subtraction, scaling, multiplication, inverse
* xfmns: R, S, T
Multiplication example:
Let A be
[
1 2
3 4
]
and B be
[
5 6
7 8
]
To do A*B, multiply each *row* of A with each *column* of B:
[
1*5+2*7  1*6+2*8
3*5+4*7  3*6+4*8
]
which is
[
19 22
43 50
]
Note that this NOT achievable by multiplying each element of A with the
corresponding one for B (such an operation is meaningless).
Inverse example:
Given A above, what is B such that
A*B =
[
1 0
0 1
]
?
det(A) = 1*4-2*3 = -2
[
4   -3
-2    1
]
Note the + - + - alternation.
[
4  -2
-3   1
]
[
4/-2  -2/-2  -3/-2  1/-2
]
which is
[
-2     1
1.5 -0.5
]
To verify that this is the inverse, do A*B:
[
1*-2+2*1.5   1*1-2*0.5
3*-2+4*1.5   3*1-4*.5
]
which is
[
1 0
0 1
]
which is what we want (identity matrix).

• projection
Given a (Px,Py,Pz) in front of a projection plane, what is the screen coord (Sx,Sy)?
f = .5*w/tan(.5*HFOV)
g = .5*h/tan(.5*VFOV)
Sx = Px*f/(f+Pz) + 0.5*w
Sy = Py*g/(g+Pz) + 0.5*h
ALL SORTS of other projections are possible by altering the equations for Sx and Sy. Eg. a non-linear projection is here: http://egl.math.umd.edu/gallery.html
More notes/imgs:
* http://vismod.media.mit.edu/tech-reports/TR-523/node6.html
* Google image search: "perspective projection" equation
• lighting
Diffuse calculation: N.L
Specular calculation: pow(R.V,n) or pow(H.N,n)
[R = 2N(N.L) - L (why?)]

• Delaunay, Voronoi
Applet: http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/Voronoi/Incremental2/incremental2.htm
Voronoi diagrams are COOL!!!!!
www.voronoi.com - has a LOT of info.
Art: http://www.mrl.nyu.edu/~ajsecord/npar2002/

Voronoi diagrams are quite useful in CG for art (stippling, ornamentation, mosaics etc.), crowds placement, creating pebbled roads, condensation water droplets, spider webs, cellular (leathery) wrinkles, bubbles and for brittle fracturing surfaces.

As an aside, here's what happens when spiders do drugs:

http://www.trinity.edu/jdunn/spiderdrugs.htm

http://www.psymon.com/psychedelia/images/spiders.html

http://www.smartcg.com/tech/cg/notes/Voronoi/fracture

Ways to partition space, into hierarchical grids (squares, cubes)
http://http.cs.berkeley.edu/~demmel/cs267/lecture26/lecture26.html
Examples:
http://www.embedinc.com/book/model.htm
http://www.inf.ufsc.br/~visao/1998/harley/octree.htm

• barycentric coords
The parametric or barycentric coordinates of a given 3D point P=(x,y,z)
relative to a triangle T=V0V1V2 in the plane are calculated as follows.
We start by setting u = V1-V0 and v = V2-V0, w = P-V0.  Then
we find the parametric coordinates (s,t) of P as the solution of
the equation: w = su + tv.  This solution exists and is unique when P lies
in the plane of T.
So what are s and t?
s = ((u.v)(w.v)-(v.v)(w.u))/((u.v)(u.v)-(u.u)(v.v))
t = ((u.v)(w.u)-(u.u)(w.v))/((u.v)(u.v)-(u.u)(v.v))
Once we have s,t, we can calculate (b0,b1,b2) (or what we call (\$u,\$v,\$w) below)
as b0=(1-s-t), b1=s, b2=t (note that b0+b1+b2=1).
The barycentric coordinates of P in terms of (V0V1V2) and (b0,b1,b2)are found from P = b0V0 + b1V1 + b2V2. Here's some MEL code to do this:
// Given a triangle (p,q,r) and a barycentric weights (u,v,w), here is
// the (x,y,z) for the barycentric weights
float \$x = \$u*\$p.x + \$v*\$q.x + \$w*\$r.x;
float \$y = \$u*\$p.y + \$v*\$q.y + \$w*\$r.y;
float \$z = \$u*\$p.z + \$v*\$q.z + \$w*\$r.z;

• color spaces
http://escience.anu.edu.au/lecture/cg/Color/printNotes.en.html
http://www.cs.rit.edu/~ncs/color/t_convert.html

• inversion
Given a circle and a point, an inverse of the point is defined w.r.t the
point's distance from the circle's center.
* points near the center get inverted to 'very far away'
* points far away get inverted to locations close to the circle center
* points on the circumference stay put
In essence, inversion turns regions inside-out w.r.t a circle!
http://en.wikipedia.org/wiki/Inversive_geometry
C++ (Maya plugin) code:
// given a point 'pt', an inversion center (xcenter,ycenter,zcenter)
// inverted point
for(;!iter.isDone();iter.next())
{
MPoint pt = iter.position(); // get

double dist = (pt.x-xcenter)*(pt.x-xcenter) + (pt.y-ycenter)*(pt.y-ycenter)+\
(pt.z-zcenter)*(pt.z-zcenter);
if(dist!=0.0)
{
// set
pt.x *= inv; pt.y *= inv; pt.z *= inv; // set
}
}
Examples: http://egl.math.umd.edu/gallery.html

• grid warping, anam warping, lens distortions