K-opgave 2002 - Visualisering af rumkurver MikkelBoje,di010633@diku.dk UlrikSchouJrgensen,di010347@diku.dk MartinDamhus,di010539@diku.dk 12.oktober2007 Indhold 1 Sammenfatning-dennerapport 1.1 Ambitionsniveau 4 1.2 Kravtillseren 1.3 Bemrkninger............................. 5 2 Problemorienteretanalyse 2.1 Problem... 2.2 Specikation....... 6 2.3 Kurveparametriseringer. 2.3.1 Terminologi.. 2.3.2 Typerafkurver 7 2.4 2.5 Punkter Typerafoperationer....... 8 2.6 Plotning 2.6.1 Endeligreprsentationafuendeligpunktmngde........................... 2.6.2 2.6.3 Kurverogkoordinataksersudstrkning. Hvilkepunkterskalplottes? 2.7 Inddata................ 10 9 2.8 Transformationen 2.7.1 Brugerspeciceredeparametre 11 2.9 Uddata................................. 11 12 3 Design 3.1 Algoritmiskstrukturafprogrammet-ansvar 13 3.2 DesignPatterns......................... 13 3.2.1 Fleksibelindlsningmuliggrbrugafdesignpatterns 14 14 3.2.2 Operationerpagurerogdesignmnstre.......... 15 1
3.3 Klasser. 3.3.1 Kontrologadministration.............. 15 15 3.3.2 3.3.3 Figurer. Operationer....... 16 16 3.3.4 3.3.5 Vektorerogmatricer Srligepunkter 16 3.3.6 Designpatterns 17 3.3.7 Indlsning. 17 3.3.8 Undtagelser.......................... 17 17 4 Programmeringsovervejelser 4.1 Implementationafdesign. 18 4.2 Inddata....................... 18 4.2.1 Inddatakommandoerlagresilisteaflinier 18 18 4.2.2 4.2.3 Indkommendetalparametre Fortolkningafinddata 18 4.3 Afrundingsfejl............... 19 4.4 Vrdibrendeobjektererikkekonstante 19 19 4.5 4.6 Undtagelser Beregningerogkretid........ 20 20 4.7 4.8 Koordinatakserneiuddata Tegningpabrt-objektet 21 20 4.8.1 4.8.2 Tegningafgurer Tegningafspecialpunkter..... 21 21 4.8.3 Tegningafakser....................... 22 5 Programbeskrivelse 5.1 Programmelogprogramudvikling 23 5.2 Navngivningskonventioner 23 5.3 Grnseader................ 23 5.4 Klassersinteraktionsamtansvarsfordeling 23 23 5.5 Programgennemlb 5.5.1 InitialiseringafCurvePlotter........... 23 23 5.5.2 Kaldafdraw......................... 24 6 Afprvning 6.1 Specikationogstrategi 25 6.2 kvivalensklasser 25 6.3 Grnsetilflde 25 6.4 Testresultater............................. 26 26 2
7 Brugervejledning 7.1 Forudstningerforatbrugeprogrammet 28 7.2 Figurtyper. 28 7.3 Operationer.. 29 28 7.4 7.5 Programopstart Stak-indlsningafinddatalinier......... 29 29 7.6 Syntaks 7.6.1 Figurer...... 30 7.6.2 Eksempel. 31 31 7.6.3 7.6.4 Operatorer. Eksempel 32 7.7 Fejlmeldinger....................... 32 32 7.8 Atudvideprogrammetmednyegurerelleroperatorer...... 33 8 Konklusion 8.1 Konklusion.............................. 34 34 A Kildekode A.1 CurvePlotter. 35 A.2 FigureManager 38 35 A.3 A.4 FigureA OperatorA... 49 43 A.5 A.6 Axis Line... 53 50 A.7 A.8 Opgave2A Opgave3A 54 A.9 Opgave4A 55 A.10Point.... 56 A.11PointParm. 59 57 A.12Translation A.13CurveConc. 61 61 A.14Scaler A.15Vector. 63 62 A.16VectorX A.17Matrix..... 64 A.18VectorIteratorI 69 65 A.19VectorVisitorI A.20VectorList 69 A.21Transform... 69 A.22Trans2dVisitor 72 71 A.23ReadInputLines A.24InputLine..... 75 A.25ReadFileException.......................... 81 79 3
B CRC-kort 82 C Grnseader C.1 CurvePlotterI 85 C.2 FigureI..... 85 C.3 FigureManagerI 86 85 C.4 C.5 InputLineI MatrixI. 86 C.6 OperatorI 87 86 C.7 C.8 PointI PointParmI...... 88 87 C.9 C.10TransformI. ReadInputLinesI 88 C.11VectorI..... 89 C.12VectorIteratorI 89 89 C.13VectorListI C.14VectorVisitorI. 90 90 C.15VectorXI. C.16Interfacesforundtagelser................................ 91 90 D Transformationen 93 E Klassediagram 95 F CurvePlotterinitialiseres 96 G CurvePlotterkalderdraw 97 H FigureManageriarbejde 98 I Inddatatilafprvning 99 J Uddatafraafprvning 100 1 Sammenfatning - denne rapport Denne portenanalysererproblemstillingengivetiopgaveformuleringen[1],beskriverdet rapport er en besvarelse af K2-opgaven i datalogi, stilletar 2002. Rap- udvikledeprogramsfunktionalitetogdetsudvidelsesmulighederogdokumenterer programmetibilagene.programmeterskrevetijava(v.1.4.0)oghartilformal at fulgtmedik2-brevkassen[2]. \visualisere kurver i rummet", se kravspecikationen 2.2. Undervejs har vi information,se8. Deterikkelykkedesosatindfrimaletmedprogrammettilfulde,fornrmere 4
1.1 Ambitionsniveau Vi tildesignetafprogrammetovereventuelleeektivitetshensyn,udenatdettehar har i udviklingen af programmet lbende vgtet overskuelighed og hensyn frttilmangekomplikationer.iimplementeringenharvidogsigtettilatundgaet gentagneberegningero.l.decideretressourcespild. Hermederikkeudelukket,atoptimeringermuligvissesteder. 1.2 Krav til lseren Lseren ingssproget af nrvrende Java. Srligrapport sprogbrug forventes vil vre atforklaret vre bekendt i denmed grad, programmer- adskillersigfrastandardterminologivedrrendejava. det radikalt 1.3 Bemrkninger Vi ellersomernemtforstaelige(fx. vil i rapportens sprog anvendeinput)samtengelskeord,derermedidansk engelske med darlig dansk oversttelse retstavning,eksempelvisinterface. gumenter(ogaltsaburdeopskrivesmetodenavn(arg1,arg2,...,argn),hvisvi Vi vil tillade os at skrive metodenavn() for metoder, der tager mange ar- blotskalrefereretilmetodensnavn. 5
2 Problemorienteret analyse 2.1 Problem Viskaludarbejdeetprogramtilvisualiseringafkurverirummet.Dissekurver vilvrespeciceretvedparametriseringerieenvariabel.detskalvremuligt atudfre"operationer"1pakurverne. 2.2 Specikation Vivilherudspecicereopgavetekstenskravtilenrkkekonkretekravtilvores program. Forskellige typer2 kunnevisualiseres. kurveparametriseringer sasom spiraler eller linier skal Detskalvremuligtforbrugerenatangivetidsintervalletforparametriseringsvariablen,saledesathverkurve,dernskestegnet,harsitegettidsinterval. Tilhverkurveskalbrugerenkunnespecicereekstraparametre,forkurvetypen Lineskaleksempelvisetpunktogenretningsvektorkunneangives. Detskalvremuligtatudfre"operationer"pakurverne. Tilhvernsketoperation,skalrelevanteparametrekunneangives.Fx.skal translationsforesprgslerledsagesaftreparametre,nemligde3koordinater tilforskydningsvektoren. Fremvisningenafkurverne(modiceredeellerejviaoperationer)skalledsagesafetkoordinatsystem,derlokalisererkurvernesplaceringi R3. Programmetskalvreeksibelt: -Detskalvreletattilfjenyekurvetyper -Detskalvreletattilfjenyeoperationer Visualiseringen diskuteresyderligereiafsnittet2.9). skal vre venlig imod jet (hvad der forstas herved, vil Programmet opgaver,se[1]. skal kunne fremvise de kurver, der er angivet i de bundne 1Vilprciseresomlidt,seafsnit2.3.1. 2Se2.3.2 6
2.3 Kurveparametriseringer Vivilanfrenogleovervejelserogbemrkningeriforbindelsemedbegrebet"kurveparametrisering". 2.3.1 Terminologi Givet billedmngdenf(i)medkurvensspor.deterdettespor,vivilplotte,narvii en kurveparametrisering f : I 3 t 7! (f1(t);f2(t);f3(t)), vil vi benvne programmetgivesetantalkurvermedtilhrendetider. rametrisering.medsammebetydningvilvibenytteordeneparametriseringer, Vivilfritvekslemellemvissebetegnelserfordetmegetlangeordkurvepa- kurver-og,mereprogramnrt3-gurer.vimenerikke,atdettevilgiveanledningtilmisforstaelser. der-givetenrkkeinputparametre-modicererudseendeogantalafinputkurver.de"obligatoriske"operationerertranslation(givet1kurveogenvektorleveres 1leveres1nykurve). og kurvesammenstning (givet 2 kurver i en bestemt rkkeflge Derskaludfresoperationerpakurverne;hervedvilviforstamekanismer, efteratdenskedeoperationererudfrt,delsdetbillede,derfremkommerved Ved billedet vil vi dels forsta de i 3 dimensioner plottede (se 2.6) kurver, projektionnedpakameraetskoordinatsystem.\billedet"refererersaledesogsa tildenstatiske,rumligekurve-"konstellation",derergivetvedbrugerenskurveogoperationsnsker. pa. Medbrttet vilvimenedetobjektaftypen Graphics,somviskaltegne \Plotning"vilvibenytteomtoforskelligeprocesser: Udregningafkoordinatsttettilenparametriseringsvrdiiengiventid Forbindelseafpunkterneidetprojiceredebilledemedliniestykker 2.3.2 Typerafkurver Vi udseende.daviikkeagteratkasteosudiatomstteeninddataltilenfunktion, skal visualisere parametriseringer. Disse kan matematisk set have vilkarligt alstaopndeenkompletmatematisksyntaks(se2.7)forinddata,vilviopdele dekurver,determuligtatfaatse,ityper.hvertypeharsaenrkkeparametre, derkanspeciceres. generelparametrisering.betragteksempelvis Et problem herved er, at enhver kurvetype er et specialtilflde af en mere f(t)=(cost;sint;0) ; t2[0;2] 3Ikildekodenvilviofterefereretil/benvneparametriseringernesom"gurer". 7
derparametrisererenhedscirklenir2.denneparametriseringeretspecialtilflde afbadekuglensparametrisering(senedenfor)ogdengenerellespirals f(t)=(cos(at)+c1;sin(bt)+c2;t+c3) ; t2r spiral-parametrisering (derkunharcirkulrgrundformfor er igen et specialtilflde = -ogellerserelliptisk).mendenne struktur,fx.kunneetvilkarligt n'tegradspolynomiumiterstattetrediekoordinatfunktionoglggestilhverafdetofrste,givendeflgendesygeudtryk af en endnu mere generaliseret f(t) = (cos(at)+c1+c2t+:::+cntn; sin(bt)+d1+d2t+:::+dntn; e1+e2t+:::+entn) ; t2r Hvadviskallreherafer,atdeteroptilosatfaststtetyperafkurver.Disse vil betragte altid vre mereet generelle specialtilflde parametriseringer, af noget mere ma vedkommende generelt, og nsker selv tilfje brugeren denne at kurvetype4. 2.4 Punkter Vissepunkterkrverspecialbehandling.Brugerenkankrve,atengivenkurves vrditiltident0fremhves. kunneangivestekst-ogtal-vrdierudforgivnepunkter.iforlngelseafdenne Viharogsabrugforspecialpunktertiltegningafkoordinatsystemet;derskal tankegangkunnemanogsaforestillesig,atbrugerenfx.nskedeatforsynevisse punktermedteskt,fx."skringmedy-aksen","lokaltminimum"eller"start". Iafsnittet4.8.2vilviidetaljeretgradovervejesprgsmaletomkringpunkter. 2.5 Typer af operationer Ligesomviinddelerkurverneityper,vilviinddeleoperationerityper.Viskalimplementeredetotyperoperationertranslationogkurvesammenstningsammen medenselvvalgttildemonstrationafdesignetseksibilitet. identiskmedtranslationenafdenenekurve,sadennesstartpunktnetopforenes Vi indser hurtigt, at sammenstningen af 2 kurver som beskrevet i [1] er meddenfrstekurvesslutpunkt. 4Viarbejderkunmedparametriseringerieenvariabel,sarumligegurersasomkugler-eller meregenerelt(dervargeneraliseringenigen!)-ellipsoiderkanikkeidennekontekstparametriseresfuldstndigt(dissegurerkanadeparametriseres).deterdogmuligtatimplementere kurver,derlberpakugle-ogellipsoide-overader,ogaltefterbrugerspeciceredeparametre mereellermindreprcistantyderenrumliggur. 8
parametrer1;r2;r3strkkerkurvernemedenfaktorripadeni Af forslag til selvvalgte operationer er en skaleringsfunktion, der tekoordinat, givet tre enrotationsfunktion,derrotererenkurvegraderomkringenbrugerspeciceret linieirummetsamtenfunktion,dervisertangententilengivenkurveietgivent punkt. af eksibilitetshensyn Sidste forslag involverer blive kendskab kasseret, mens til parametriseringens interessen for nstsidste aedte, ogmindskes vil nok kraftigtaf,atdetfrdigeprogramselvkanroterekurverne. Viagterderforimplementereforslagnummer1. 2.6 Plotning Viskalfremvisekurver,ogligesomviidenikke-ideellevirkelighedreprsenterer fx.enliniestykkemedenstreg,derngterntsetharenbredde,vilvifremviseen passendereprsentationafkurverne. 2.6.1 Endeligreprsentationafuendeligpunktmngde Idet oplagtatladeenkurvevrereprsenteretvedenindiceretendeligpunktfamilie,dertilhrerkurvenspunktmngde.vedfremvisningenvilretteliniestykker forbindetopunktermedindeks klart,atreprsentationensprcisiongesmedantalletafpunkteripunktfami- iogi+1ogdermedvisualiserekurven.deter hver egentlig kurve matematisk set er en uendelig punktmngde, er det lien gurerreprsenteresvedkoordinatlister.dissekansapunktforpunktprojiceres Ġivetdennskedespecikationafbilledettilfremvisning,kanaltsasamtlige nedi2dimensioner,hvoreftergureftergur"samles"medliniestykker. 2.6.2 Kurverogkoordinataksersudstrkning Kurveparametriseringer specicerettidsintervalogkurvetype).begrnservitidsintervallet,forhvilketvi kan have endelig eller uendelig udstrkning (alt efter plotter typer kurver, kurven, dette vil kurvens er pa ingen lngden made altid sandt vreforendelig vilkarlige (narparametriseringer). vi betragter vores Opdelingafkurvestykketipunkterogforbindelseafdissepunktermedliniervil altsamedendeligmangepunkterkunnegiveenvilkarliggodapproximation. altsa Koordinatakserne reprsenteres med i rummet endeligermange uendelige. punkter. DisseDette skal ogsa problem fremvises, vil viogvende skal tilbagetili4.7. 2.6.3 Hvilkepunkterskalplottes? Viskalopvejeprogrammetskretid,dergesmedantalletafpunkterpr.kurve, modapproximationenskvalitet,derligeledesgesmedpunktantallet.derforma 9
enfornuftigbeslutningomantalletafpunktertages,ogherkommeretproblem ispil. etn2nikkendvendigvisgiveenfornuftigpunktmngdetilplotning-hvisvi Givetenkurveparametriseringf(t),t2I=[a;b],davilettilfldigtvalgaf altsavlgerdepunkter,derskalplottes,tilatvremngdenff(a+k(b n a) f0;1;:::;n 1gg(viopsplittertidsintervalleti n 1ligestorebidder(skrer 1)jk2 altsavedialtnpunkter),ogplotterhvertintervalendepunkt).detteskyldes,at kurvenssporikkegennemlbesmedkonstanthastighed. estpunkterafsttes,narkurvengennemlbesmedhjfart.skaldettelykkes Detvilgiveenrelativthjereprcisionmedetkonstantantalpunkter,hvis foros,skalvibrugekurvenshastighedsvektor(somviforkendtekurvetyperogsa nemtkanudledeetmatematiskudtrykfor)ibestemtepunkter.viskalogsatil atvurdere,hvad"hjfart"er.ogudfradisseoplysningerkanpassendepunkter bestemmes. lsningmedhenvisningtilvoresmalstningomeksibilitetogvoresnskeom Vi kan dog allerede pa nuvrede tidspunkt afvise denne noget ambitise overskuelighed. eniethvertpunktveldenerethastighedsvektorgivetvedetlukketudtryk. Hvernykurvetype,mannskerattilfje,villemeddennelsningskullehave hverendvidere-selvomenpassendealgoritmenokvillekunneudregnevorestil foratplottetilstrkkeligmangepunktertil,atfremvisningener"glat"ogfejlfri kurve hrende denition af "hj fart"pa kort tid - vil vi nok blot srge (ellerladeantalplottedepunktervreenbrugerdeneretparameter).detteletterimplementationafnyekurvetyperogforsimplerkoden.omkostningeneren forsvindendelilleforsinkelseogeventuelt\overdige"punkteriplotningen. 2.7 Inddata Vores operationer program er udfrt skal kunne et antal plotte gange en rkke pa visse nskede af kurverne. kurver, efter Herefter at enskal rkke skrmfremstillingenkunneroteresogbeskuesfraforskelligevinkler. 2d- Inddataopdelersigderfornaturligtitohalvdele: Nar Kurver gurerne til plotning. er plottetdennedelafinddataskalkunbenytteseengang. ikkegresigen,frbrugerennskeratbeskueandrekurver. internt i programmet i 3 dimensioner, dette gerenvedhjlpaffremviserprogrammetrotererogskalererbilledet.denne Rotationogprojektion.Dennedelafinddatalevereslbende,narbru- delafinddataleveresvedkaldaffunktionen erbeskrevetiinterfacetforcurveplotter,se[1]. CurvePlotter.draw(),som kendervedkommendesnsker.brugeradenifremviserprogrammettilladerikke Brugeren skal specicere en lang rkke ting, fr programmet overhovedet 10
specikationafkurver,parametreogoperationer.detersaledesikkeentrivialitet, hvorledesbrugerenspecicerersinenskertilprogrammet: VedkommendekunneskrivedetienJava-klasse. Vedkommendekunneskrivedetindienl,deroverholderenafosopstillet syntaks. Vi forskelligemenuerogindtastningsfelterkunnekontrollereinddata. kunne programmere en grask ekstra brugerade, hvori brugeren fra skrivesinenskerienlendatkrve,atvedkommendeskullekendetiljava.vi Sidstelsningerforambitis,ogdetermerebrugervenligtatladebrugeren harderforvalgtmidterstemodel.detkrverdog,atviopstillerensyntaksfor inddatalen,ogenmetodetilatafkodebruger-nskernedfldetienlegalsyntaks. Dettevilblivediskuteretdelsunderafsnittet4.2,delsibrugervejledningensafsnit 7.6. 2.7.1 Brugerspeciceredeparametre Tilhvergurvilvialtidladebrugerenkunnespeciceredeoplagte6tal-parametre antalpunktertilplotning,tidstart,tidslut,r,gogb,saledesatfx. 500 0 2 45 255 120 betyder,atdenpagldendegurskalplottesmed500punkter,parametriseringen skalplottepunktermedtiden skalistandardrgb-modellenvreiforholdet(45,255,120). tlbeneiintervallet[0;2],ogfarvenafkurven vilkarligmangevrdiertilbrugiparametriseringen5. Engursparametrekunnevisaforestilleosvillebestaaf6fasteefterfulgtaf parametre(kurvesammenstning),med3(koordinatsttilentranslationsvektor) Tiloperationererderikkeligesafasteparametre,dissekanangivesudental- ellermed45(densygeoperation,derlggeret44'te-gradspolynomiumevlueret i0tilhverkoordinatiengur).operationsparametreerderaltsaetvilkarligt antalaf. 2.8 Transformationen Vi hvorforvikanklareosmedtre-dimensionalevektorer. henviser til den matematisk tunge argumentation i bilag D. Her forklares, 5Herhenvisestilafsnit3.3.7. 11
2.9 Uddata Det merededelogdendel,viprogrammerer,vilvreen"rumligkasse"projiceretned samlede uddata for det komplette program bestaende af den forprogram- i2dimensioner,ledsagetafetpassendekoordinatsystemogengurmngde,helt indeholdtikassensudsnitaf fraforskelligevinkler. R3.Dettebilledekanroteresogdrejesoganskues entenladehvergurhaveforskelligfarve,ogkoordinatsystemetogbaggrunden Foratgredenne2-dimensionellefremstillinggrasktilfredsstillende,vilvi have brugerdeneret. kontrastiske srfarver, der ikke antages af kurver - eller lade alting vre passendeinddelingforsynetmedtal. Matematisk ville det vre nskeligt, om koordinatsystemet var ledsaget af 12
3 Design Vitilsigteratudarbejdeeteksibeltprogramdesign,dermuliggrudvidelseaf programmet. operationstyper;altsaikkeomfattendringafplotningsalgoritmen,syntaksfor Udvidelserne vil dog begrnse sig til tilfjelse af nye kurve- og samtfortolkningafinddatao.l. vilviopnavedatforsgeathaveenlavkoblingmellemdeindgaendeklasser. Vivildogtilstrbe,atudskiftningafprogramdelebliverlettestmuligt.Dette 3.1 Algoritmisk struktur af programmet - ansvar Enoverordnetrkkeprogramtrinskaltydeligviskunudfreseengangpr.inddatal,dvs.eengangforhvergangenbrugernskeratbenytteprogrammetgramtrinanfreetansvar,somenpassendeklasseidesignetmatagesigaf. I den flgende skitse af denne \engangs-algoritme" vil vi under hvert pro- Indlsinddatal,dvs.oversttilforstaeliginternreprsentationaftekst- lensindhold. prsentation Ansvar: Indlse, omstte til intern reprsentation, opbevare intern re- Udfrinddatalenskommandoer,dvs.plotningafgurer,modikationvia operationer. Ansvar:Forstainternreprsentation,kendegur-ogoperationstyper,kunneinitialiseregurerogoperationer Opretetpassendekoordinatsystemtilfremvisningsammenmedbilledet. Ansvar:Kendekoordinatakserneirummet Gemdisseoplysninger,saderkantrkkespadem,hvergangdraw()kaldes. Ansvar:Gemmedataombilledet oprettelseafcurveplotterogendtindlsningafgurer)samlersigietkaldaf Betragtervietjeblikvoresprogramdelheltoverordnet,servi,atalt(efter funktiondraw()medenrkkeparametreogenbrtattegnepa.returvrdien lbende,mensdertegnespabrttet. er en boolean (lykkedes det at tegne frdig eller ej?), da skrmen opdaterer ansvarfrem. Kiggervimereidetaljen,trderenrkkeprogramtrinmeddertilhrende Modtagparametreogetbrt-objektattegnepa,givedemvideretilrette instanser. Ansvar:Koordinerefunktionskald Tagkopi,somvigernemandrei,afoplysningernefrainddatalen. Ansvar:Kopierebilledet 13
Modicerkopienviarotationogprojektion. Ansvar:Transformerebilledettil2dimensioner Findpassendekoordinatsystemtilatledsagebilledet. Ansvar:Oprettepassendekoordinatsystem,kendeakserneirummet Tegnkurverogkoordinatsystempabrttet(dissevilsidelbendemedindtegningenvisespaskrmen). Ansvar:Tegnebilledet,kendestrrelsenafbrttet,hvorpadertegnes metsstruktur,skalviogsahavegurerogoperationerispil,derkanholdepa Udoverdeansvar,viharharudkrystalliseretsomenkonsekvensafprogram- informationompunktertilplotning,samt(mankunnekaldedeterfllesansvar foralleklasseriprogrammet)eksibilitetmht.udvidelse. tionmedgurerogoperationerforegarpaheltbestemtemader.vivilmedandre Dettefllesansvarkanvidoghurtigtreduceretiletkravom,atkommunika- orddenereetfllesinterfacefornyegurerogoperationer.opfylderentilfjet nygurelleroperationdetteinterface,kanprogrammetafvikles. 3.2 Design Patterns Vednrmerebetragtningafdeopgaver,derskaludfresunderprogramafviklingen,servihurtigtetparstrukturerdergarigen. vektorerskalsakunnemodicereseenforeen,narvieksempelvisladerenoperationpagurenudfres,ellernarviladerenmatrixvirkepahvervektor.imange forskelligesituationererdetpraktiskatbesgeetobjekt(fx.en Vector)ogmodicereobjektetsattributter.Denneobservationgiverosinspira- Figureelleren Forhvergurskalenlisteafpunkterellerstedvektorerfordisseplottes.Disse tiontilatanvendevisitor-mnstret,derigenbenytteriterator-mnstret. detklassernefiguremanagerogreadinputlinehjlpermedatsikrevoresmal, nemligbrugafstandardiseringerafgur-ogoperatorklassersamtinddatatype. eksible design nem tilfjelse af nye gurer operatorer. Disse gr 3.2.1 Fleksibelindlsningmuliggrbrugafdesignpatterns Selveindlsningsalgoritmenerbeskreveti7.5.Indlsningenoginitialiseringen af kurvetilfjelserikkebetyder,atmanskalndreidenoprindeligekildekode.blot gurer og operatorer pa den heri beskrevne made sikrer, at operator- og skaletinterfaceoverholdes. ladendedesignetseksibilitet.vihardogsknnet,attilfjelseafnyeklasserer Defastlagteparameterstrukturerforgurerogoperatorermindskertilsyne- et behovet vigtigere for for at tilfje eksibiliteten nye gur- endogbrugerbestemte operatorklasserparametre, langt overstiger idet vi behovet mener, for at ndringerafparametre. 14
gur-ogoperationstyper. Deparametre,viharvalgt,erbredtfavnendeogkanformentligdkkedeeste mnstermedfordel. Vha. denne eksible indlsning kan vi implementere det nskede design- 3.2.2 Operationerpagurerogdesignmnstre Da operatorerdesignetsomvisitorerumuligt.istedetharoperator-klassenfaetet der i operationer pa gurer kan indga ere gurer, er et design med alle megetenkeltogikke-krvendeinterface. af. Faktiskerdetkunndvendigtatvide,hvormangegureroperatorengrbrug somermodiceretpabaggrundafindkomnegurer.igenkrvervoresdesign, Derudover skal operatoren besidde en metode, der returnerer nogle gurer, atderaltidbliverreturneretgurer,daeksempelvisopsplitningafgurerellers villevreumulig(nyegurerkankommetilellernogleafdemodtagnekanblive slettet). ogreturneredisseherefter.isafaldviloperatorernegrebrugafvisitorer,der Deterklart,atdeesteoperatorerblotvilmodiceredeindkomnegurer besgerhvergurmeden-ioperatorendeneret-visitor.fordideesteoperatorerblotharforskelligevisitorer,hardenabstrakteoperator-klasse implementeret den metode, der modicerer de indkomne gurer. Metoden OperatorA brugafenaccessor-metode,somreturnerervisitoren.dennemetodekansaoverskrives. gr ureneindholderen Visitor-designpatterneterimplementeretafgur-klasserneved,atalleg- benytterdennesdovisit()-metodepassendesteder.visitorenkanimplementeres publicmetodevisit(),somnetopmodtagerenvisitorog forskellige klasseioperatorenellerdenskalvreekstern.visitorenskalselvflgeligopfylde steder, og der stilles ingen krav til om visitoren skal vre en intern interfacettilgurernesvisitor. 3.3 Klasser Vedbetragtningafproblemstillingenudkrystalliseresnaturligtenrkkeobjektog tegningafbilledetpadetudleveredebrt,koordinationafdissehandlinger.dette problemtyper: Figurer, operationer, vektorer, matricer, et koordinatsystem, erillustreretpagur1,see. 3.3.1 Kontrologadministration Klasser:CurvePlotter, Objekter af disse klasserfiguremanager, eksisterer der kuntransform disse har hver isr veldenerede styrende roller. een afderes underprogramudvikling,og fremgaafgur2og3ibilagene. prcise funktioner vil 15
3.3.2 Figurer Fllesforallegurtyperneerenrkkekarakteristikaogansvar.Disseplaceres Klasser:FigureI, FigureA, Subclasses... derforienabstraktsuperklasse. Atkunnemodtageenrkkeinputparametreogomsttedissetilenkonkret parametriseringsforskrift. Atevalueresinvrditilengiventid,vedgentagneberegningeraltsaplotning. Atgemmeinformationomspeciellepunkter,derfx.skalmarkeres. Atvremodicerbareviaoperationer. Givetetbrtattegnesigselv. Atvrekopierbare,altsacloneable. ne,endvidereliggerdennebeslutningiforlngelseafkonventionelgraskjava- programmering. Atfunktionendrawplaceresihvergursikrer,atkodenindkapslesigurer- 3.3.3 Operationer Klasser:OperatorI, Flles for operationeroperatora, er, de givet Subclasses m gurer... parametrereturnererknyegurer. og n meningsfyldte tilhrende gurerneogunderbesgetmodiceretgurerneslagredekoordinaterpapassende Vivilividestmuligudstrknnigdesigneoperationersomvisitorer,derbesger vis,somnvntovenfor. 3.3.4 Vektorerogmatricer Klasser:Vector, Disseklasserlagrerkoordinatstogeransvarligeforatkunneudfrestandar- VectorX, Matrix doperationer(matrixprodukt,krydsprodukt,vektoradditionosv.)padissekoor- dinatst. distinktionen Matematisk VectorogVectorX.Dettebunderi,atvimangestederbenytter set er der ikke forskel pa vektorer, som vi antyder med vektorerudenbehovforvektoroperationer(sahvorforgivedeindgaendeobjekter redundantemetoder?).ligeledesermatricerjogeneraliseredevektorer(ellervektorereretspecialtilfldeafmatricer);atviharoprettetseparateklasserskyldes etdesign-ogoverbliksmssigtskn. Detvisersigimidlertid,atvoresproblemerkanlsesindenforde3-dimensionelle Endviderekandetanfres,atvektorerikkendvendigviser3-dimensionale. 16
vektorer: hellerikkeuundvrlige-vivilblotkiggepa3-dimensionelle,hvorviserbortfra De 4-dimensionale kan undvres i henhold til 2.8. 2-dimensionale er sidstekoordinat. Derforvilviudelukkendeimplementere3d-vektorer. dkapsleinformationpapassendevis. Objekterafdisseklasser,Vector, VectorXsamtMatrix,benyttestilatin- somderviltypiskvremangevector-objekterispil(punkterlagresvedplotning Matrix-objekter Vector-objekter). ved udregningen VectorX-objekter af denvil matrix kun og benyttes de vektorer, sammender med beskriver et par transformationenfra3dimensionertiletbegrnsetudsnitaf2dimensioner,eller eksisteremidlertidigt6. 3.3.5 Srligepunkter Klasser:Point Tilhvergurerknyttetsrligepunkter,derskalmarkeres.Informationomdisse punkterlagresiobjekteraftypenpoint.disseerligesomgurerneudstyretmed en parametre7. draw-funktion, derunder tegningen tagerhjde for despecicerede special- 3.3.6 Designpatterns Klasser:Visitor, Disseklassereralleredebeskrevetunderafsnittet3.2. VectorVisitorI enspecikationafvisitor-interfacet,saledesatdetbesgteobjektskalvreen VectorVisitorI erblot vektor. 3.3.7 Indlsning Klasser:ReadInputLines, Disse klasser star for, som dels InputLine datalenpaenmade,dersikrerlavestmuligkoblingmellemklasserne. beskrevet i 3.2.1, og dels i 4.2, at indlse indparametre, Vi nsker hvorfor altsa at dergeneralisere altsa ikke ndvendigvis inddatas udseende vil vre forde gur- 6 faste og operations- tilgurerne,somnvnti2.7.1.vitilsigter,atparameterantalletafhensyntil parametre udvidelsesmulighederneervilkarligt. 3.3.8 Undtagelser Endvidere RuntimeException. vil vi designe en rkke undtagelser, som alle vil arve fra klassen 6Javas\clean-up"fjernerobjekterudenreferencertilsig. 7Detteharviikkenaetatimplementere,meniteorienerdetikkealenemuligt,menkrver ikkeandenndringafkildekoden 17
4 Programmeringsovervejelser 4.1 Implementation af design Voresimplementationafprogrammetvilihvertfaldpasystemarkitektoniskplan flgedetudviklededesignfuldstndigt.deenkeltemodulervilformentligtafvige marginaltfradetidesignetudtnkte,fx.viletbestemtstmetoderogvariable ikkealtidndvendigvismodsvareetbestemtansvarudledtidesignet. overvejelserindenimplementationen. Vivilnedenforgaidetaljermeddedeleafdesignet,derkrveryderligere 4.2 Inddata konkretiseredensopgaver. I designet har vi en separat klasse til indlsning, ReadInputLines. Vi vil her 4.2.1 Inddatakommandoerlagresilisteaflinier Voresindlsningafinddataskervedatderlseslinieforlinieienbrugerforfattettekstl,somerkonstrueretefternoglenjeregler.Ideeneratsystemetved indlsningen deresparametre,selvomantalletafparametremattevariere. skal kunne kende forskel pa gurer og operatorer og kan indlse denpagldendelinie,etobjektaftypeninputline.dissegemmesietarrayaf Hver linie vil vi omstte til den interne reprsentation af kommandoen i InputLine's,somsakansendesvideretildenfortolkendeenhed,FigureManager. Hervedadskillesindlsningfrarestenafprogrammet. danafviklingsmeekanismenfiguremanagerskalfortolkeinput. Derskalaltsaopstillesreglerfor,hvordangyldiginddatanedfldes,oghvor- derviharvalgtenmaskelidtindvikletsyntaktiskogindlsningsmssigtlsning, tnkeligeparametre. til gengld gr det muligt for brugeren af programmet at regulere pa alle Syntaksenvilfremgaafbrugervejledningensafsnit7.6. 4.2.2 Indkommendetalparametre ing. TalparametrevilvigemmeiJava-typendouble.Se4.3forovervejelseromafrund- inputvrdier Determeddouble'sproblematiskatangiveirrationaleellersrdelesprcise matematiskutilfredsstillendevis:ivoresinddata-lserer som eksempelvis eller e. Dette problem har =sinafrundingtil ma vi lse pa en double.brugerenkanaltsaikkeeskplicitiinddataangivetallet,somjoheller ikkekanlagresimaskinen,menblotenapproximativreelvrdisom3:1415::: 18
4.2.3 Fortolkningafinddata Administrationen klassenfiguremanager,sommodtagerinddatalensometarrayafinputline's. af oprettelsen af gurer og operatorer foregar i et objekt af brugervejledningens7.5.dennealgoritmesikrerfornuftigtydningafinddatalens Dettegennemlbessaogbehandlesviaenstak-algoritme,dererbeskreveti kommandoerudenmisforstaelser. gurerogoperatorer,sombrugerenharangivet,oprettetoglagtitostakke.vi Efterhanden som arrayet af InputLine's gennemlbes, bliver de forskellige harmegettidligtidesignfasennsketatholdeangivelsenafsystemetsgurerog operatorerudenforsystemet.detskullealtsavremuligtatspeciceregurerog operatorer,somsystemetiudviklingsfasenikkekendtetil.denneadskillelseer lykkesvedbrugafjava'sstandardklasse,classloader.vedhjlpafdenneklasse er bliver detoprettet muligt atved indlse initialisering en klasseafudfra FigureManager en tekststreng. pa baggrund ClassLoader-objektet standard-classloader. af systemets indgaroprettelseafetobjektafklassenconstructor,hvorpavibrugermetoden Selveoprettelsenafengurellerenoperatorerenanelsekompliceret,dader afklassenclass,dadeangiverkonstruktrensparameter-klasser. newinstance(),somtagerenlisteafobject's.object-objekterneskalallevre 4.3 Afrundingsfejl Vi ydende arbejder tal. med Denne Java-typen type er (ikke double srlig) alle de begrnset steder, vi (8har bytes), brugsa forafrundings- fejl marginaleafvigelsevilikkefakonsekvenserforhverkenfremvisningelleranden vil opsta. Vi arbejder altsa med en svkket prcision undervejs. Denne lagring af programkrsel. 4.4 Vrdibrende objekter er ikke konstante signdredes.ivoresimplementationagterviimidlertidatndrekoordinaterne ObjekteraftypenVector,VectorXellerMatrixvillemannormaltikkeforestille tiletvektorobjektvreforanderlige.eksempelvisskalviudfreoperationerpa gurerspunktlisterellerskaltransformereenvektortil2dimensioner. Ligeledes ville man ikke matematisk opfatte to vektortranslaterede8 medsammeparametriseringsomens.idesignettilsidesttesdissematematiske kurver konventionerafhensyntildetobjektorienteredeendeligelayoutsamtnsketom atimplementerevisitor,derkanndreengursudseendevedatbesgehvert plottetkoordinatst. 8Medenandenvektorendnul-vektoren,se'f'li';-) 19
4.5 Undtagelser Undtagelserbenyttes,narnogetfataltelleruigennemfrligtopstarundervejsien programafvikling. inddata Iprincippetskalintetjokunnegagaltivoresprogram,hvisbrugerenskriver derkunkanskyldesos.eksempelvisvilviopretteundtagelseriforbindelsemed i korrekt syntaks. Ikke desto mindre vil vi tage hjde for problemer, matrixmultiplikation overensstemmende).disseogtilsvarendeundtagelsererinformativeforeventuelle (der jo kun er deneret hvis matricernes dimensioner er videreudviklerepaprogrammetogndvendige,hvis,foreksempel,matrix-klassen isoleretskullebenyttesienandensammenhng9. selvomdeikkevilblivekastetafos,narprogrammetkres. Af dissearsager har vi altsa implementeret alle vigtige undtagelser, ogsa 4.6 Beregninger og kretid Vivilikkekunneundgaenrkke\overdige"beregninger.Samtligegurerskal plottesi3dimensioner,deterklart.herefterskalderoteresogprojiceresnedi2 dimensionervha.forskriftenangiveti[1].oftevilikkealtafdeti3dimensioner plottedekunnesespaskrmbilledet.deterderforspildatprojicerepunkter,der alligevelikkeskalvises. ticererherinddatamngdenn Sadan\overdig"plotningforvrrerimidlertidikkevoreskretid.Viiden- ogtegnes,idetplotningeni3dimensionererenengangshandlingogdermedikke somantalletafpunkter,derskaltransformeres kommertilatpavirkebrugenafprogrammet.betragteshhv.transformations-og indtegningstidenforhvertpunktsomkonstanteraogb,viltidenfortransformationogindtegningafetpunktvrean+bn.kretidenvilderforvre(a+b)n, hvornerantalletafplottedepunkter.tidskompleksitetenersaledeskuno(n). 4.7 Koordinatakserne i uddata Vores endeligudsnitafakserne,mendetteudsnitafhngerreeltsetafvinklen,hvorfra uddata skal ogsa indeholde passende koordinatakser. Vi skal fremvise et dersesmodorigo.istedetforenkompliceretalgoritmetilatvaretageenefter jepunktetpassendebeskringafakserne(beskringerndvendigforatkunne plottemedendeligmangepunkter),kanmanvlgeforskelligemetodertilvalg afkoordinatsystem. rummetafformen[b1 Narbilledetafallegurererfrdigplottet,vilderndesenmindstekassei tede punktmngde. Mana1] [b2 kunne lade a2] [b3 koordinatakserne a3],dernetopomslutterdenplot- dennekassessider,kunafhngendeafinddata(ogderforkanfremstillesengang vre liniestykker langs 9Vivilnokbenytteosaf,atvikunbehverathandteretre-dimensionellevektorertilat grematrix-klassenskodesimplere(ogdermedikkegenereltbrugbar). 20