ࡱ>     `!Od>qqYf* HD XJxcdd``ed``baV d,FYzP1n:&lB@?b  ㆪaM,,He`I? {01d++&1KZ~ X.0`U a%?i`SV 0@"4{'P 27)?(+ 2 =6䂆*8!@``G3#RpeqIj.ebl~fZ`!;$⒤.=bKe` XJQxcdd``gd``baV d,FYzP1n:&.! KA?H1Z \ ǀqC0&dT20 KXB2sSRs%}-?`  ,@RF\ 9A2~g3@OL/憅ĻL@rHŋd !a"os>`d(/d QO=]Y2NL@(\PJ#\єb;'pM悦.pj[ɏLLJ% H X,n`!Efݭ ]/v"@#|xcdd``eb``baV d,FYzP1n:&bB@?b  ㆪaM,,He`c&,eBܤr0MЯb@Vg$u m5ѓ $QIy\c̝ RYI;or'\FKHro'ކ` {47$37X/\!(?718.`[P kep>;*9\az >qG?q᱀QBb ip_A|m8$7/@`u-|b w10Ha(k c / /M=Fp{8Q7 Ʒb [LZ?yB[6;%+KRsA<.,#c f85`! mDgj!^ @C~xڝR=KPm0HA/ps8ҠB 1 NtA?pU.Z*/\ry'#\q>Y!jEDدb⳨MV@n` Dđ"E`mVM`B}# TwQ/^'E ԩ\X$ňKi P־NNI`W|锽o^;S/*>!#45Ww?Wߐ 1%/q.Hޛ˜e&|o}7Ǯ~|v'u:4(nM4嶪$DÕ|f8nbH%;~`!)B(Sc\$]Z`@0= xKA{;z{ w:,l Z+,z$IsQ^6iCb. iRl? )^%U 73;X]{ B h]'B<rZA*BZ#4U*L6r6\>j\G2$hmͶ{#_e7]϶^q\nxxC ׅ'y|B>G[=͗;:}ˋUBauy BsOn~ j>}n{V8i;߉6Jp\y0~X ll3F*"+#1[ WDZ5@& ?RalL "Ǹq;q5r4_h\9~ rpN]e4Jo w/Mf??*O 62VwWY}+Spԑhz9 {}u@C\d|#žwRaA0= bx]JAϝݘdfc  `)1he5!b#(4HZZTHl|8wlB{ϙs/C\Wtlt~( ># θ2dFe A y8|N)VK=(ްO)4ESj)OEճ 1Mwp4wܗ0/B3:fH)lVJbi/V0"mHNOi.reՐzPErV;AehG=tHF{Nr0C~PSiqܟɺrbɷwzwϰ~x6G&*y@SBIiS*JBj+LS?j`![ Ze  bxSKPҦ?,AbEt9m X0M!QC' qGA7%T萄G}=PWOVk+8"TiM<5&q^6+ڴH'Qx{u9V9&f1y@w~ܐ`8S|.pT;9 E c@SIϋ2c"=Qaz[1w^fV3Fy6#6j'tjRRCJ*]jq<['שVp 힟.* Id_KNWBJGäҞ6fGG2$̺u4# {|}?CvcjNh NB~6e  xc4cFFA< 10p2B0\": BC2sSRso12601h>`7`l c2*|@r*X%!0,@:0Uef3t0&dL`RɘlNqܤfqmuA4#-F3͘hA`aA$4(`?<*7J`!_ UIη/ @x|Qx;K@g& >@"\!(aia#b!'+;Ai-m,ďbie!'wfB60">6URŃxVqV< ,ڥ<6(&P9H9 |OzPPnNwx؉OC]Ƥ3xEqӴ kN/{R39A G^?\Sjt|q9xp   $wZy'޴22~.1dž_ELf_*oQ { lW#CFiPzDv<@GKJ``!^_f ^Y{ɅL HD XJ,xcdd``dd``baV d,FYzP1n:&lB@?b  ㆪaM,,He`I? {01d++&1KZ~ X.0`U a%?i`SV 0@"4{'0/P{5vTL>{P 27)?(µXl {\[)l+KRsA<.Gf8 m`!w> 5M>@P.0= ^xMhA7_7ݤW+QA(Š7 6 mi ٜoA"=J{Pd՛^4B8?üJovޛaHXg, ET<1~QBd P#2EI;K1%a?ǡC.wȟ6N l|+Xl<"[N(eP1~YI4&EA<^[kDaR-[Χٳ׫ #%쓮QI=y/$+g]H ې5>-wui]n?wপ;廮DgjjnY\{ȉ,rϙA43m٧Sڭ<~`}bK9cػ~Dd=_¾`?McgmlVrx^hO=ӮA~ylu؎-+fP69rJ7v[3*ċ9~H9~H<9~H~j=v_f/e5FjL5vDȀ:3򌗟ۅPzp6X}5+svY`!)INic>^J^ @|Zxcdd``ad``beV dX,XĐ ɁIGRcgb n@P5< %! `fjv+B2sSRs@.0Fr\SqEp__aBcC\X0%_J9A&}  W&00|w+H6ĿcE`Foam.F60=0r~CR-n >фX@| I &3pAS8偝;R221)WB\Zf:LsTCfWo  ! A|xca&GEA< 10p2B0\": BC2sSRso152601i0.d,FE MD3]|^  _8K s2W&0003}a 6H:F{:B3Ќ[mt#"un Y5X4'0309N.A`!3~ئ,SP` XJxcdd`` @bD"L1JE `x Yjl R A@2 n*; UXRYvo&`0L`A $37X/\!(?71]<6z( Rl{2FPALDDF?Mn`2cPl +ss`.6:?ķ_ 1.pj;+KRs!v!#HC6܊mɖX("r!XJxcL0pc`d0M-VK-WMc`fAG!fd4b`ad`elX&1h AH0p2W&0003cьmt#E V `!IX7 @ 8 XJxcdd`` @bD"L1JE `x؄,56~) M @ kp 7$# !L av@Hfnj_jBP~nbC#%@y mc &6HDF?Mn`S ?`B;0@h6hSpenR~_h g1 b\P Nv0o8+KRs!v!HCDiM2A!8 XJxcLl Lyc`d` 102pEtod++&10bex֣D312 elX0hH0p2W&0003bьmt E  `!,ńLH| @ `0uxJ@g_ibPXBI}++6 H^Ez(ҍJ5!d;3@(d`_*+>B(xgyNKĕv*b%d8Gb 0'Kʧ y܈ci^.܃>JjB% eإaIrCVѴL{=srW5yJFi˓5Z 9> Ӿ 1;F-r4CJ*ߏ\O2-j&[Y;(y[>T%)43 yJRS2t.UL cz`yyYYBf kR]aSCբ@TQ,A*4A a0xc4aD^GA< 10p2@0\": BC2sSRso10202<`c``3ѐAI{4YC̆@A_"ͱDAL | t8[penR~38. duU2ڃh sm*}qfǨ1IC2&y} )_5`!_d9IЊ` hxڥSJAn^0> _b)m\QpM b.X  ۔ڈl7ilk rs/fLb |ř!BT) Cp^lKSj C,BŐa<`螙cV4O~Ay?H+le9q4KxKӢBjsJqr4P{e(![ >;Q'T<܎Snzxjw T $[^Z|g͗&W%Fy1η5 yޗ9&ӡ7Sƍ^R1>IcyL=hѧX0e 1xcdd``dd``baV d,FYzP1n:&B@?b u 30 UXRY7S?&,e`abM-VK-WMcؗ800I] Hq%0:d4+a7 >_ kT$0HZRQ 3j&R n1XcI9 @L\'"\8D.v$?121)Wx ], 0O`qmh`!\%CNLJ)+Q7Ȼx^{#'9sso?r"c88l/D qq$?r"c80:ynnw:~f}֒Fq9Ek^(i"Y_Z^sϢ~>Sxb"걞bde+?2GޝJ1b+~8'_/Bܯ2'e/Ə<+Fb̯cBWŇiu*B,oDۃnߐir#s[mzn9Tn4$#}0%F$yj%ZDkZMu={:=s?/9,IP,5CB|$AgKfN ], Pk;\[GF4*$}n 5DNwyN!%kfxf ˸% >>A:W\VupyT]^NF6j\+ĵs|ϷŠ2?9)p!)I']Ő=&h1?ri< `!#Ň<`{@)|xڥK@߻Ick*(~QmNVT0VX"ձ88G898twHy*@A6Tڪ(!~E뺢"4OTU#8f0߱F>=:,kkSS Fq2+f=V;zѬ'D59v+cvuK Qv֏HEŇ}z0 7㘍:*֧Xb}b[׬sˁ@9%b؋$fXc>a.yS|&)~.xRusE~glk F0nƃ 0 7o rʯcCdBa%ja"5\ d+2xxLS>\_8Q8PApVTy0_?Âj-&T~߅p%}0@penR~CPKj`=& m%4urS0 HqĤ\Y\ t08`O-`!_QGΉG>ZZ@@0= |-xcdd``ed``baV d,FYzP1n:&&v! KA?H1Z30< UXRY7&,e`abM-VK-WMc\<  X$@ڈcHưwf @&T>AD` VQ,[`w(z >I9 @\).FLA*vVrAc S]@F&&\,€,8 _`!IWJVMe7_@@8\ 0= gxڭOkAwvn#mCM!1ă (h,FM0xU<`K H1GE:3;;̤9 ;gYD HV#$IU;'uۜr{e^%8CYQU`gVm-gj (nt=v=`Mg&PV8?g)M^rp՗\3t3zy3k[ʒ^O/'/JR1g-.P-ZZz;pQqjr?Ԣnff]ˆ˚9z?]>e8V7uszh]scT]vv_e9.st]昹fÒe3n :NsæfO.fT<2~0÷SkvzJ ;G1OD+qn> EM/&=睢ϨC\\! Ma~LoWglfevZ =-8PBULGIc!o HJ;ST.f<@x;zEA*b3$AeFc~/^d~>g/?ņ8g)l6LN(TL 79=0*7o囁S=L x cG֓ķ)TjFȌԢ ,= I9 @,\ą~S Hv[x@|7[msy \.@LE)221)Wx\rHb[>H(  l ;'AEquation Equation.30,Microsoft Equation 3.00(DEquation Equation.30,Microsoft Equation 3.00)EEquation Equation.30,Microsoft Equation 3.00*FEquation Equation.30,Microsoft Equation 3.00+GEquation Equation.30,Microsoft Equation 3.00 ,HEquation Equation.30,Microsoft Equation 3.00!-IEquation Equation.30,Microsoft Equation 3.00".JEquation Equation.30,Microsoft Equation 3.00#/KEquation Equation.30,Microsoft Equation 3.00$0LEquation Equation.30,Microsoft Equation 3.00%1MEquation Equation.30,Microsoft Equation 3.00&2OEquation Equation.30,Microsoft Equation 3.00'32Equation Equation.30,Microsoft Equation 3.00(4PEquation Equation.30,Microsoft Equation 3.00)5QEquation Equation.30,Microsoft Equation 3.00*6REquation Equation.30,Microsoft Equation 3.00+7SEquation Equation.30,Microsoft Equation 3.00,8TEquation Equation.30,Microsoft Equation 3.00-9UEquation Equation.30,Microsoft Equation 3.00.:VEquation Equation.30,Microsoft Equation 3.00/;XEquation Equation.30,Microsoft Equation 3.000<YEquation Equation.30,Microsoft Equation 3.001=ZEquation Equation.30,Microsoft Equation 3.0L/ 0|DTimes New Roman,60Wo 0DArialNew Roman,60Wo 0" DWingdingsRoman,60Wo 00DSymbolgsRoman,60Wo 0@DCourier Newman,60Wo 01c(.2  @n?" dd@  @@`` \<T<H/!                   $ ,                         , 3'        )  ,h/                     +   ! " #$%&'()*+,-./O              Y $$$$$$$$2$d>qqYfW$$$$$$$$$2$;$⒤.=bKeW$$$$$$$$$$$$$$$$$$$$$2$Efݭ ]/v"$$$$$$$$$$$$$$$$$$$$$$$2$ mDgj!2$)B(Sc\$]2$[ ZE $$$2$_ UIη/ $$2$_f ^Y{ɅLf$2$w> 5M>2$)INic>^J^2$3~ئ,SP`2$IX7 32$,ńLH| M$$$$$$$$$$$$$2$_d9IЊ$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$2$>=hѧX0k$$$$$$$$$$$$2$%CNZg)2$IWJVMe7_@W+2$f8?A9]ZM-c $0e0e     A@ AjJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||@d g4AdAd04ppp@ <4BdBd 0L7g4VdVd0zpu pp<4!d!d 0L7~kʚ;a3ʚ;<4ddddЁ 0r0___PPT10 2___PPT9/ 0?D$ 0Essential Math for GamesO =MOrientation and Animation6%Jim Van Verth (jim@essentialmath.com)&F           Interpolating RotationNot as simple, but more important E.g. camera control Store orientations for camera, interpolate E.g. character animation Body location stored as point Joints stored as rotations b6+96+9Orientation vs. Rotation  Orientation is described relative to some reference alignment A rotation changes object from one orientation to another Can represent orientation as a rotation from the reference alignment  Ideal Orientation Format  Represent 3 degrees of freedom with minimum number of values Allow concatenations of rotations Math should be simple and efficient concatenation interpolation rotation&%%  Matrices as OrientationMatrices just fine, right? No& 9 values to interpolate don t interpolate well& / /Interpolating MatricesSay we interpolate halfway between each element Result isn t a rotation matrix! Need Gram-Schmidt orthonormalizationeWhy Not Euler Angles?*       Three angles Heading, pitch, roll However Dependant on coordinate system No easy concatenation of rotations Still has interpolation problems Can lead to gimbal lockL { {*      Euler Angles vs. Fixed AnglesOne point of clarification Euler angle - rotates around local axes Fixed angle - rotates around world axes Rotations are reversed x-y-z Euler angles == z-y-x fixed anglesH)Euler Angle InterpolationExample: Halfway between (0, 90, 0) & (90, 45, 90) Interpolate directly, get (45, 67.5, 45) Desired result is (90, 22.5, 90) Can use Hermite curves to interpolate Assumes you have correct tangentsL t&" t&"Euler Angle ConcatenationCan't just add or multiply components Best way: Convert to matrices Multiply matrices Extract euler angles from resulting matrix Not cheap60Q 0Q ^' Gimbal LockEuler/fixed angles not well-formed Different values can give same rotation Example with z-y-x fixed angles: ( 90, 90, 90 ) = ( 0, 90, 0 ) Why? Rotation of 90 around y aligns x and z axes Rotation around z cancels x rotationlWX   Gimbal Lock    GLoss of one degree of freedom Alignment of axes (e.g. rotate x into -z)<HZ=H  Axis and Angle  Specify vector, rotate ccw around it Used to represent arbitrary rotation orientation = rotation from reference Can interpolate, messy to concatenate6K&&K&&*    }  Axis and Angle  Matrix conversion   QuaternionuPre-cooked axis-angle format 4 data members Well-formed (Reasonably) simple math concatenation interpolation rotation&Q%Q%What is a Quaternion?mVector plus a scalar: (w, x, y, z) Normalize as rotation representation - also avoids f.p. drift Scale by :nMB"    E  What is a Rotation Quaternion?  Normalized quat (w, x, y, z) w represents angle of rotation q w = cos(q/2) x, y, z from normalized rotation axis r (x y z) = v = sin(q/2)r Often write as (w,v) In other words, modified axis-angle > (: 'F     3      Creating Quaternion  4So for example, if want to rotate 90 around z-axis: 545  Creating Quaternion  Another example Have vector v1, want to rotate to v2 Need rotation vector r, angle q Plug into previous formula c   s  Creating Quaternion  From Game Gems 1 (Stan Melax) Use trig identities to avoid arccos Normalize v1, v2 Build quat More stable when v1, v2 near parallelB&B      b            &  Multiplication  Provides concatenation of rotations Take q0 = (w0, v0) q1 = (w1, v1) If w0, w1 are zero: basis for dot and cross product Non-commutative:`] )          Identity and Inverse  Identity quaternion is (1, 0, 0, 0) applies no rotation remains at reference orientation q-1 is inverse q . q-1 gives identity quaternion Inverse is same axis but opposite angle$5"( 5    (  Computing Inverse  Inverse of (w, v) = ( cos(q/2), sin(q/2) . r ) Only true if q is normalized i.e. r is a unit vector Otherwise scale by O    *    d  Vector Rotation  Have vector p, quaternion q Treat p as quaternion (0, p) Rotation of p by q is q p q-1 Vector p and quat (w, v) boils down to assumes q is normalized H     *d    1  0Vector Rotation (cont d)  Why does q p q-1 work? One way to think of it: first multiply rotates halfway and into 4th dimension second multiply rotates rest of the way, back into 3rd See references for more details for now, trust me1ZmZ ZZ  m   0Vector Rotation (cont d)  CCan concatenate rotation Note multiplication order: right-to-leftD  0Vector Rotation (cont d)  q and  q rotate vector to same place But not quite the same rotation  q has axis  r, with angle 2p-q Causes problems with interpolation~>  &  Quaternion Animation  Specify set of keyframes with base position and local orientations Example: human figure animation Need way to interpolate between orientations*     x  Quaternion InterpolationmWant: tip of vector rotated by interpolated quaternions traces arc across sphere, at equal intervals of angle, 6Linear Interpolation (Lerp)  Just like position (1-t) p + t q Problems Cuts across sphere Moves faster in the middle Resulting quaternions aren't normalized*W W*c       Spherical Linear Interpolation  NAKA slerp Interpolating from p to q by a factor of t p, q unit quaternions9 F    :        Faster Slerp*      Lerp is pretty close to slerp Just varies in speed at middle Idea: can correct using simple spline to modify t (adjust speed) From Jon Blow s column, Game Developer, March 2002 Lerp speed w/slerp precision8m(*F            Faster Slerp*        Faster Slerp4Alternative technique presented by Thomas Busser in Feb 2004 Game Developer Approximate slerp with spline function Very precise  but necessary? Not sure$=O,*'> Which One?RTechnique used depends on data Lerp generally good enough for motion capture (lots of samples) Slerp only needed if data is sparse Blow s method for simple interpolation&''_F One CaveatNegative of normalized quat rotates vector to same place as original ( axis, 2p angle) If dot product of two interpolating quats is < 0, takes long route around sphere Solution, negate one quat, then interpolate Preprocess to save timenEZZZE>`=+Operation Wrap-Up  Multiply to concatenate rotations Addition only for interpolation (don t forget to normalize) Be careful with scale Quick rotation assumes unit quat Don t do (0.5 " q) " p Use lerp or slerp with identity quaternion|tct*,F    $      Quaternion to Matrix  {Normalized quat converts to 3x3 matrix Can be done with 9 mults, 24 adds 16 mults, 24 adds, 1 divide if not normalized 6L.L.b     .         (  Matrix vs. Quaternion  Concatenation cheaper 3x3 matrix 27 mults, 18 adds Quat 16 mults, 12 adds can be done in 9 mults, 27 adds [Shoemake89] Rotation not as cheap Matrices 9 mults, 6 adds Quats 21 mults, 12 adds Convert to matrix if doing more than onelZ4Z-ZZZZ4- Z$                 8             3  Quats and Transforms    Can store transform in familiar form Vector t for translation (just add) Quat r for orientation (just multiply) Scalar s for uniform scale (just scale) Have point p, transformed point is%ZsZ#Z%!( *I    n  :Quats and Transforms (cont d)    nConcatenation of transforms in this form Tricky part is to remember rotation and scale affect translationso  :Quats and Transforms (cont d)    Concatenation cheaper than 4x4 matrix 46 mults, 37 adds vs. 64 mults, 48 adds Transformation more expensive 29 mults, 25 adds vs. 16 mults, 12 adds Again, convert quaternion to matrix if doing many points `&)a&)a~)        ,        D   References   &Shoemake, Ken,  Animation Rotation with Quaternion Curves, SIGGRAPH  85, pp. 245-254. Shoemake, Ken,  Quaternion Calculus for Animation, SIGGRAPH Course Notes, Math for SIGGRAPH, 1989. Blow, Jonathan,  Hacking Quaternions, Game Developer, March 2002. Busser, Thomas.  PolySlerp: A fast and accurate polynomial approximation of spherical linear interpolation (Slerp), Game Developer, February 2004.l= Z/  P    \  B R"  /R  ` f33` 3f3` ___>?" dd@,?" dd@  " @ `"  n?" dd@   @@``@n?" dd@  @@``PR    @ ` ` p>>D$ 0Essential Math for Games r(    N\gֳgֳ ?P  X Click to edit Master title style!!  2  H䏺gֳgֳ ?  RClick to edit Master text styles Second level Third level Fourth level Fifth level!    S    Zp1 ?``  b* 2    ZК1 ?`   X*(2    Z1 ?`   Z*(2  N  6޽h? ? 33  Lecture Template 0 @( ~@K@   B( 1?P%   X* 2     Bd 1? %  Z*(2   p  0 ?*P  ,  B 1? @2  RClick to edit Master text styles Second level Third level Fourth level Fifth level!    S    H8! 1?P   X* 2     H(& 1?   Z*(2   H  0h0 ? ̙3380___PPT10.QA9 XPP( \@d@   B00 1?P%   X* 2     B,6 1? %  Z*(2     HX9 1?P   X* 2     H> 1?   Z*(2   H  0h0 ? ̙3380___PPT10.Qp {Gf 0 f(   ~  s *h>    T$gֳgֳ ?) )  H  0޽h ? 3380___PPT10.#\z  `P 0(  P x P c $TEP   x P c $E  H P 0޽h ? 33  pT 0(  T x T c $`KP   x T c $L  H T 0޽h ? 33  X 0(  X x X c $hQP   x X c $$R  H X 0޽h ? 33  \ 0(  \ x \ c $lVP   x \ c $(W  H \ 0޽h ? 33j  ` (  ` x ` c $P]P   x ` c $ ^  r `  6A  ??0  H ` 0޽h ? 33  d 0(  d x d c $bP   x d c $dc  H d 0޽h ? 33  d\h (  h x h c $jP   x h c $j   h T@l jJ?Vz 8Demo 2H h 0޽h ? 33  l 0(  l x l c $,tP   x l c $t  H l 0޽h ? 33  p 0(  p x p c $P   x p c $  H p 0޽h ? 33  t 0(  t x t c $P   x t c $  H t 0޽h ? 33e'  {**x (  x x x c $P   x x c $  z   x  p1 ,$D 0 x  TdԔP   Iz  ~B x NDԔ3 g3 ~B x  NDԔ3 c  ~B x B NDԔI 3    x  TԔ9   Iy    x  TԔ   Ix    x  TԔ*   Io  ~2  x  N 8c?   x TԔ Iz  z X x  p,$D 0 x  TԔ@  Iz  r x  B 8c?p ` ~B x NDԔ#g# ~B x  NDԔ# S ~B x B NDԔ9 #  x  T0Ԕ)   Iy   x  TԔ w  Ix  B x TDԔ! !~2 x  N 8c?   x  T(Ԕ@bX Jx  rb x  B 8c? @rr x  B 8c?   x  THԔ   Io  z PX x  p,$D 0cN g X x  gPX x  T`Ԕ`X Jx  r x  B 8c? p ` ~B  x NDԔCgC ~B !x  NDԔC s ~B "x B NDԔY C  #x  TxԔI   Iy   $x  T\Ԕ   Ix   %x  T,Ԕ:   Io  B &x TDԔA A~2 'x  N 8c?  rb (x  B 8c? @ )x  TLԔP Iz  0 *x Hxgֳgֳ ?p 0Any value of x rotation rotates cw around z axis:1 *       H x 0޽h ? 33  ___PPT10b +DF ' = @B D ' = @BA?%,( < +O%,( < +Dx' =%(%(D' =%(D' =4@BBBB%(E' =1B B`BPB1:Bhidden*3>+B#style.visibility= `B<*D' =1:Bvisible*o3>+B#style.visibility<*%(DX' =%(D' =%(D' =4@BBBB%(E' =1B B`BPB1:Bhidden*3>+B#style.visibility= `B<*D' =1:Bvisible*o3>+B#style.visibility<*%(DX' =%(D' =%(D' =4@BBBB%(E' =1B B`BPB1:Bhidden*3>+B#style.visibility= `B<*D' =1:Bvisible*o3>+B#style.visibility<*%(+  | (  | x | c $\P   x | c $  vB | NDԔ? jb | B jJ?0 pb | Hm jJ? p  | H 1? d  Ar$ 2 | H 1?` p / G  Dq& 2H | 0޽h ? 33  yq   (   x  c $0P   x  c $  r   6AB  ??    T Ԕ? n  Ywhere" 2  r   6AC  ??p   H  0޽h ? 33  0 0(   x  c $ P   x  c $D  H  0޽h ? 33  @ $(   x  c $P   x  c $  r   6AA  ?? /[D  r   6A  ??  H  0޽h ? 33n  P (   x  c $ P   x  c $x     T  jJ?0  3^ 2  T jJ?H ( h  3^ 2H  0޽h ? 33j  ` (   x  c $P   x  c $  r   6A   ??   H  0޽h ? 33  p "(   x  c $@#P   x  c $#  B  ZD8c? P B  ZD8c?PP B  ZD8c? PP  T@& Ԕ?  g  fv12 2     TH, Ԕ?  fv22 2     T0 Ԕ?p F0  Kr 2    T3 Ԕ? ^@ Zq& 2  r   6A   !??!  !r   6A  "?? !  "  T7 jJ?X x 3^ 2H  0޽h ? 33^   (   x  c $>P   x  c $T?  r   6AJ  #??/N 5  #r   6A^  $?? R  $r   6A  %??   %H  0޽h ? 33^   (   x  c $DP   x  c $E  r   6A  &??R/  &r   6A  '?? ;  'r   6A  (??Q   (H  0޽h ? 33   0(   x  c $KP   x  c $L  H  0޽h ? 33    (   x  c $x^P   x  c $4_  r   6A  )??"a~  )r   6AG  *??c  *  Ta jJ? 3^ 2  Tc jJ?aE< 3^ 2  T8g jJ? 3^ 2  Tk jJ?   3^ 2H  0޽h ? 33j   (   x  c $HqP   x  c $r  r   6A)  +??p   +H  0޽h ? 33   0(   x  c $wP   x  c $x  H  0޽h ? 33    J(   x  c $|P   x  c $}  N  T Ԕ? 1v rq1 " (q0 " p " q0-1) " q1-1 = (q1 " q0) " p " (q1 " q0)-1&: 2                   :    T jJ?Vz 8Demo 2H  0޽h ? 33   B :  (   x  c $تP   x  c $  8   q    ~2   N jJ? > ~B  NDjJ?I I ~B   NDjJ?I F I 5~B   NDjJ?Q Y  ~B  NDjJ?A 7 q    Ti jJ?Q M  5r 2   Tܰ jJ?/ q @-r" 2   T@ jJ?_  5v 2   T jJ?~  7  5w 2   H jJ? 0  7q 2   Hк jJ?. a  F2p-q& 2H  0޽h ? 33   0(   x  c $P   x  c $  H  0޽h ? 33  |t  (   x  c $P   x  c $p  p2  H jJ?4 GW rvB  NDV?N vB  NDV? pB  HDjJ? pB  HDjJ? I R pB  HDjJ? H  0޽h ? 33\     (   x  c $dP   x  c $   p2  H jJ?  vB  NDV?vB  NDV?T` vB  NDjJ?TH vB  ND>?vB  ND>?@XvB  ND>?H  0޽h ? 33  RJ0 (   x  c $P   x  c $d  r   6A  ,??  ,0  TĿ Ԕ?  P  &where cos a = p " q8 2     *       H  0޽h ? 33  @ 0(   x  c $P   x  c $  H  0޽h ? 33  P 6(   x  c $P   ~  H jJ? [  float f = 1.0f - 0.7878088f*cosAlpha; float k = 0.5069269f; f *= f; k *= f; float b = 2*k; float c = -3*k; float d = 1 + k; t = t*(b*t + c) + d; 2 H  0޽h ? 33  ` 0(   x  c $P   x  c $`  H  0޽h ? 33  d\p (   x  c $-P  - x  c $`- -   T- jJ?Vz 8Demo 2H  0޽h ? 33   0(   x  c $ -P  - x  c $ - - H  0޽h ? 33   0(   x  c $-P  - x  c $\- - H  0޽h ? 33j   (   x  c $D- - x  c $-P  - r   6AL  -??0  -H  0޽h ? 33   0(   x  c $-P  - x  c $D- - H  0޽h ? 33j   (   x  c $4-P  - x  c $T5-pp  - r   6AM  .??p X  .H  0޽h ? 33"   b(   x  c $:-P  - x  c $x;- - r   6AN  /??bh  /r   6AO  0??u L 0r   6AP  1?? dR  1  T,- jJ?Vz 8Demo 2H  0޽h ? 33   0(   x  c $P   x  c $f  H  0޽h ? 33    0(   x  c $dhP   x  c $ iP0  H  0޽h ? 33 0  (   X  C *P     S C @2    H  0h0 ? ̙338xWkW>f6lݘMui .)JЂQԷ+IqƬHA(`)}_%P+?в$4ݞs95nr3߹;޹{^r㻁 {jMUWkoɪPFކJت35oe x(5nz?T[y/ܾ.ErNAnE9)i_/pyOWHcj5?4Ҍ| %eYA~zlU? :5jj7O$`9 77~ԷPMx߄꠾65y"gIהzW兪\Qt>7東B~rkZb>g sEgddq0dU)}8Ty vgÌ4UC*/3ծ0k'X\c!mjJ wPRwHIbzCH[gHʦ|z%§ozŐOL&Js4MU/N0FcmzMn]k@-4NG8.K][? ^V}Kqص5~؟"e=AΟص5׸NΟص5׸|m; /QΟص5׸ο]r%ǮqƏJ%YPg yl+H?lqź2S+N/q ŁpO{b|<9v..>Jr+x8''Ntc|>Z(0oKߎr _''x|O y /t:n0ߨ:,=ZH/syB+4օ:5F?zAS AO?o?֧KKKĄt /f@Є46Xݦ~]Ǝ|=|4EW}.y<{f,L3x&5賖N>|h l@="^ֲ4-;K*lOͯ.f q[3e}uYMxWMlLQ>7a~U?IR6U$VD!U#JӚJ3 A섮`'a!6l3ι:Dɼ{~߽ν'?*Y+a6TH+\T*^seV)j547:GmV~B#{Ҁ|ypX{3@L[`23K8S]x70y3tҜjOw+'E o m[q# E?ۦD<+1= 0ڎdᄊR1T.ăYl4p㕥gᲇȢ hlnAU)OgCGdԮpq;:f$u>]s8%z7e)r~ u5M}Ndez,^6?VnXëRC6b`*ِ*/q4vc+uPON5Jy|/z` 4 t+Kc9 la5Lj K9|3 )mj=W6^/6oEsu.(k뢓xVAOQv@A)ULh1& jKSB vQx@Hԣ'OГQ@<ȍ:3Y Lfvv{f{޷Ut4(bTr\.{*l5?ƥ!sP ~Kb<_wE߶xZqh0b) RſBqLG1>4~JM|l:VSw%n (-ǐ#G;PM#IIJka{4dRsmM9|X9?R>^qyyB6/ R=Pְa!oh+YmTMlJRFHt`MʺYzߵЩ:U"2ܾ!I: eBLJ/$>BvҚ:oZVdϫJF/nⲒؽH1H*v%S|PAHҖ9;OH5^t֍埭3ޯ);  <^Uº"h)d  kM. 蒭,l rnIGu40I\ ރrxU@2?OĤ󿃽j_o:eEx]HQm}9GPL}%Z҃tFD3g-tNz zA{!""DRDHCCֹ?>-6<%=r2FΒo ^x዇y< ۺ3T88Uf;ؙkd2||'}'>z^ 5p󆸝Be'A.7 ^?;1 ?*0OFNdJNJJf)𓭎}Q"vmǠOqr%08I5o8Ns_=-0o҈K~H"Y {M@r#^e~`EP kOxVoA3 ,hK/ԋֶГ-_ S&zăW zlboFfg-$FCS2YC:u25deF~nIf8," t7QYs!=*cfО drKz|O\wyITI&1N+kz m|U!\{ϑ Co{vlz^O9ᖍST점ZK+uh-:ofG;m=9[Ī<d#D΀q~rQ7%B*XTpL=e/d&@sGg)&Yn59 ˜Ti; {)(dT뤌C;Ri6NC 6!72~d%Vzg?q EθiCZxX]L\E>3+R+j -m0 P$ t n K| @DVI}hZDʃIh|2&w6&wι̜93w._*zL7G{l΂O * gs+mME !Ӛ-%cܠG_ ؎@&(X`Ÿˠgպ\3A##߂ +JrdNo nG@ފ\|6;w!W`{/v5JA7|kTsXDVJN׾ɡ+1ЗF;=XٜaTm#Tp:<|'HFwE)=vrA.Xya{❕ѧ=$.R=S2 c{2H:ds,+*nOb1.D+مyw*~{`V6œ;a{琣<,w ل'}+3UN{W.5]{S6vrm-Sh!mزYbW푬ґVXtǕ(ss%Rdz&kB.V1a){Ѻdm: =fJnyc.;ݐ2GoM)k^$e`Iˍ9kǜܘ-l]VǍƌ98x45p!µ =VP/t"iNZ5/ /h)|Rx*1XZv&$ t qwxx_q.q. {:~X3411q[mxQܷy|I](; @&‚Wj>c-(#꘿xjtx9knTe ;A؎9lH(MTKlqzHK_d8a ;X{@Zr__e '>»eُOjo~­W$_tÝv>t@4-b$7*a5FЍ!.PzRk>j?8{CA%̞}žyݑt WI[ !5ecxuot͞9n V=ֹZ|$֖jUzQxVMhA~v&1i-bHӓ`%E#X&b6?M[zSxEJIyo~6I*%oyf&͛};z9`s=hlǔPVt(|'wSUzky詁 I(Q[y^m9|{ƗwНr g7 @/2#7%~^OnEN>U="~75\G?"9L~~I䈚V &=Ɏ?F2zs8 *VZJVJT4&BB'1Ṣ;~YWbj,EA|{(Y 1#݇&k i EYDhw㙰MC>O>'lLEnNpCSXWG/7y-3f2'.#q۱g4nOrDͳʂn;v Qq޻_$/S%vJ޶J'9k  긥*q۟"mC=T$wXFlDƮEn*%~#=Zg7~4'NB|s vӘp6 u,1S$eX,KVVխl{w=q\q3%d~8!>~Lx=LSa{WEdxa08`0Z7Ckh D0dj $2bLeqgt1980`L4}^" QB½\}~}wkڿ@ EKdBjP,mq&tow = IzBr ǩbx[Z\ǧMa=Tgϔ0l (J_0M~L}SYRӨFAt쳯ۆ ?σzBpMA΁@PxUן/n*{ oΦҩɌf⩤tiԑ~>1S}˥WJV^aUQf\JM.fJ m!^Ѧe^Gp D='(T:0MӐ=?@}VXL#S(ֵt]% įXOD %)r~BA@^\x""yk$&7>#dŲ+9ů3Wϋ%}Z]?i0),=^bmi7+?Pv '~i'ijV_Fs`BuũxعU|zaW3!e霩=E-<;\ \:K0g*Vgn1iD.DT:d"6oh~!GnaSO. WHYphhGKVJH,vSk|(Oa?0s_AI5eYZrVGÜ璘xVKo@];iԄ RICʅCQyCBiT5qZ ? E=;B qH}uS@+R>ku̬_8Ѕ3@gH۝NS{=,?y0jivw+%Cȭys[bw->:=2,C1PsPE? p=0 Yd1g뗤Nes`A_6Z[02P((z]]q*9;f#)]0ҵ|dVD҅;1?~YQW9 | a&+WxG,u4QL#k cC(?v<<cX%PFialQ1lM2ƵMns7ûsJ/EƼYWiSJNQ)m`3c1{ʵWUfO0;v?$??x J^'4h܂<_y|u'w/x9\09Zo<ؚM d {Xζ24?I#{6{is>* 1 M!D!53@ƁIA얅$Ѝ:4`xw@VZ7|{G`%gOe)³>w|xWMhSAݗ6M۴ ςVJE+*ڟSOJ4&m$^xWED*7&TAz 3^ަ&P 0fۼ}StA{ȣC`@&r) g٬%n҆j],Cv+Ymҿ!/&4>C*IX1\k. R}i^~{ r \O'y3g<ž?318WZO=b*?ُ1Ẇ!A+TZwqFS?@ه 'jrdNj`M'N%ߤk +Og8G NCHhk95>@xtMT{ʫɟ< 8܋!#lrgk~_gۛfiMYpG][Rҟ=L\cn{]׭_AvR.l 9;+":]Jnu|J-*|w[/rOr?E Kx-o#G"om6>>U` ɜ-:>T.I] éx"!Do6ku (LN;%Bo~x{BsELBEU_M۴S-rxlڏ`Gݖc1yO%׻uJJp -P{%g8u|έtJ; ]NM]jo9iAyכ~.BxVMLSAW }- QBzx`)E F1@`1%ЖyB8Grƅx0&.&1уQOx‹nj{'F Lw7;]ғPBAB^) Ţ%.ѡ_^lTp:C_ 4S`}8f--5bd{r& QM'ӟr5e"I\(ܪ~ڧH>kƏ>W_' Q+ ZW4/}s5>ȵuAWԫ@n.bwQh s)'}p2Ĭ1IӘ˅+='?ys*ˌ卾t<̤HTҥ![&.:4\Ѷ[#v))w:C0Ao#H=2ǭ_4bƎ}Nc;>[skt5Er ;l'﬍# .2S EAG?U~ͱYpAU$i;$j!3O,Xh;.ĮPKG֗~}~>ƘtI7D~|+B̎y-Sη9;W?nsڶr=\7 Ǘ_Ai|)U>UJoxV?lRAyЦQ0tp8h0- S)@)Nd4...Q4TcNuq4&f}wҞrnLr i^Zڗ&{!6,.'ҫ;I7_`Uk"kHo/R/uR-]*RV\84Utp.ΛWh rd뇤0jp443~ZA[qл9i1X7ӳpK %+xW5_2}lCL? }bP,'ZxXMlE~ov㟍K'P]BiH4EH * qhRj¨MdDJmO9pzpĪHH(BH8B.fg MPU)z潝77.mB hR)ipnU7iBIR^8iR7P_l2]*[bX|욟.;x [LyA~@? ,_4#z3@)j|?B1_L_tR]&n֭g>xzIS[H!~`^O ~m>HvRaGN]YQǔmS6^}$\R9+bPg JiLj[{5pVju{z\X){&&e)=7`b|yn{ä{Ȥ̵j @ 8ۨ NwXZғB]-4lMRb WXU6swej]$}j1쓂s5ǨݓSr$[Fg<㬇G m>9Vxgӌs]/^y=V;o 万pOXHoExŒz8%qnRx8WjYo7˲ ;}ϙ %\~cYv\N㮃e !̧,;~eL a YvPfco/0K7zv[ũAl`N eQ챐c{曲jfПViK6JG*`q?u 12ۨ %F|)_Xˁe晙dřI~iĩǁ`P ^nw~~QUl\;7?r D-E3+1Ds(NeFH:^\YSYڛM.xVkSAݗkIZJXE4JYH&iK" уxP=x?nգ^<3חPEJ%ylٝ}ކ?>|2 ,P XBRJZmi)C_j,)Q2؍r :z Honx~0Ք˰8bny?K$hO^~Aw>ǻk}MZc\T tbcnlAlx@XҚ"5" S^cǟ\!PD1ZcJW NyoKW=0+(RؔRFH|kFE?kƥݲ6/(`/N{`@ga? tx}^R7Y# !f<);"w#^O^Q OgR+*YL" PVoMǸV ;8{6W0m%fppǏ_ * ٙdnޞn88w M}&<М!*.)М](2>{KyW?5uiFD ɽq*CU0z02èBV 7,~4V]Oyj::,AVQ.4U 5F4gah*YaE A"hrUlSf:;F7Y~wyÊA'Ad .S,+LR+ЁO'K?>uB1C s G/ ;&mU)>kuzܳ493 C(+fҁ3s>vBi? Q.eH9OjUXC'ߑSj2?-O.yȇ A|T5- r[J5>[hv1\UMچ.E#1D_l(2ot˘yѨ=r_83qAd/}Ҥs |{[l*")zϜۊ߸d p7ߋ+3Mhr8KFJ:<Е„-϶L[wm#ݵy,x[]iiLg(M8P|5#<6P|*t5՚II|_ @J52ħL`U?]Fa?ЮФ[W|0mlitFxKh[;i5~icB"jLUEъ~*"Z5őd% b+ 7\Q\A]nąI<~I:AEp8|{G;&/]j`5P'c D˕JE+SW'f!M_͹M_liJW7;F?B~[7m>y, PM&dC1`gz֟,6tRMAsU6\$ !~Gj >j6qY}@31LV6vZNk:'f*F)xD_\ѲN',1{G&=b/+){Slq3H.:^OVZ?D{i&ެg%o wHBĥ~e a^t~N?Wh\)BG"] 4yO88e3!2\)c xZoCuI\u.(|][]vsU֣|s/U=+:IRp\[GNNR1=gYv΅v9GkڪSEדϘסL&WzЅV!gcuVODK齙AoG:bAJE)+r]\̛VKT=xe d8ZPl":Ofc[#J3Ͼrp;wFl= 0V}0 4gW]|d||"D#fcO]4t%XNJH? |#2 'Z+'CW[ǮDHcqmK"VM~b Hҧ$!WO4Ew`xMlE̮:NlI7WU&?*2*A*RZDJP7>Ej{B!TTD@(~ziUqKA@"lޛ̸Q=yy3{3; f~y,ژR! V׃(_ 0 3{ƣҋEv__ΟuY){[ u߅_xe)Og SA+9&z%uT? tP\jj '@k rM{jOЏA]ufQ7nA}e_Gka-˕׸Ʀ_=R+,eGgN3CD)0 `h;_gq([ |!VE#T+]L-eE0gw:x. uɫ>>]DЗoOM&xԝasdoqpx8dr"˲m7#O?Y?MH9O 9|?`ȏLxkEu;ߧMޜ4g|>[J+;m&/|EwXٺ1/Ӆ\vOW,L`I 1Q)z;R@FByZ6S1JbX39>?!y"i&o3yGDg79kɟtei1FS&4sL.2Lk$[OcETBΦ)Wثcw+`e>ۧ;.j.?o VBF\g[Rx}i?}#}x5Ldc!Gw1G`?)&cC k _ qG fg{s|AFGg? ݉8\]:?ʻų2~r ,LQ f;N`a"阮n~jRox8??IF4&Tu(Qě4ރgNGMʳ~hblB]dwִ^e.*jV,j4k[aVZm]VK-.Oyn]˻MԕjIxqয়g7"xVKkQ>N6hCRXvE*)4&SKpS" ."E\J|!sν3NRԉ3ܙν;4Z,Po iDF47r;>~{tyu$[rk*@q֢| HnKޱ[W/A'\5H+&Hc迀g^O衐^e)|0˰iBUzl?~ H8WG;s)װP60!?N`Xd{ >˯/ɗzcJ>v>wϽ{1iDg Ĵ p_l0L'k,,o톽ִrblW,tTzDzG^Ԃg!8uk)oq$x2 ZL*QU!IŔd1KKvIL`ZW^cSmNݰL JkZݒt?U!JRjX;ֲ])VdF85D2LgvRLP1~4k{3OЉ>KwIOЪڛǎ~?=75!' h Օ脔B,U[`C8ܟ9;ytU"u}N;IscB &,0 SNraEtVn-:=? b݇aioEf@xV;oAv6laEtXSAJőu8}q9 ( jPGECሆ"η3fvgfhɳ* tq:_ v;@Q}c{XMOfP&8\k{nw{/më)7R_A"Oy_#+ ;7;aynK| &~5wϵk zO1cN{6Eaכg|gv앺5S*v՚N I] N'd'qxy-?rd 3#=\bI (MVd&'޼t,M Kzq 7oxLsRcJ݂૴t>R"rX{֢])Vmps1oN}j+6;ފ+ g9/QyaR[JLFe^,vjR6NiyM|RT3М)UㅆS/U\OF!Wh,2fUtU" F.w1"a)w_yfPty- u+[{z>~4;Pg5xVOA3ۖv[ !6=`0& ŔPC[.d1\Lzů1q<(-nvVJL;f}{3M[:?B *<(WRV-vumb =_+خ};49L0`_RQKjnj֢_3α7gߕ?e֙r UN'yc.ԭH>yOgT+1)(BSW~&o[[(all`kq@3P |i &&2jkr܌i f:5"NO<^—^JeȺv(uL5a&k/mBJCi.U1q':'ּ?O6R4A<2BinhLFTiqa7nj},JgREc,uɘeYdI8YPa6>r&`&bٶ6uZ`;A¦n:wˏQW,ֈN2ӹ9V~fGKDOͷ]SXi/𩡳ت Z2Z0t{|mg1 -EKrEI+$$gmhxK_i! C uwP߁c ]*30ċVllիi/:r4 P <Ȯ'p_ dgknqvy}8ՉRXCXP aFq3y!'13[8=iAaC_FWHK MOuQmSU Z\R]\tOh+'0, hp  0 < HT\Math for ProgrammersPJim Van Vertham9C:\Program Files\MSOffice\Templates\Lecture Template.poteJim Van Verthes232Microsoft PowerPointfic@DI@htq@(>sGg  \& &&#TNPPL2OMi & TNPP &&TNPP    --- !-----{yH--j}w@ }ww0- @"Arialw@K ,}ww0- .2 Orientation and 8((((((((. .2 rA Animation0(;(((.---- @"Arialw@ }ww0- .2 Jim Van Verth  $    .@"Arialw@K .}ww0- . 2 ( . . 2 jim . . 2 @&. .2 ? essentialmath   . .2 &.com)  .--"System 0-&TNPP &՜.+,D՜.+,L    On-screen ShowRed Storm Entertainment/+ 2Times New RomanArial WingdingsSymbol Courier NewLecture TemplateMicrosoft Equation 3.0Orientation and AnimationInterpolating RotationOrientation vs. RotationIdeal Orientation FormatMatrices as OrientationInterpolating MatricesWhy Not Euler Angles?Euler Angles vs. Fixed AnglesEuler Angle InterpolationEuler Angle Concatenation Gimbal Lock Gimbal LockAxis and AngleAxis and Angle QuaternionWhat is a Quaternion?What is a Rotation Quaternion?Creating QuaternionCreating QuaternionCreating QuaternionMultiplicationIdentity and InverseComputing InverseVector RotationVector Rotation (contd)Vector Rotation (contd)Vector Rotation (contd)Quaternion AnimationQuaternion InterpolationLinear Interpolation (Lerp)Spherical Linear Interpolation Faster Slerp Faster Slerp Faster Slerp Which One? One CaveatOperation Wrap-UpQuaternion to MatrixMatrix vs. QuaternionQuats and TransformsQuats and Transforms (contd)Quats and Transforms (contd) References  Fonts UsedDesign TemplateEmbedded OLE Servers Slide Titles+8_AdHocReviewCycleID_EmailSubject _AuthorEmail_AuthorEmailDisplayNameL5SlidesE lmb@ndl.comLars M. Bishopp%_㼰 Jim Van VerthJim Van Verth  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Root EntrydO)Pictures0Current UserSummaryInformation(PowerPoint Document(DocumentSummaryInformation8