/* Ċ Open ĠAsset ĠImport ĠLibrary Ġ( assimp ) Ċ ---------------------------------------------------------------------- Ċ Ċ Copyright Ġ( c ) Ġ 2 0 0 6 - 2 0 1 8 , Ġass imp Ġteam ĊĊ Ċ All Ġrights Ġreserved . Ċ Ċ Red ist ribution Ġand Ġuse Ġof Ġthis Ġsoftware Ġin Ġsource Ġand Ġbinary Ġforms , Ċ with Ġor Ġwithout Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ċ following Ġconditions Ġare Ġmet : Ċ Ċ * ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove ĊĠ Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe ĊĠ Ġfollowing Ġdisclaimer . Ċ Ċ * ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove ĊĠ Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe ĊĠ Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ġand / or Ġother ĊĠ Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ċ * ĠNeither Ġthe Ġname Ġof Ġthe Ġass imp Ġteam , Ġnor Ġthe Ġnames Ġof Ġits ĊĠ Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts ĊĠ Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior ĊĠ Ġwritten Ġpermission Ġof Ġthe Ġass imp Ġteam . Ċ Ċ THIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ċ " AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT Ċ LIMIT ED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR Ċ A ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT Ċ OWNER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , Ċ SPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT Ċ LIMIT ED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , Ċ DATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY Ċ THE ORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ċ ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE Ċ OF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ċ ---------------------------------------------------------------------- Ċ */ Ċ Ċ /** Ġ@ file ĠPoly Tools . h , Ġvarious Ġutilities Ġfor Ġour Ġdeal ings Ġwith Ġarbitrary Ġpoly gons Ġ*/ Ċ Ċ @ file : Suppress (" NOTH ING _ TO _ INLINE ") Ċ Ċ package Ġass imp Ċ Ċ import Ġglm _. vec 2 . Vec 2 Ċ import Ġglm _. vec 3 . Vec 3 ĊĊ Ċ /** ĠCompute Ġthe Ġsigned Ġarea Ġof Ġa Ġtriangle . Ġ*/ Ċ inline Ġfun Ġget Area 2 D ( v 1 : ĠVec 3 , Ġv 2 : ĠVec 3 , Ġv 3 : ĠVec 3 ): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġ 0 . 5 Ġ* Ġ( v 1 . x Ġ* Ġ( v 3 . y Ġ- Ġv 2 . y ) Ġ+ Ġv 2 . x Ġ* Ġ( v 1 . y Ġ- Ġv 3 . y ) Ġ+ Ġv 3 . x Ġ* Ġ( v 2 . y Ġ- Ġv 1 . y )) Ċ } Ċ Ċ /** ĠCompute Ġthe Ġsigned Ġarea Ġof Ġa Ġtriangle . Ġ*/ Ċ inline Ġfun Ġget Area 2 D ( v 1 : ĠVec 2 , Ġv 2 : ĠVec 2 , Ġv 3 : ĠVec 2 ): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġ 0 . 5 Ġ* Ġ( v 1 . x Ġ* Ġ( v 3 . y Ġ- Ġv 2 . y ) Ġ+ Ġv 2 . x Ġ* Ġ( v 1 . y Ġ- Ġv 3 . y ) Ġ+ Ġv 3 . x Ġ* Ġ( v 2 . y Ġ- Ġv 1 . y )) Ċ } Ċ Ċ /** ĠTest Ġif Ġa Ġgiven Ġpoint Ġp 2 Ġis Ġon Ġthe Ġleft Ġside Ġof Ġthe Ġline Ġformed Ġby Ġp 0 - p 1 . Ġ*/ Ċ inline Ġfun Ġon Left Side Of Line 2 D ( p 0 : ĠVec 3 , Ġp 1 : ĠVec 3 , Ġp 2 : ĠVec 3 ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġget Area 2 D ( p 0 , Ġp 2 , Ġp 1 ) Ġ> Ġ 0 Ċ } Ċ Ċ /** ĠTest Ġif Ġa Ġgiven Ġpoint Ġp 2 Ġis Ġon Ġthe Ġleft Ġside Ġof Ġthe Ġline Ġformed Ġby Ġp 0 - p 1 . Ġ*/ Ċ inline Ġfun Ġon Left Side Of Line 2 D ( p 0 : ĠVec 2 , Ġp 1 : ĠVec 2 , Ġp 2 : ĠVec 2 ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġget Area 2 D ( p 0 , Ġp 2 , Ġp 1 ) Ġ> Ġ 0 Ċ } Ċ Ċ /** ĠTest Ġif Ġa Ġgiven Ġpoint Ġis Ġinside Ġa Ġgiven Ġtriangle Ġin ĠR 2 . Ġ*/ Ċ inline Ġfun Ġpoint In Triangle 2 D ( p 0 : ĠVec 3 , Ġp 1 : ĠVec 3 , Ġp 2 : ĠVec 3 , Ġpp : ĠVec 3 ): ĠBoolean Ġ{ ĊĠĠĠ Ġ// ĠPoint Ġin Ġtriangle Ġtest Ġusing Ġb ary z ent ric Ġcoordinates ĊĠĠĠ Ġval Ġv 0 Ġ= Ġp 1 Ġ- Ġp 0 ĊĠĠĠ Ġval Ġv 1 Ġ= Ġp 2 Ġ- Ġp 0 ĊĠĠĠ Ġval Ġv 2 Ġ= Ġpp Ġ- Ġp 0 ĊĊĠĠĠ Ġvar Ġdot 0 0 Ġ= Ġv 0 Ġdot Ġv 0 ĊĠĠĠ Ġval Ġdot 0 1 Ġ= Ġv 0 Ġdot Ġv 1 ĊĠĠĠ Ġval Ġdot 0 2 Ġ= Ġv 0 Ġdot Ġv 2 ĊĠĠĠ Ġvar Ġdot 1 1 Ġ= Ġv 1 Ġdot Ġv 1 ĊĠĠĠ Ġval Ġdot 1 2 Ġ= Ġv 1 Ġdot Ġv 2 ĊĊĠĠĠ Ġval Ġinv Denom Ġ= Ġ 1 Ġ/ Ġ( dot 0 0 Ġ* Ġdot 1 1 Ġ- Ġdot 0 1 Ġ* Ġdot 0 1 ) ĊĠĠĠ Ġdot 1 1 Ġ= Ġ( dot 1 1 Ġ* Ġdot 0 2 Ġ- Ġdot 0 1 Ġ* Ġdot 1 2 ) Ġ* Ġinv Denom ĊĠĠĠ Ġdot 0 0 Ġ= Ġ( dot 0 0 Ġ* Ġdot 1 2 Ġ- Ġdot 0 1 Ġ* Ġdot 0 2 ) Ġ* Ġinv Denom ĊĊĠĠĠ Ġreturn Ġdot 1 1 Ġ> Ġ 0 Ġ&& Ġdot 0 0 Ġ> Ġ 0 Ġ&& Ġ( dot 1 1 Ġ+ Ġdot 0 0 Ġ< Ġ 1 ) Ċ } Ċ Ċ /** ĠTest Ġif Ġa Ġgiven Ġpoint Ġis Ġinside Ġa Ġgiven Ġtriangle Ġin ĠR 2 . Ġ*/ Ċ inline Ġfun Ġpoint In Triangle 2 D ( p 0 : ĠVec 2 , Ġp 1 : ĠVec 2 , Ġp 2 : ĠVec 2 , Ġpp : ĠVec 2 ): ĠBoolean Ġ{ ĊĠĠĠ Ġ// ĠPoint Ġin Ġtriangle Ġtest Ġusing Ġb ary z ent ric Ġcoordinates ĊĠĠĠ Ġval Ġv 0 Ġ= Ġp 1 Ġ- Ġp 0 ĊĠĠĠ Ġval Ġv 1 Ġ= Ġp 2 Ġ- Ġp 0 ĊĠĠĠ Ġval Ġv 2 Ġ= Ġpp Ġ- Ġp 0 ĊĊĠĠĠ Ġvar Ġdot 0 0 Ġ= Ġv 0 Ġdot Ġv 0 ĊĠĠĠ Ġval Ġdot 0 1 Ġ= Ġv 0 Ġdot Ġv 1 ĊĠĠĠ Ġval Ġdot 0 2 Ġ= Ġv 0 Ġdot Ġv 2 ĊĠĠĠ Ġvar Ġdot 1 1 Ġ= Ġv 1 Ġdot Ġv 1 ĊĠĠĠ Ġval Ġdot 1 2 Ġ= Ġv 1 Ġdot Ġv 2 ĊĊĠĠĠ Ġval Ġinv Denom Ġ= Ġ 1 Ġ/ Ġ( dot 0 0 Ġ* Ġdot 1 1 Ġ- Ġdot 0 1 Ġ* Ġdot 0 1 ) ĊĠĠĠ Ġdot 1 1 Ġ= Ġ( dot 1 1 Ġ* Ġdot 0 2 Ġ- Ġdot 0 1 Ġ* Ġdot 1 2 ) Ġ* Ġinv Denom ĊĠĠĠ Ġdot 0 0 Ġ= Ġ( dot 0 0 Ġ* Ġdot 1 2 Ġ- Ġdot 0 1 Ġ* Ġdot 0 2 ) Ġ* Ġinv Denom ĊĊĠĠĠ Ġreturn Ġdot 1 1 Ġ> Ġ 0 Ġ&& Ġdot 0 0 Ġ> Ġ 0 Ġ&& Ġ( dot 1 1 Ġ+ Ġdot 0 0 Ġ< Ġ 1 ) Ċ } ĊĊ Ċ /** ĠCheck Ġwhether Ġthe Ġwind ing Ġorder Ġof Ġa Ġgiven Ġpolygon Ġis Ġcounter - clock wise . Ċ Ġ* Ġ ĠThe Ġfunction Ġaccepts Ġan Ġun constrained Ġtemplate Ġparameter , Ġbut Ġis Ġintended Ċ Ġ* Ġ Ġto Ġbe Ġused Ġonly Ġwith Ġai Vector 2 D Ġand Ġai Vector 3 D Ġ( z Ġaxis Ġis Ġignored , Ġonly Ċ Ġ* Ġ Ġx Ġand Ġy Ġare Ġtaken Ġinto Ġaccount ). Ċ Ġ* Ġ Ġ@ note ĠCode Ġtaken Ġfrom Ġhttp :// cg m . cs . mc g ill . ca /~ god f ried / te aching / cg - projects / 9 7 / I an / app let 1 . html Ġand Ġtranslated Ġto ĠC ++ Ġ*/ Ċ // template Ġ< typename ĠT > Ċ // inline Ġbool ĠIs CC W ( T * Ġin Ġ, Ġsize _ t Ġn points ) Ġ{ Ċ // ĠĠĠ Ġdouble Ġaa , Ġbb , Ġcc , Ġb , Ġc , Ġtheta Ċ // ĠĠĠ Ġdouble Ġconvex _ turn Ċ // ĠĠĠ Ġdouble Ġconvex _ sum Ġ= Ġ 0 Ċ // Ċ // ĠĠĠ Ġai _ assert ( n points Ġ>= Ġ 3 ) Ċ // Ċ // ĠĠĠ Ġfor Ġ( size _ t Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġn points Ġ- Ġ 2 ; Ġi ++) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġaa Ġ= Ġ(( Ġin Ġ[ i Ġ+ Ġ 2 ]. x Ġ- Ġin [ i ]. x ) Ġ* Ġ( Ġin Ġ[ i Ġ+ Ġ 2 ]. x Ġ- Ġin [ i ]. x ))+ Ċ // ĠĠĠĠĠĠĠ Ġ(( - in [ i Ġ+ Ġ 2 ]. y Ġ+ Ġin [ i ]. y ) Ġ* Ġ(- in [ i Ġ+ Ġ 2 ]. y Ġ+ Ġin [ i ]. y )) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġbb Ġ= Ġ(( Ġin Ġ[ i Ġ+ Ġ 1 ]. x Ġ- Ġin [ i ]. x ) Ġ* Ġ( Ġin Ġ[ i Ġ+ Ġ 1 ]. x Ġ- Ġin [ i ]. x ))+ Ċ // ĠĠĠĠĠĠĠ Ġ(( - in [ i Ġ+ Ġ 1 ]. y Ġ+ Ġin [ i ]. y ) Ġ* Ġ(- in [ i Ġ+ Ġ 1 ]. y Ġ+ Ġin [ i ]. y )) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġcc Ġ= Ġ(( Ġin Ġ[ i Ġ+ Ġ 2 ]. x Ġ- Ġin [ i Ġ+ Ġ 1 ]. x ) Ġ* Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Ġin Ġ[ i Ġ+ Ġ 2 ]. x Ġ- Ġin [ i Ġ+ Ġ 1 ]. x ))+ Ċ // ĠĠĠĠĠĠĠ Ġ(( - in [ i Ġ+ Ġ 2 ]. y Ġ+ Ġin [ i Ġ+ Ġ 1 ]. y ) Ġ* Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(- in [ i Ġ+ Ġ 2 ]. y Ġ+ Ġin [ i Ġ+ Ġ 1 ]. y )) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġb Ġ= Ġstd :: sqrt ( bb ) Ċ // ĠĠĠĠĠĠĠ Ġc Ġ= Ġstd :: sqrt ( cc ) Ċ // ĠĠĠĠĠĠĠ Ġtheta Ġ= Ġstd :: acos (( bb Ġ+ Ġcc Ġ- Ġaa ) Ġ/ Ġ( 2 Ġ* Ġb Ġ* Ġc )) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( On Left Side Of Line 2 D ( in [ i ], Ġin Ġ[ i + 2 ], Ġin Ġ[ i + 1 ])) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġ// Ġ Ġif Ġ( conv ex ( in [ i ]. x , Ġin [ i ]. y , Ċ // ĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġin [ i + 1 ]. x , Ġin [ i + 1 ]. y , Ċ // ĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġin [ i + 2 ]. x , Ġin [ i + 2 ]. y )) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġconvex _ turn Ġ= ĠAI _ MATH _ PI _ F Ġ- Ġtheta Ċ // ĠĠĠĠĠĠĠ Ġconvex _ sum Ġ+= Ġconvex _ turn Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġconvex _ sum Ġ-= ĠAI _ MATH _ PI _ F Ġ- Ġtheta Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġaa Ġ= Ġ(( Ġin Ġ[ 1 ]. x Ġ- Ġin [ n points Ġ- Ġ 2 ]. x ) Ġ* Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ( Ġin Ġ[ 1 ]. x Ġ- Ġin [ n points Ġ- Ġ 2 ]. x ))+ Ċ // ĠĠĠ Ġ(( - in [ 1 ]. y Ġ+ Ġin [ n points Ġ- Ġ 2 ]. y ) Ġ* Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ(- in [ 1 ]. y Ġ+ Ġin [ n points Ġ- Ġ 2 ]. y )) Ċ // Ċ // ĠĠĠ Ġbb Ġ= Ġ(( Ġin Ġ[ 0 ]. x Ġ- Ġin [ n points Ġ- Ġ 2 ]. x ) Ġ* Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ( Ġin Ġ[ 0 ]. x Ġ- Ġin [ n points Ġ- Ġ 2 ]. x ))+ Ċ // ĠĠĠ Ġ(( - in [ 0 ]. y Ġ+ Ġin [ n points Ġ- Ġ 2 ]. y ) Ġ* Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ(- in [ 0 ]. y Ġ+ Ġin [ n points Ġ- Ġ 2 ]. y )) Ċ // Ċ // ĠĠĠ Ġcc Ġ= Ġ(( Ġin Ġ[ 1 ]. x Ġ- Ġin [ 0 ]. x ) Ġ* Ġ( Ġin Ġ[ 1 ]. x Ġ- Ġin [ 0 ]. x ))+ Ċ // ĠĠĠ Ġ(( - in [ 1 ]. y Ġ+ Ġin [ 0 ]. y ) Ġ* Ġ(- in [ 1 ]. y Ġ+ Ġin [ 0 ]. y )) Ċ // Ċ // ĠĠĠ Ġb Ġ= Ġstd :: sqrt ( bb ) Ċ // ĠĠĠ Ġc Ġ= Ġstd :: sqrt ( cc ) Ċ // ĠĠĠ Ġtheta Ġ= Ġstd :: acos (( bb Ġ+ Ġcc Ġ- Ġaa ) Ġ/ Ġ( 2 Ġ* Ġb Ġ* Ġc )) Ċ // Ċ // ĠĠĠ Ġ// if Ġ( conv ex ( in [ n points - 2 ]. x , Ġin [ n points - 2 ]. y , Ċ // ĠĠĠ Ġ// Ġ Ġin [ 0 ]. x , Ġin [ 0 ]. y , Ċ // ĠĠĠ Ġ// Ġ Ġin [ 1 ]. x , Ġin [ 1 ]. y )) Ġ{ Ċ // ĠĠĠ Ġif Ġ( On Left Side Of Line 2 D ( in [ n points Ġ- Ġ 2 ], Ġin Ġ[ 1 ], Ġin Ġ[ 0 ])) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġconvex _ turn Ġ= ĠAI _ MATH _ PI _ F Ġ- Ġtheta Ċ // ĠĠĠĠĠĠĠ Ġconvex _ sum Ġ+= Ġconvex _ turn Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġconvex _ sum Ġ-= ĠAI _ MATH _ PI _ F Ġ- Ġtheta Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġreturn Ġconvex _ sum Ġ>= Ġ( 2 Ġ* ĠAI _ MATH _ PI _ F ) Ċ //} ĊĊ Ċ /** ĠCompute Ġthe Ġnormal Ġof Ġan Ġarbitrary Ġpolygon Ġin ĠR 3 . Ċ Ġ* Ċ Ġ* Ġ ĠThe Ġcode Ġis Ġbased Ġon ĠNew ell 's Ġformula , Ġthat Ġis Ġa Ġpoly gons Ġnormal Ġis Ġthe Ġratio Ċ Ġ* Ġ Ġof Ġits Ġarea Ġwhen Ġprojected Ġonto Ġthe Ġthree Ġcoordinate Ġaxes . Ċ Ġ* Ċ Ġ* Ġ Ġ@ param Ġout ĠRe ceiv es Ġthe Ġoutput Ġnormal Ċ Ġ* Ġ Ġ@ param Ġnum ĠNumber Ġof Ġinput Ġvertices Ċ Ġ* Ġ Ġ@ param Ġx ĠX Ġdata Ġsource . Ġx [ ofs _ x * n ] Ġis Ġthe Ġn 't h Ġelement . Ċ Ġ* Ġ Ġ@ param Ġy ĠY Ġdata Ġsource . Ġy [ ofs _ y * n ] Ġis Ġthe Ġy 't h Ġelement Ċ Ġ* Ġ Ġ@ param Ġz ĠZ Ġdata Ġsource . Ġz [ ofs _ z * n ] Ġis Ġthe Ġz 't h Ġelement Ċ Ġ* Ċ Ġ* Ġ Ġ@ note ĠThe Ġdata Ġarrays Ġmust Ġhave Ġstorage Ġfor Ġat Ġleast Ġnum + 2 Ġelements . ĠUsing Ċ Ġ* Ġ Ġthis Ġmethod Ġis Ġmuch Ġfaster Ġthan Ġthe Ġ' other ' ĠNew ell Normal () Ċ Ġ*/ Ċ fun Ġnew ell Normal ( out : ĠVec 3 , Ġnum : ĠInt , Ġvec s : ĠArray < Vec 3 >) Ġ{ ĊĠĠĠ Ġ// ĠDuplicate Ġthe Ġfirst Ġtwo Ġvertices Ġat Ġthe Ġend ĊĠĠĠ Ġvec s [ num Ġ+ Ġ 0 ]( vecs [ 0 ]) ĊĠĠĠ Ġvec s [ num Ġ+ Ġ 1 ]( vecs [ 1 ]) ĊĊĠĠĠ Ġvar Ġsum Xy Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġsum Yz Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġsum Zx Ġ= Ġ 0 f ĊĊĠĠĠ Ġvar Ġptr Ġ= Ġ 1 ĊĠĠĠ Ġvar Ġlow Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġhigh Ġ= Ġ 2 ĊĊĠĠĠ Ġrepeat ( num ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsum Xy Ġ+= Ġvec s [ ptr ]. x Ġ* Ġ( vecs [ high ]. y - vecs [ low ]. y ) ĊĠĠĠĠĠĠĠ Ġsum Yz Ġ+= Ġvec s [ ptr ]. y Ġ* Ġ( vecs [ high ]. z - vecs [ low ]. z ) ĊĠĠĠĠĠĠĠ Ġsum Zx Ġ+= Ġvec s [ ptr ]. z Ġ* Ġ( vecs [ high ]. x - vecs [ low ]. x ) ĊĊĠĠĠĠĠĠĠ Ġptr ++ ĊĠĠĠĠĠĠĠ Ġlow ++ ĊĠĠĠĠĠĠĠ Ġhigh ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġout ( sum Yz , Ġsum Zx , Ġsum Xy ) Ċ }