diff --git a/grid.ppm b/grid.ppm deleted file mode 100644 index 6e313be..0000000 --- a/grid.ppm +++ /dev/null @@ -1,6 +0,0 @@ -P6 -# CREATOR: GIMP PNM Filter Version 1.1 -128 128 -255 -|pHtbNaK>nRů~ӿ~ah}ie~9j`cgaQ}zLC>xkbʸDz̵ȵƽ÷zzeWJvdLkcQo`cq]ThSeB,vWCDZy{n|r|sВun}bdyqdiԺndmT~ZteF~o\ȶɼF3,kYCodRsp̻¸ıebQyk]rdi:njhc`hS>|¶{inZ7m^?xlVWF2t_L_E4u`fyl_OZR?SI0l_=ɺο|g/nJ{yyqtk}r_YeRNŲּ̼̼~k\GxbW]L0sJi·wq[ȾÿůwfP6%qdxFh3eth\ri@^y̿y\LkQ.}VscIȶųбĻ{}d_bXV[N>mO[_{ʵ¹ymqzy|yzq_{kŵfU^>'b=#nNmT6rgzaXGUI9qaQzƿ{XshLŲ¯t]otqĴʲ²|·»|fQgMw_|UtOwJ<3SF6mngczwi͹Ƚ³ȹlvvj\]N9{cGfkS}mĻ}uwlqZR~{}~v~zorszyzbHz\@W?zV@mf^Iyn\qtdKaP2ou{gɷƺ~|XqIӿȴ°rd[G;/q̶ʱüzxξ෱ȿ~iLx[9lMxcò̴ʷ~|mf_CK<7ykbwk_~qkȼn_}YyfsZzogFp\ArbIhX?|hPv|l_rgaż{jZu\FZB*wwNMHʾŶvpuXtTuMAyczr[yrUwnM~XWXF.lKmtg^Yl_Vvw|zàzмμ±um|v~hQ|bxwnijab~a̵Ѽ}ƽueDv_6wTp[yqnp;* ZN8wrTa_JzwyjhFa&|Mx_{f°z`cG/pX@mXq]q_µ}vekR4S9y˸žw|u[Y\C@;ľxiRxǾ˹xq_nfQ|rYrȹexnUqhImdCemc?}j{ku~jQ=iK1}oU{|}qѽξ˷ɹǾs[zjQ|pXcZK\TQ_Y[ὲdl~jqÿi[oN{gvmtptzl=RlZV\O>haGqlYwomtKnŸѿ}d_gLCj^|qzpflwôvx`>^vǵȾzl~n^dM?eOB{]VPsl²wgtaqεΩv|d~q`lzU~gGmfpCguź¾ͨw¼ɺ~rj]ZSMJB@ǿpy[h=p¾ƿönpOwid|OxyѽťXhĵʆsu}ea{o`XMcZKpaN{]kpkLvo\_P;V@)nV|}s{qr|slɼ̼ʲӼom\z˹ɭxe_I;HqcV|ǴlMgm^ak«pVƽȽñƹzwjg^W`UO|sdzfaXls˿welʺ|`L)}lNmtX|Ưĸuͳȭʰy{}g8pپÀyozjri~`J3kZordAű~lvo]NA.]I1z_ëywl6l_Nuyѽкǰ|jTeTB^IDA32r`JdT;`T<˻ɰ|ǵgm|{{]o[}m^xô¾»wlZwlXuwnoŽyaibRcUT{etY._\gK`Q̴rdKg_iQ+rMnb`ʹ|biJ]\ؗ’px>ˮvȸ|tv^yZ^ϸʹ}soc9nqŽ|kbSocSwdkP{V{q2sbNwhmú¨r[yȷzuhYRWQAfiTKB3cO6aF(aɱĩͳ}Pj(Rio}|u¶sg~k]ȴzj~~ym_^laxc{n_BpVrzrptnxm`O|k]iZ|iܼ>K}ǫy{l~sqVdaiBȾɷ|Ysθ~xg}fmxp}rcYqgLɹϲstvUiW)q`2ptd{^xwtr}bMwN:vnzkwf}|dVNC}lw\nOeqYgŦ^ŜffYƲѾŹsкz[mX-go}m̶{nsc|du.Vhmg{\bp}kS}jJpIzҺĭʿպԼdzªfrVzioþƸqjeyZuPzWtºլxo{rīpewY|fxspľ}hjnuXjæƟvپWʺ뼷ȶŵƸƴæzSŴĸmn^N{r±|sumwr|js[i˿̱Ȩ̾¸|qfJIJŲĬƳrf|ŚNHHMD?qjguOVԽͳηxceȼktYtczj̿aTDwuexzXƵ~un~xj]WvmfŶ{tpɛϾzmdȺ{µzj~l^ɷŽƽxtŹzou°ɺ˾ųҼķǹŴ}w׿}_ȿʻµµxkqOghzdro\}mye^|Ŧ~V^{ܿum|y||cƵ~fûɷ³eT@nf^`ʹɿ˟rv`Sr`Vl^U~n_ʴ¯̼y^ǵ猅½wvw¬xLtKX_r¿{{riij˼ʷǵysȺɷv}{Pag}R{ʲʷ˼nzf[zlrmmfLrcoBlërg~Zye¸~wqFHGypqp[Hd;̽x­óle¬cëϽrgznb~ul}fVzhZgWJgVF}yɳɵt^Q~xqgs~uprkem]Nr]v\ij|o~^i|\~yY̿ĸxrðŶʱůsqJ\N4ЬnOi;пujn¯p[2VQ>ddudofeRNm_Vƻ¸I:5PA,gkvjbVVc\RZXAG8=Ƿ̴ƻʾuî͹ `׸ӹ°kxyZsvcʼDj-ϲqbVHd^^xrb`Y|ozaìnjp[H]E+^B*v[kbΰfN,_òĺȹW|dnbwayn]IobQzqxj\sgSknsKmiyjkj_K{nfywsfaQAk[KcUL[MJUQEMG;PD8tdUxalcDqU.kRwm`WFvo\wï}~eqaRɾŶyŴƼʹwwxν|ȟ|rlWyQ7t>at>rBqviIO<lVHoSyVywr_F(t^Gnvc`è[ª|qdBɷ}}u{umTyh<scȾ}RdgRrZ@rJRhf{{o¼tgpdLukRxot|jf{wljeQgW5x]k}mVdVK~Ƿŭzyy~~mcܓ̸ſu`uO+rT8ǵкtZbVQ?bRr7Sz>nq[~qGiGy\4|f=c|mzoifxlug~fm¯ʫҶug]QkdlKDv\;wf0{uiͿþjicrNzYx[u_̾ywv~i`ecRJͯʸxaԴѷyzdo[PZ|YĢȨļн|^sH&`G~żf_¸ͼqcdOyʯ¦wknw\i]5uOrOt^i_UvmpkZFn[MrgKνūüunmyepaymgYyocźЮѵ{u}Ͷ}opUı~}w_QDZMEVKIQC6vmdsi]riZάиiun{cyoJk׷pvitf[rbRypqTĩƸ~dipOtnpjuZ˻zƨz[u]kTC9s}oTjmbDʷȾ̹|npнk}S{`ذثy{s`fZJyl\Ư^hzzlihɺűn`jXB[J:YH@D<)_XN\WSwpf{Ǽ|}yG83vtzlsm_oe[|o_ws^vuʼ|mZoVfĕ|stnXĶθhnMpv`l[wʔD>>YKH|yf^Kh^UeYYPGBvnax]w_gŧXzV{jq_¯ȣrĶvi}m`qp_˿͡{[rR}gymrwfTvU|~|d]doZ?las˽mdSugy^ǻŸǷtz`~dIiWG4-qk_|}xraq^M•sf}pȾŸyyquiryexlɶqfT{{nhhojf|sl{ƹ]bYTvo_D?,nj^}~[w]<|msmc@w[Fq¬}§pµ˽urp~Ȼ˾skrQ}mLrbSXHKu^PpdSPt\8e]þe_~j~u}ʿ׵±y{_kP2qXBvýǛ{tƣu^WMG<6é·˼üKB=9--gSRvdZlYK¾ú}usvmfocU}l|l]|ja\Yxn{|qctGqFмsP}Z>rWDusx]vn~`¤ŪкԺyjzYwlpz~mklAACwbkTN.tlaǵ~wxm~a[ŷɫİ\XLİiwkR{cô}l]mƒwkdRvͻ~PQCtkdumkȾwIJŸvjZXO>zi²¼ЕvtrrisdEǿzqhibR~novƷΰ~hdS_H:iSEq`xnmjxWѭŤȵð׬UKIymoshf`SJSG7ĹŬúmofǸw˳ɻs`OzfyxlXG7xoxg]ua~kĉ{xre\|ofwjbx|nyɸynvwngPF=fXOZJ=Ž~yseùz{{[oͿpĸķqk_п~qoQ9lV}æzȺ~rdgUQbJF^H3kFmչ˿ƻƸ϶i}Xrrc~s~tjvpdmmepkX~˿rucOueU¹rlhXAi÷tqm\~ɲ§|ns}vL:6bPNηwneVJ>dSCq[FwvTM=dTG{ee|eC^°jܟĿlqPeĬƽʷ°crdbG>M3n~c|ߣ`í{mDs[xmŶòưh_{eiPyȳsbeP;mxkH?8=5(ym_̾ĴoֿìɹƵre~jRxaAgP1xb|l|ojZC}sXnzfgR[C`G~f|îybiQv}ob{mbw{tȺ]QCl_OtwɻĹucU[F1~c}gi¬rkeõſpf{QqŽ|{j}ob~``oopXgX7~dC{}[p7l=jjyкmzdnO|kQ_E,n{sytPg}_`īɶIJ{Wi9g7bH#tUveqQwfLx|lkSrLtBnP]AnWyQH?6.#Žqg[wjzdO|kW޻|mzŵ˿Rh]={^wgVqXd{YxWnvfi\9qgNt^Plhx|eok|ap_Az[u~±ǘt\d~l}SwNtMgsŰ˹̻ŭRN`yWloWrJhoGi3uP5lTXWS3/,USX~l{tazubu\hMhM2{b˻o\NdQ@{e{h{ǥԹ{pfdǶǽŵfȴ¨{ǺyZO3[P0i\:vSzusW~ջhNLy]u}j~{jwxlfpaZ½_UKl]HsgQv}[Vfαȿ|ffbjlwǮû»˽mafaO9udPmWsR}]ȭyobDudfcZA=2A9.>2&eUE}i̺tM@/D;*eR_Hy^icqz[\ì|Ʃ׷Ѡ͑ʎӽƼ˼ǼǼ÷ǾrmonZn|scdwdyiPz[^uobԼ|ʵrĵi]MxhX{othu[qͤ}|ĵlfwpDrՏ|doySi}o}{ȹsYJ73) PEA{^׷ɰwͳīysgtdweQ_F0xhNwYt]>i}yyfWXH;z]Ozirx~s~c`XqBr{¥yĎЖٰYŵþھ}]wͺĸɽIJƳȳm\Vf]Vzx{`pX2~g>ljZ<1qM3|iֻvrn[z_XvywfTQnľþķë̻ùmQ<`FxuLwNѹx·vhYjMEiLD͹~Ӹ̳ɫҺƾóqkƸwmUKvѿĵĿϷ¸hczXqƪȬs¨ty}vi`xs}ʹdxa?{ƶĩȽvʰbyym}c}\~cXD,kS`κqtŻtUy}i;|j}tǸ±ǵ}vnýgTtU9hvw[Cn^òy~ƿ}mwÿͿ~ͼƸɳyxfNxlUG«xxpqqķŶǶ­ywʾE5&paZZLC~ijålux~|q~xxv{ҿ{xnKʱ{}{a`K ~q_;n]Izm]gUItg^~ĺrjR8tZqxmsZmBǫʱ;hhttxufö´{jлd{yoei[Zƴнķ÷ȷjubP<}xtlYK@}qjʶp}ǴíŮ«v}sitoY{iir\Ϲիyy\uX~W~g5akRoc=yoL}]|ZÜ^m_aQ:=5(b_XrhgxqŽxuѶŪl]tvu]][qqiu^?kO(sJZɯzY˻~uyt}phk`zd=x?~GлԼ]|b=xbqDzrwi\|zfwƿÿx}}hWuoUlfPxk]VPPHF~tsڻjW}m^lk~mYȶɻ{sɺ瘅dg$Wϰmҵyɳx{hub~ǸǸ̼ñĴq@65ypuoaŭ̾z_cbhnnvfglgggueN}eCq~VkȮ}xxxgSM@0sgWy|{]kYCd]}]{i]aVT}~TT}L̼Ů~nopd~}oupbYTIDAUNHsayƳ{~rѯzhRϹƘǴϽZzTƧpūx~p^Pq\Gv_Żξɼѷ}oli[XkP̵qs~ggDzUR[_]jkitmlrYWZxbhqGzQUiټ~lwi\}ɷŦ\wY|rQDYK5*gaSvkcq¢ýbOkKv^wyiPscIƹnSNJGC7y`euưȱɩʡk弻ohNjrgtdKcujxnt^Ik[|zôwųƷtl{cupPwYzfxt{SbXWSKKKSQTSMQ^UZvz[{PuJhɶjaoxflBtgx~vk_YKXRBm{tf]ǰƸh~Tª~̵weMtǴzufȵtgD}|Zvd_N>ĬɎ˻͸ģxjjxm{_|\C\DnW^TJ|ptgTȶǮķ|v^vh[ƴrgQ9tZCZVSC>;UKJuu~khYFsZbxf@{iErcwQbsjJsWvoe=7)`[HngT``Xfa[}odu~k}{xzqxznɴ°̲ݶzkqieoFviqdü~mYƲnpeOļǨϱaQDta~ͼͰveL6qVCu|zgXEO?2wi^ý}nuô̻ʾö`ư_UK˻ͮseKN=#r^EŻxoy}}oo|iH{iEbu`coİplo_|zzsm\UMud\OJD6ǷpYwj|ֽêwɥl˶úuRuItftb`~pcʽʶİ}bV-%uhķqZiT?XB-qldWaYFkaXƿzp_MbUD|fmWVA0ngtf[żúĺ²jvtj[N;iaJndZoşůz{ulȻtl~ǷıtyozjvxͼƵ|djz[tUɼ~q^rtZxeGtQϱȋȗܺ˜\qf{Ÿƶȶy]ez~mkYKxe_unx_I@*r^Fw_eP`Lf_Wwp`xazʻǫӿ}cwwUthhhͽɲXykb,%tpd߰uzlQlN]yxsgivpe͸óŹưɹǾoW`^m{wZkZHr^F\C%z`?iƺ~ljpTiˬ~ȈyˋѨjǖIحQؾtvvkso{hcP/kIwshUNXA3xδnĪosy^rlbF_<)wPIty·n`lY;wcH}~drʷŴοʾ¶ŰɭyŪpzYtQzZ}bowmdD<9j\SǵʳYguɷU7qS1vKķŲvtV{P{GkwI:=j[^tf]cT?mYϹӽūŧ^HTeQJykDtLoYyYr|¸{lxaBZG)~oNѻІۼϲtĬҽʵlY|g|jokN;|fA|byjztiXQZD7qZǪִ̦uή}˭x~iL|czsuit\lZtrpgVvúʹũĥwxqllPxbJuaIbPnhºxi@tZm~iVxf{|z`vin|cVxǟu~cyfXr^S{rkx¹ymjT?mQqe?qOвȯ{{ra{qytnӹûʸxD~k@q_~n^ƺ]QEʷòöyhǵv{xYſ¶ôqt|ȻǺ³byiK<7T?.\>$X3 LI@ubTIskۥzsaȷm׿ԺwtZAd]Կ±~k`eRD{ePo\gVFwgWn}kUK6gIckEfmmmu`пκi~}eKm`Wএѿ˹ɹ{n^o\hQej_UB3weQ|jVg[Ol^]dzmx]qwhSx}m̴ĽxʵȶuW|kM}ͳӱү{wk_X>tbTulk[kg\|{kgWJztߨlfPxõ|rҫĩخӶǴu|d\Lsya~t^H@-wp^ðlvTIJ̷qf|wóȵ|kOlǧɝϓνρzgB<{s|rfyadR<}othsR~|cŮζТdʩs~hX7>6#dO:gUAUE5g[MµöԞ|oeqc;tWon[Li`Y{jrYsbekƱͼ{mSazfN2w`Pɯ²w}~cfGqhY|iϿx]|poaVbYP}{ntn^ʾ{qqjr]—|}\ɳž`|\tƺqltu\wcwo\ǾձYnZ_z|\mOkSwȼúҀlmjRNӾk\WŮϽƹɿκyx`fT>ɾbsswisU\eh}gsy\¯ĭSnõӶýѡq\bH-~efV=qùuX0:.0\RQd_[_XErfPwryxtcin[Tÿ~jq}w_ŵ]cmWueNufyuzib`~r\ȼʳǻ¿h,]\f@lLȻƽhivp`B<.dWFrijοǺþ㸧eKcb^Rɹ˼owfR~Lşr^y|k`JcZIfxȺƹ{qhʾz^zZuY^TK}º}tscTveSsþsmaIE:DB5PM>VP@ж~uļr|vdkP?nҵbH7YE>F/)aG:jS|оƼɹڒnrqz}v{{Э̽~q~}kxfRv\AqN1OzǰźxotpЪ{zuwby}jÝqYfpçph\L}m^{dwk_ʻ|kw^~úü|aXOvȴŵ}nj]Mü¹ƶżĥlba8/0NFDaWU}wżͲaXI]VFsa|iXyM<*gYP}ldzdVt\`¡ЭmrgS\YTpla±ŵy_{k˷vk{ƮƱypeUU̲g\Hb‘l[K;xndwztz_buƭ˖~bVHN<.K~_dVM|nua|j`VɿȽ}KD:njakw٣öıѺı̾ŴxidM?5xfXǽöȻ¶|xm}tϴԣǸwʓk]RԺ}psdM~oZqǸƶmqqrUmˬ|cmz[|thXqiV|g̿ɩzj|qaXO`RIy|i{fosg[Rdawiǿ¾ͺľwn_}Ķ}l{dRybP²ŵ~ų·zwaSwcK^̿|xiVG6&v|gçqyJpöºžpkgϼ}höǹŸxv~g{v̫}xjEƸĮ}o^MEqcH}fôʺpnsj{\lzpM}^tQt|io}o\UG90~vl\eR®zuL{TqzyQǯ~¸ƻȾ~cNcNoS>rw]g̿ƳudJ}gRvaFUa㽱whUǾƺynXdio9tKdddyᤘrb|evfLnk_Ii`Q~nZAjKsUǽrSwGrOE?9zzxqt7t1_}}eydE|T\SNVOGb[KbSDD@7ldOt^|oöñaSJ|r{¾\VJk]TʶҧrLucK|h_ʼn_>}ŷk^4~`Fb>{Ltes_2&vkYtcOjReLjU8{\ү<Mt[_eH6{U.l*zW[\GMMVQ>auOsH%e>`ȾпɶvjujJkb]JD41"'E9;}rpŶ˼i`[uεd\QUJ.erpvaFVE;g^_yĹvhEȻĺ`lTMʵһoXfm{]idz{lWu}vdP}qcODiRBoʠƮhu~qeYƺ~\iE|hGh}p]_P;<,C52-#JB5`SBkVC`J5|jTys[-vc8j_rTyol}c^ULZY_446`YGj}[luOoŠʼӽĺ~||]k}xt|pdVndXtj`ɻͺ{{qu˾ürb>~mByrccTQ>58sU}m³pu±zѶçǯvZn|pub:^J'tu|ȶŽpŸKImIschVHzk^N˵uefoîۻɦwgCynlzvoevjzoOȽŰ}B870)1&YK>sabʴfǷtwaI|eU}j\wshTmzȸƸȽۻyt|nms\=xtnlͯͲiNhS6akm\>gT6~a{nɩOHyN,s^MfPBȶu|Un~ӹ˱±´zùǺ|P~j[XXD9DZɿvkG²}tpx̽gS;lWo]ppˣƶ~[SQ^UNyȾµozɿǹҼʵǵwyzh~p_xj]|pbrtp[Ht]|l]YG;jUbtLhujdfW@kƯ}ghUDwzgo̿ɼ˽wlhv^8vSϯuͼux`VķĨſed{RlsbhuirfĹɶȹ[]ɥo_PlZFhV>UI1g`NqmaMEBE=0׶Źͳȸ|f|ٹʵu¦§xb]y\žndXsaSgVD|oL{Xq˹wxPJLh`^{nhiXNtzlacPIpZfuW%xડ|rWueU{ip]O:%r]Hvɺ}fhɺȸͶñmpckcyĽ|vtfL?}e7cxu|hkZw̽Ƿø±mIwNg{uiaWK* -gS;kX8]P0PI674+KE9VOG}o̿ͽͶYdS(j^PƼgxʮ~Y_pUNHUC?A/+SL/qkS˺bRBݻŎzwvqWsðɾýʼygt¿riXlm|̰sr}}pĽʱzvƽɹhZ?q`BnYjų¼lqpjrd|^o|bzTrodNeO8jI^xMZN4IA6zthc]{w|rh`SǾqPԱwWuǧǿþƴqaIè~w]LEN;=VQ>PKGi\fhH=+zytհ~sRUNQPUSJO~q^¬˹Ƿ«a}Dbwihyrbƾ{¡̷o^Jt~nsjxêvΰ~PR}mzcٻsx!X7gJcxpnx{y͸rrKXsj]M`]Vroh]ZUd_[SKI}|ŨѫzSŖxtrЫ̾ƺĸο◂mlba[QOmca~vsYUTWUVUXMOMNf_gihdxqa;81IH6TM;v{\pŸ׾ɚڵ«|̷Ϳ˾gMpb_tcSñ±}tuvķ΂rrS81zḽ̌xo_nƸqUznDrJkI~cnJÑéMLJj^hP~qĺqhiH5&_·ж̰lǼɵcxdyQpǻƶúvk{dRp^~T۵qyknWEu]9t?vhueyikmW?gJɧʾǺò̸}gnwcKwaIjN}w^oѹXWUZWN|k__80%bXNm|ӺʺvjcYu<Ɵ~ۮ̴qɳrXlwor[gdh~ci[isdfVI}iNrĴw~pǼ¼zb@yH_dS?whUo}mƹmv̴ú~i^D3ƺy}wdWOYJElhW;/_?*xxlxhr[[[`VUYRHZUO~p_ťοġVĴī˪ŲizŰ˸Ů̠˔ܷɨvaxgzm°vʯhɮgrw[Fw]F{]nPhLkS¹^QHbQ?x\t}~zozePs]6éǺuWn|_Qsu´ͷ~kδЮo_H{lWͽ̿ˬvDzyŰlgdg^a~nnmWL{`M{wtxsozrw>4(pdT{wcKRHydOo[tapɸ̿vw6,-VKElucӺƧĵt\p_Cw^J[)Yr^dzgdWF}²ĺ}ujǽݷLǖ^ϴԱ°`UCg]QwmcibP||vh]Yyulcuiif{EsT&G/n]UøcUTMI@lljrqye^XxXscSFuXoz`u`CSB.wý|SEé͙rN>|NNqkwVz^oWuoĸͿĶȸŸ—ͮȬţںʷtwdShWGpZEhPlöٲkaU81'ibX~jtXhoVo`Y{dTuY4{dDg}ȲokW~Píkusu[NaRMpc]H>YTPlR9d1ExIzѴĹƙ{oc|ӹѷsxXtirRe~tvquŷ^wy˺vɽȽ}gowfսƹȱ`Sxlk?uOúƦs{^r{n~ysih;12yjWyҰĿξDzw~bZ}UXAua{xɽpWyp[X[KN˵yhX˿fXM_NFW=&nJ&nsUkHʪɳǿŬmgnijķq}w_seKkZ@wʶ߯ʸnָĺǿ̽ökax`˹Ƽruye[\mggZL?oT`k¶xjY?}lR|c}hxj]õż­{rĴsv\kN~UlhwlLogTĪmudRgR=ZI5{vjuqv|ʪsbǶųxdvxtbbL>s_z˻ýeyEaɾpTFqcuõŶc[N~zn`´²pDztƵ˷ͣòл˵վƶm^G`N6}Yut`^at^]bMCAlZLXC0fUC¶{wgxdŽڀ|pshTǥv\;i{ɹj|³÷haOwnytqf`pTF9wp}huNW|j`bP:l\Brke}{|ǻѸźǹvwfLp{xrmhôʿol_NppYʵʾ~ystpmla[{jˮwoų¯ùʷ̽uevv_oйܞSEEp]WoNbkkOgm{iluicgK<9hWPɻzȺ|`JrYEgb\G=$h[J³šy|dBƽĽ¿Ź̽m`WRD;{lgqaa;vwgtW\~U|ŵm`cP?QH??<7б{ʻŵb}{xoxzlzh¼νÓkQB|\ި̿o˂_WUC84~|]WYzqvemǩȮy̻ҿ|zmbPfYFhVHtmvuc˖|~a~oMEZ^ajSNRF;9zw̿Ⱥt{buǹOFAG9{aȿ¬ƶŸȻzYq]:moW{hYrxѿʫ~oSvmeXoh^ºͽ ulX5xZnUpv|qjƶĴpTHpMȽȸĺuxcnýþwolx{qbi[Ȱĸz]zʹ͢hhbTZSCseZYF?x}nYyjSk^XghjFA>oe\j`VKD4~pɹxsm{sqdUPdR>wVü´źqfj{pn:-'UF/pzxris`zg[_seuȩϾb~Ǻȷuv\jdz{enXŽŮs{i[{ŵƶǽĹwųɿżʙs|{ziǹĭŷƳ|||־ƶ}kUxk~olgee[۳zubWEJJByseuQJ8}kîĮɾdzE=25.&XQApnx]R~hAg~~ɼ¸TIGnaXUE6rƩη{zȼɼξŲ°reUq}oS?&s\:ŦӻѶusUxȴðsƗϿDZ·z˻ĭƳƘotlrTz_Lzͻkc`OOMZ]Tii]vnɟzQqpBνҰ\ZMmxmQuWXQ7{|Ҹs͇~o:."{bnnrl}\sY}nin_Zkofapf\rarbK^ijhjռϱqngxmQ³ȽͷŷlYJTI5|xmgwtm^Wp`ȷ`Իɹȿ~sa~yø׾pihTvѾ鴯öyɨʷǻȲýyjveS®K??o\^uasZygSN>.ym|wѪx}qkW%jW/to¼Ƚó|hxðſ}lh]ƺ˾ma|ntiЯrn3yfU~͵~¶x~~smʾĻƷwg\]t`I9k{WK;dZPǶ|bGgHhv͆~a]\ƩȷļüȾswjdpYQj~XH;qcXRF:ƴıǷiZ9pWzu{}~yŸɽʾȾ~tkɶɶxϭ[vEqǵνsz~jkfVW~uƶ|~k\q8zHntĮsc_NufScVEF:,ɿȾkq𪧢zvmggs_^}obʽظǿldaSLFľ޵pgRoS>|cbUOO@9NA1ϨҤcWKvicZYW~jaʻ¶th®ȻοƻĺЖ|ua{n]QVsʪox|˹v˹qų|VweYA14ws¯rk[}|br\xbjm{±muvʻ{mrnǵԹ˶vzlcpf]̈uwnm_TH:d`UȻunǽxrypgӒ~cf@lK8nVJi]Eqhk{qhr]PWTIEtp˳õ°ȼpu³ƺ{o_UC-xbK[H7xj]T_|mcv[HjMy{ky`L|ǿʶyfFk]TOECzmz|pzmzq`l`JvgPtкtͺ̿ʻspNC=bZOZTDİryap[~]rjU}~weQxjajZM{råʡtXmB\B+{~wcd_NLOƻ~eȷ뮝G90}d̼Ƿp{hͺÜskqczɺxm\Bp\7u}twdUȺʸ ulgQTL7icUȹò̸űfe`^\PWTCiu~viVv\ʯjoTιȺ[QG\SBldOβԿƮngN0jP7d{s`y{c_µo]O{{p`yj̾¼gA|~\ZMVTHYTNm´ـrgiU:{¥ųƼøպ}qYxùǿnp\y}{l\:iZ/ǬȻù}x\ɞ~heRqppgbwk_ӾûźLD9ldW~}m^GaR5jo|Zg±sf~²oueN~_evWw^tT٨|qMl\o[Zúyj`PCgYN׶ĸvjsliYIVJ4fZDq}dzVnbpRl¹ѻm`hWkvsx`µhWEjTp]t˽ZFzPzWCֹ˰~zxhXsczj[znX|~gAv_6v_6xLldq^dUPB0.IJ˲fJ>|Z̳Ĺtlg\Nuѿ¬zvqtgKnwoSͻǷ}zvkWUJ,rcNvӱzlȴ·zɵǼęu}ɹ|lð_v]?R=*}t~ԵıuxcL<]E+~gGdljw~^lFwTrƲ{dpnYžļwlzbVncvxgKsbH|bɸ̼q~oFi_<~rLqcHǿxdzcnɸk}hW}}yOòۭмɳ|{|hr|gTzl{raEv_z|}|˲yɺϺϾöνy°ȵt^dsjYvflLcFfQӬr[Mxui˽lͷȵrd̻v|sJpeIfZJ}ggEnBzJ}J˷ڌ}vɶsYĵbI|X{i]eZDIJ©òļŹöt|h[9Wb|·¯ͽƱƹ²¤DZu^|jm[EvLͷŘ߹Ľ|fTJrWDmQzljnƨȪ}gi|h}}zǹzsocvuݻШmᲧ˷fqldLdfcƳŷϲϹt{Ŷνκms]opC}Ecȹĭznƭ\~`:rZB|oŽ}]Pɻ䮦½~S}nGN>AvksieBum?˵Ͼnvjrv]zv\fdutncrXIO4#cQMv]krttȭĴqŰƲ}RA9~}cʸũ׿ͫŷ|ntdo_=lgʣh¢gϸ˗xѯpP]snɮչŻoUrV/kI|b¯td=[B#xлìlWzѼ|Ȯȹzx}W}\MbpwεĨxsyxt\èsʩv}sn`SyfW_J5k[AhaGkjXǹ~ifĮrªbnmR׫˵vӹ}ɼ}ʩǧgo[q`N`Q>|gLgR#|T|yqSF>~|N?*Կ˾®pt_@bqRֹ~i|oikri`|pXx^{jVbVHXRFskΓӸżpf{kvn|nkj\Oúǣztév^uZft|bKgO7yc{euowͼʽ˼\dz°i`ONB2{npic_QDygQK<'bXL~t\?1zgTR̵òʢزhİʺeıkgS;gR=lnVpt^9}h=c|qmvh]jZ8кտѿvO_@$jRxʾwֿſǻlh^E~rbµ^mʭɿwbQɺθùżÑyt`wyZT{~]w\wsx}oUoyblºxrkazï®xiRŸsepsWp˺ʹwuyĮw|jTnZogsYŪҹºyWaP>ZΜʳɽ˺X]BVAŗsʦĦr̾ͯԱɾzqv[zW{g͚|ɹƼϸȿ¿w~mHbtrеTf|}sZl{zlq|dý˻};55a]TʪѲ긵yZt۾̸̹¡lcx͹ν̶mQCuȚzrgt9{X_liĺЩ~xhc{lE]ϯrlJüǾƻѸͭ˥lN>iYL~rrɾĿuiͿloDzͽ}l\Mwc\~|}i~tiϱ1"]OD˾yruh~оxtkŷodH|ɯʷǪ~ĪѻϿʹǾ`I7U<(}fV~iw{p\|ptKw[3tT+g?lһ̶~Uf\Ru`}`iƷvùĂ}zضyraCtdUuq¿훖~wʽth\Ĵ{hǹ~f[_n^Nt[xtq]o}\ĵⷧ{b[m~ǴgVFRE4ne\ŵi^Z2'%f\RpwƬӿʪxv«ԻæȲup[F~hPxc¨ɰsSbC&oV{fQoôij`D{[lyZ;iIfYHziO`|ʸu_Qǖz}nOscJK>.iD'P8p]<ӼŨĺt`yopƺpa\HٸзnyּĺƵyɽǻueWJE5ub`RGm`ZôxhԻ{Q{uå~}p|kam_Rw]ͥʑپ{|HeN.TB>s̿;xJB7OEF_Wb|}]kbкʵ®|l̻h^Ud[T~tjzrg˿ȻhPFbK=~x[\kOug^}pǾżĸ~\yV6zN1xQ0[Ab{ڲrfZ~vrʠijtjiMF@ٸŸ{|i}qWƶ̽IJeSIeT:q`Loe~ypZM}eökƱ{ʴsj[¦v׳w}ټqkd{ppaJzjH|nQ]SG~~nWffUnpȹx~uĶv`yof}}zќսhI7iQyhNhRDcPBѾηvra}yŻŽĺæqWuP5bBZh[sJzi\YP|mXn{|yzli\NK~m]Ưrp]öƦ᧞yr^W~kL>1<1+F;9SEBK9-oYAӷpaLf\PHx9ıہ|yue_uIqŴl~zeRl~hc|_A{CQuOsaTN`MGlIlfxQ@n4xAlIJtgֳymtk\ƸŸj`WmYtYxeGj}nOlyrYn~nTmǼıϾɖ~|rsZâŰWyIqCƦõݫԸĨ_O]vtpxxƪsǻӱx٘yu}us824?54dWNxhQпk\EqhYfVIgWGncM|ϔ~r\s\aKxg¯|q]ytc^I4[J0sgQ^XL~}wczWAfM|gtcŴ}qtnP4ó~vnҶİ}|hh~dc@-wec̺ıun^wk}קͭ|t|pϿ¿ŽʽgFmҿҿ٩_ޱjcƶgq\}ոUv:bɿwi\N@3e[Ovj[RIbYRszŖ|rZjTƽĴ}zlYH\L5{eίkR>ѻxyżnU?*g˻gZJ̼}óŲuhή¯yrhj|[scJsp~ɝ̶|ǫjYZtúoitŵҿزϰͶձٷή༭m«e̫ͱs̽th\eXRRHGofiVLC`VLǹzitV}\^Cq]{οıWK?[K<}wa}bd}vv÷ɹö~guʻŽҴģjZAxg񠋈[SxO=lO̻̹_sv_~nUh[;uʾŸȾnu^2Q\Y۵Ƶ¯tǿçĶûzuɸlz~Tx˫zԳͫpjLqkwoqg^^TRYPQZTVUOSxmi{s\PBuhUgSHqh~gkK~\e͹ףwmctnzlixŻ|pupx^oMxeVvhrtƸózjû¹Ĝ|f}lNxɸɼȶȵƺqkJ(&mH?ycvcCĺ[L9wȶm]z\]|Ldǽ̼IJj~skqWq]{qïyovasd|}roREBdEgI?t\D\~iJvYNHzuysD=7=82vp|q~ŵqkxkb|eSvb^͸·|i~sƶoɸn`xkgrTrXku|l}}stlztogdܵnZB}eK^ȵ׼ȶ̸ut{sc?Ů|fh[J_Q7ҾDz{vs̴zĵиѹƳͽjuƯ~yfHpyP>(I6(pc[Ƽyq^\SDf[U~qktv|KnYoX9`G@tbNľzubqmdyzlun^uλʹ{Ϻīq|xʶȶ´tcJ6xf{ĻnT=h^Cx_uhUymۧF;5|qmĵ|IJůεȲªxàvmɦbv>xqUnsɺqȮζƲ±ϴͳǸ͵qǪȨèvbI]H)zdm\B`N:XJ=~rjaXbYTB>=C?>ƹ~h{Vt`Gͺ¸̏OPJϮǽzyųèԳęսмŶxiTwzYvWxq}ʷwSD1rbSͿϿν~kZ{dcȲ̼ɹ͹`ñg\}eYū̴îĵǩʸhdͼw̳uǹȶvнηòt|̴~TG4e]H{a{]ʻ{xnbwsvoȺtep̶qâ̾ѻ \ No newline at end of file diff --git a/pacMan.cpp b/pacMan.cpp index b60bba8..0e534e4 100644 --- a/pacMan.cpp +++ b/pacMan.cpp @@ -10,6 +10,7 @@ pacMan::pacMan(float posx, float posy, float posz, float velx, float vely, float modeTime=0; } +// Just update the time, to know how to move the mouth void pacMan::animate() { if(modeTime==0) { time++; @@ -23,35 +24,46 @@ void pacMan::animate() { } } +// Draw function void pacMan::draw() { - x += xInc; + x += xInc; // update coordinates y += yInc; z += zInc; - glColor4f(1, 1, 0, 1); + glColor4f(1, 1, 0, 1); // yellow color glPushMatrix(); - glTranslatef(x, y, z); - glScalef(scale, scale, scale); - glPushMatrix(); // first side of the pacman - glRotatef(-time*5,1,0,0); - drawHalfSphere(80, 80, 1); + glTranslatef(x, y, z); // move pacman + getCrossProduct(xInc, yInc, zInc, 0, 0, 1); // get cross product + glRotatef(getAngle(xInc, yInc, zInc, 0, 0, 1), xcp, ycp, zcp); // rotate to look to where it is moving + + glScalef(scale, scale, scale); // scale - glColor4f(0, 0, 0, 0.8); - glTranslatef(-0.5,0.5,0.8); + // first side of the pacman + glPushMatrix(); + // First Half + glRotatef(-time*5,1,0,0); // rotation of the first side + drawHalfSphere(80, 80, 1); // draw it's first half + + // First Eye + glColor4f(0, 0, 0, 0.8); + glTranslatef(-0.5,0.5,0.8); // go to the position glScalef(0.75/scale, 0.75/scale, 0.75/scale); - drawHalfSphere(80,80,2); + drawHalfSphere(80,80,2); // draw a full sphere this time + // Second Eye glScalef(scale/0.75, scale/0.75, scale/0.75); - glTranslatef(+1,0,0); + glTranslatef(+1,0,0); // go to the position glScalef(0.75/scale, 0.75/scale, 0.75/scale); - drawHalfSphere(80,80,2); + drawHalfSphere(80,80,2); // draw a full sphere thi time glPopMatrix(); // end of first side of pacman - + glColor4f(1, 1, 0, 1); glPushMatrix(); // second side of the pacman + + // Second Half glRotatef(180,0,0,1); glRotatef(-time*5,1,0,0); drawHalfSphere(80, 80, 1); @@ -60,6 +72,8 @@ void pacMan::draw() { glPopMatrix(); } +/* Draw half of sphere : Took TP1 and executed just half of the for-loop if sides=1, + * or the full loop if sides=2 */ static void drawHalfSphere(int lats, int longs, int sides) { int i, j; for(i = 0; i <= lats; i++) { diff --git a/seaFloor.cpp b/seaFloor.cpp index 4b9b259..cae9780 100644 --- a/seaFloor.cpp +++ b/seaFloor.cpp @@ -18,7 +18,7 @@ seaFloor::seaFloor() { void seaFloor::init(Viewer &v) { /* read in image for texture */ - grid = readPPMfile("grid.ppm"); + grid = readPPMfile("seafloor.ppm"); /* create a texture object */ glGenTextures(1, &gridTex); /* make it the current texture */ diff --git a/viewer.cpp b/viewer.cpp index c85f101..b47be09 100644 --- a/viewer.cpp +++ b/viewer.cpp @@ -98,9 +98,10 @@ void Viewer::init() { addRenderable(&diver); bubble_space=diver.ratio/3; - time=0; + time=0; // to help in the animation + toggleRecord=false; // for saving snapshots - startTimer(50); + startTimer(50); // timer to come back } // Timed event, called at the time defined in viewer::init() functio.) @@ -139,7 +140,9 @@ void Viewer::draw() { (*it)->draw(); } - swapBuffers(); // clean buffers + swapBuffers(); // clean buffers + + if(toggleRecord) saveSnapshot(); // save snapshot if on } void Viewer::animate() { @@ -196,7 +199,10 @@ void Viewer::keyPressEvent(QKeyEvent *e) { glDisable(GL_LIGHTING); // ... and so on with all events to handle here! - } else { + } + else if (e->key()==Qt::Key_R) { + toggleRecord = !toggleRecord; } + else { // if the event is not handled here, process it as default QGLViewer::keyPressEvent(e); } diff --git a/viewer.h b/viewer.h index aad1d1d..518e4d3 100644 --- a/viewer.h +++ b/viewer.h @@ -41,6 +41,9 @@ class Viewer : public QGLViewer int time; int bubble_frequency; float bubble_space; + + // Record Variables + bool toggleRecord; /* Scene methods */ protected :