Indvendig 3D-opmåling

Størrelse: px
Starte visningen fra side:

Download "Indvendig 3D-opmåling"

Transkript

1 - Udvikling af software til generering af et firkantet rum, ud fra observationer indsamlet med reflektorfri totalstation x1 y1 1 x2 y2 1 A = x3 y3 1 x4 y4 1 x5 y5 1 z = ax+ by+ c rˆ x1 rˆ y1 rˆ z1 r =... rˆ x5 rˆ y5 rˆ z5 a a x = b b c c Rådata GSI-8 fil Import og visualisering af observationer 1. Redigerede observationer ax 0 1+ by 0 1+ c0 z1 f =... ax by c0 z 5 Redigerede observationer 3D-koordinater Beregning af 3Dkoordinater 2. Fladeparametre Nøjagtighed for flader 3D-koordinater Udjævn flader 3. m ˆ ˆ ˆ ˆ m m i i i= 1 φ = cr + cr c r = cr min. Dan resultatfil 5. Hjørnepunkter Nøjagtighed for hjørnepunkter Beregn hjørnepunkter 4. Fladeparametre Resultatfil Hjørnepunkter Hjørnepunkter DXF-fil Dan DXF-fil 7. Visualiser 3Dmodel i viewer 6. Aalborg Universitet Landinspektøruddannelsen Gruppe TM

2 Aalborg Universitet Institut for samfundsudvikling og planlægning Landinspektøruddannelsen Fibigerstræde 11, 9220 Aalborg Ø Titel: Indvendig 3D-opmåling Tema: Teknisk Måling Periode: 1. Februar Juni 2003 Gruppe: l8-tm05 Gruppemedlemmer: Henrik Plenge Jensen Martin Møller Sørensen Nikolaj Miller Hovedvejleder: Peter Cederholm Bivejleder: Carsten Bech Oplagstal: 6 Sidetal: 95 Appendiks 1 Bilag: 11 Synopsis: Denne projektrapport omhandler udviklingen af et program til indvendig 3D-opmåling med reflektorfri totalstation. Programmet, som kaldes DAN- RUM, foretager på baggrund af en GSI-8 fil med observationer til et firkantet rum udjævning af fladerne. Derefter beregnes hjørnepunkterne i rummet og dette visualiseres i en 3D-viewer. Der tages i projektet udgangspunkt i en målsætning om at udvikle et program, der kan automatisere eksisterende målemetoder til indvendig 3D-opmåling. På baggrund af en foranalyse, hvor blandt andet et eksisterende program til indvendig 3D-opmåling med reflektorfri totalstation behandles, udarbejdes en kravspecifikation for DANRUM. Herefter foretages opbygningen og programmeringen af systemet, hvor Struktureret Analyse anvendes til systemudvikling. Der er gennemført en test af systemet, for at kontrollere om systemet opfylder kravene fra kravspecifikationen. I konklusionen konstateres, at DANRUM opfylder de fastsatte krav. Endelig følger en perspektivering, hvor mulighederne for en videreudvikling af DANRUM diskuteres.

3 Forord Denne projektrapport er udarbejdet på Landinspektøruddannelsens 8. semester på Aalborg Universitet. Temaet for projektet er teknisk måling, og der er herunder valgt at arbejde med konstruktion af et program til automatisering af eksisterende måleprocedurer. Rapporten henvender sig primært til vejledere og censor, men kan læses af alle med interesse for teknisk måling og programmering. Kildehenvisninger til bøger og rapporter er angivet som [Efternavn, udgivelsesår, side]. Henvisninger til web-adresser er angivet ved adressen og datoen for besøget. Kildehenvisninger refererer til foranstående sætning ved placering før det afsluttende punktum. Der refereres til det foregående afsnit, hvis kildehenvisningen er placeret umiddelbart efter det afsluttende punktum. Kildehenvisninger på selvstændig linie refererer til afsnittende under overskriften. Illustrationer er alle benævnt som figurer, og figurnumre er angivet fortløbende indenfor hvert kapitel. Bagerst i rapporten findes et appendiks samt bilag. Henvisninger hertil sker ved at angive appendiks eller bilagsnummer. Figurer heri er nummerret uafhængigt af hovedrapporten. Endelig gøres der opmærksom på, at der i bilag 11 er indeholdt en CD, hvorpå blandt andet programmet findes. Aalborg Universitet d. 12. juni 2003 Henrik Plenge Jensen Nikolaj Miller Martin Møller Sørensen

4 Indholdsfortegnelse 1 Indledning Projektopbygning Projektets hovedelementer Foranalyse Definition af indvendig 3D-opmåling Anvendelsesområder for indvendig 3D-opmåling Ejerlejlighedsopdeling Byfornyelse Indretningsarkitekter og køkkenmontører Vurdering af huslejefastsættelse for lejemål Registreringsmetoder til indvendig 3D-opmåling Terrestrisk fotogrammetri Terrestrisk laserscanning Reflektorfri totalstation Sammenligning af metoder Programmer til indvendig 3D-opmåling Landmålergårdens program til reflektorfri 3D-opmåling Sammenfatning på foranalyse Problemformulering Resultat af foranalysen Endelig problemformulering Beskrivelse af projektgruppens opmålingssystem Afgrænsning Krav til tilpasset system Kravspecifikation Krav til kodningsprocedure Leica TCR 1105 reflektorfri totalstation Krav til opmålingsprogrammet Krav til funktionalitet Krav til brugergrænseflade Målgruppe for opmålingssystem Systemudvikling Hvorfor systemudvikling? Metoder til systemudvikling Valg af metode til systemudvikling Struktureret Analyse Struktureret Analyse anvendt til udvikling af DANRUM... 29

5 7 Systemanalyse Modellen for DANRUM Dataflowdiagrammer Datastrømme Dataordbog Procesbeskrivelser Sammenfatning på systemanalyse Systemdesign Teknologivalg Lagrede data Processer Datastrømme Grænsefladedesign Programdesign Brugervejledning til de manuelle processer Systemkonstruktion Opbygning af brugergrænsefladen Skærmbillede Udskrifter Programmering Opbygning af Visual Basic Programmering af DANRUM i Visual Basic Konkret eksempel på programmering Test af system Fastsættelse af a priori spredning Gennemgang af tests Test 1, Kontrol af DANRUM Test 2, Nøjagtigheden i forhold til et rums størrelse Test 3, Nøjagtigheden i forhold til placering af punkter Test 4, Indmåling af et rum med hældende loft Sammenfatning på tests Konklusion Perspektivering Optimering af DANRUM Matlab vs. Visual Basic Udjævning og matrixregneoperationer Rotation af rum Brugervenlighed Videreudvikling af DANRUM Antallet af flader Flere opmålingsmuligheder On-line løsningen Visualisering af konfidensellipsoider... 90

6 Vurdering af udjævning og efterfølgende fejlfinding Den ultimative løsning Litteraturliste Appendiks: A Matematiske forudsætninger... 1 A.1 Beregning af x-, y- og z-koordinater til punkter...1 A.2 Fladeudjævning...2 A.2.1 Hvorfor er fladeudjævning specielt?... 2 A.2.2 Den generelle udjævningsteknik anvendt på en flade... 3 A.2.3 Generel udledning af normalligninger... 8 A.2.4 Linearisering ved hjælp af Taylor-rækkeudvikling A.2.5 Beregning af foreløbige værdier A.2.6 Begrebet vægt A.3 Beregning af koordinater til hjørner Bilag: 1 Interview med landinspektør Søren Nørmølle fra Landmålergården 2 Interview med landinspektør Niels Malmskov 3 Beskrivelse af GSI-8 formatet 4 Beskrivelse af VRML 5 Procesbeskrivelser 6 Dataordog 7 Kildekode til DANRUM 8 Matlabscript [Flask3dk.m] 9 Konfidensellipsoider til test 2 10 Brugervejledning 11 CD

7 1 Indledning Denne projektrapport er udarbejdet på Landinspektøruddannelsens 8. semester under temaet Teknisk måling. Teknisk måling omfatter mange emner indenfor opmåling. Teknisk måling kan for eksempel omfatte opmåling til konstruktioner som bygninger, trafikanlæg, forsyningsanlæg og lignende. Teknisk måling anvendes til at tilvejebringe kortgrundlaget for bygge- og anlægsprojekter, etablere referencepunkter, løbende at kontrollere et bygge- og anlægsprojekts fremskriden for at sikre, at dette overholder de fastsatte specifikationer, og dokumentere projektet ved dets afslutning. [Cederholm, 2003, s. 5] Yderligere kan emner indenfor teknisk måling omhandle udvikling og test af nyt udstyr og nye metoder til opmåling. Opmåling kan blandt andet omfatte laserscanning, opmåling med totalstation og fotogrammetri. Der findes mange eksempler på teknisk måling. Der er på Landinspektøruddannelsens 8. semester afviklet ekskursioner til Vejdirektoratet i Skanderborg og Cowi i Aalborg. Disse besøg har givet indblik i forskellige projekter, hvor teknisk måling anvendes. Yderligere har Nyborgmødet 2003 givet indblik i et eksempel på teknisk måling, idet landinspektør Søren Nørmølle fra Landmålergården i Køge holdt et foredrag om sit arbejde med 3D-opmåling med reflektorfri totalstation. Målemetoden anvendes blandt andet til opmåling ved byfornyelsesprojekter. Landmålergården har udviklet en integreret løsning, således at dataindsamling og databearbejdning, herunder modellering, sker i samme program. Den integrerede løsning består af en totalstation og en bærbar computer, således at dataindsamlingen og databearbejdningen løbende kan følges på computeren undervejs i opmålingen. [Nørmølle, Foredrag, ] Vejdirektoratet arbejder med at udvikle nye målemetoder til etablering og vedligeholdelse af det overordnede vejnet i Danmark. Disse nye metoder skal optimere arbejdsprocesserne og i højere grad skabe sikkerhed for medarbejderne under løsningen af opgaven. Mange af Vejdirektoratets opgaver løses i forbindelse med tæt trafik, og det er kun i yderst nødvendige tilfælde, at vejstrækninger afspærres. Derfor er der ofte trafik i umiddelbar nærhed af medarbejderne under løsningen af opgaverne. [Vejdirektoratet, Foredrag, ] Det rådgivende ingeniørfirma, Cowi, driver rådgivende virksomhed indenfor ingeniørteknik, miljø og samfundsøkonomi. Cowi driver projekter i over 100 forskellige lande, men halvdelen af omsætningen bliver skabt på det danske marked. I Danmark arbejder Cowi blandt andet med deformationsmåling på Metroen, hvor der er forberedt en opmålingsprocedure, som kan udliciteres til et opmålingsfirma. [ ] Ifølge studieordningen for Landinspektøruddannelsens 8. semester, Teknisk måling, er formålet med projektarbejdet: 1

8 at give de studerende en indgående viden om de teorier og metoder, der vedrører teknisk måling og afsætning, samt at sætte de studerende i stand til at analysere og vurdere alternative måle- og beregningsmetoder. De studerende skal ved semesterets afslutning: være i besiddelse af viden om instrumenter og metoder til brug for teknisk måling kunne identificere og analysere de problemer, der er forbundet med teknisk måling kunne identificere og analysere alternative metoder til brug ved teknisk måling og beregning kunne danne syntese mellem identificerede problemer, teorier samt eventuelle empiriske undersøgelser kunne foretage en vurdering af alternative løsninger ud fra relevante kriterier, f.eks. vedr. nøjagtighed, pålidelighed og ressourceforbrug. Formuleringen i Studievejledingen giver mulighed for at arbejde med mange forskellige emner indenfor teknisk måling. Projektet kan have en teoretisk indgangsvinkel, hvor der arbejdes med teorier indenfor eksempelvis udjævning, og en praktisk indgangsvinkel, hvor for eksempel et nyt instrument undersøges og testes. Yderligere kan der arbejdes med en specifik case, eksempelvis deformationsmåling af broer, eller der kan arbejdes med udvikling af nye metoder og programmer indenfor landmålingen. Foredraget om det opmålingssystem Landmålergården i Køge har udviklet, som Søren Nørmølle holdt på Nyborgmødet, har vækket projektgruppens interesse for indvendig 3D-opmåling og har inspireret til at arbejde videre med dette emne. Der arbejdes således med et specifikt problem indenfor teknisk måling, hvor automatisering af eksisterende målemetoder indenfor indvendig 3D-opmåling danner fokus i projektet. Projektet kræver færdigheder indenfor udvikling af software, herunder programmering, som kan anvendes til at optimere eksisterende opmålingsmetoder. Den initierende problem lyder således: hvorledes kan indvendig 3D-opmåling automatiseres og derved optimeres med udgangspunkt i eksisterende målemetoder. Det initierende problem opfylder kravet i Studieordningen, da projektet inddrager anvendelse af og kræver kendskab til instrumenter og metoder til brug for teknisk måling. For at automatisere 2

9 og optimere eksisterende målemetoder, er det også nødvendigt at kunne identificere og analysere de problemer, der er forbundet med forskellige opmålingsmetoder og være i stand til at kunne analysere alternative opmålingsmetoder. Endelig vil det være muligt at inddrage empiri i form af interview og tests for at opnå indblik i emnet, identificere problemer og kunne foretage en vurdering af alternative løsninger ud fra relevante kriterier, for eksempel vedrørende nøjagtighed, pålidelighed og ressourceforbrug. 3

10 2 Projektopbygning Dette kapitel har til formål at redegøre for opbygningen af projektrapporten. For at kunne strukturere arbejdsprocessen og afrapporteringen i et projekt er det vigtigt af følge en overordnet metode. Metoden/modellen skal sikre, at projektets problemformulering bevares i konklusionen, og at der er sammenhæng i projektforløbet. Inden projektets problemstillinger søges besvaret, er det vigtigt først at fastlægge, hvilken fremgangsmåde, der skal anvendes for at opnå dette. Der præsenteres indledningsvis en generel model for et projekts opbygning, hvorefter modellen anvendt i dette projekt vil blive gennemgået. Sidst i dette kapitel vil projektets struktur blive illustreret. 2.1 Projektets hovedelementer Da løsningen af alle problemer ikke kan struktureres på samme måde, er det vigtigt at gøre sig nogle overvejelser om, hvorledes projektforløbet skal opbygges og struktureres. Dette gøres for at skabe overblik over hvilke elementer, der skal indgå i analysen og hvilke forhold, der skal tages i betragtning. I problemorienteret projektarbejde er det muligt at pege på fire hovedelementer, der normalt bør indgå. Hovedpunkterne er problemformulering, teori, empiri og konklusion. Meget ofte sker det, at de enkelte hovedelementer behandles flere gange, idet problemorienteret projektarbejde er en iterativ proces, hvor ny viden kan betyde inddragelse af nye teorier. De fire hovedelementer fremgår af figur 2.1. Problemformulering Teori Empiri Konklusion Figur 2.1: Hovedelementer og arbejdsgange i projektforløbet. [Andersen, 1997, s. 30] Pilene på figuren henviser til de forskellige former for analyser, der foretages i projektarbejdet for at knytte de fire hovedelementer sammen. Problemformulering: Problemformuleringen vil oftest ligge i starten af projektet. Her konkretiseres, hvad der ønskes be- eller afkræftet i projektet. Empiri: Er de iagttagelser, der fortages for at opnå et større kendskab til emneområdet. Det vil sige, at empirien sikrer projektets validitet og sammenhæng med virkeligheden. Samtidig leder empirien ofte frem til teorien i projektet. 4

11 Teori: Konklusion: En fastsat model, som anvendes til at belyse et emne, hvorefter et kvalificeret løsning forklares. En teori løser altså et problem. Det er her hovedlinierne i projektet sammenfattes, og hovedresultaterne præsenteres. Konklusionen skal afspejle den nye viden og erkendelse, der er opnået via projektarbejdet, herunder de begrænsninger resultaterne er underlagt. [Aunsborg, 2001, s. 10] [Andersen, 1997, s ] Projektgruppen har valgt at beskæftige sig med udvikling af et program, som skal være i stand til at automatisere allerede eksisterende målemetoder, det vil sige, at der arbejdes med det matematiske grundlag og konstruktionen af et program, som skal kunne håndtere disse. Forløbet i dette projekt er illustreret i figur a Teori 1 3 Problemformulering 5 Konklusion 2 Empiri 4b Figur 2.2: Projektets overordnede opbygning. 1: Udgangspunktet for dette projekt er et ønske om at arbejde med en konkret problemstilling indenfor teknisk måling. Først opstilles en initierende problemstilling, som er igangsættende for projektarbejdet. 2: For at opnå kendskab til det initierende problem foretages der en række empiriske undersøgelser, hvorved der opnås kendskab til problemområdet. 3: De empiriske undersøgelser danner tilsammen grundlag for udarbejdelsen af den endelige problemformulering, der beskriver, afgrænser og præciserer problemet. 4a: Problemet medfører inddragelse af specifikke teorier, herunder inddragelse af metode til systemudvikling. Undervejs i systemudviklingen inddrages blandt andet de relevante matematiske beregninger. 5

12 4b: For at kunne besvare problemet kræves der yderligere inddragelse af empiriske undersøgelser. Disse undersøgelser omhandler tests. 5: Afslutningsvis udarbejdes en konklusion, hvori der konkluderes om den nye viden, der er opnået gennem projektarbejdet, løser den opstillede problemformulering. På baggrund af de ovenstående punkter er projektets overordnede struktur udarbejdet. Strukturen er vist på figur 2.3. Projektopbygningen er vist i midten. Til venstre er teorien, som inddrages undervejs. Til højre ses empirien, som ligeledes inddrages undervejs. Teori Studievejledning Metode for projektstrukturering Registeringsmetoder Projekt Indledning Projektopbygning Foranalyse Kap. 1 Kap. 2 Kap. 3 Kap. 4 Problemformulering Empiri Eksempler på teknisk måling Programmer til indvendig opmåling & interview Kravspecifikation Kap. 5 Metode & beregningsteori Kap Systemudvikling Indsamling af data Studievejledning Konklusion Kap. 11 Kap. 12 Perspektivering Erfaringer gennem projektforløbet & resultater Figur 2.3: Projektets struktur set i forhold til teori og empiri. 6

13 3 Foranalyse Indvendig 3D-opmåling Formålet med dette kapitel er at redegøre for emnet indvendig 3D-opmåling og anvendelsesmulighederne indenfor dette område. De eksisterende metoder og instrumenter beskrives kort for at give et overblik over disse. Enkelte programmer præsenteres og slutteligt redegøres for valget af fokus i projektet, som går forud for udarbejdelsen af problemformuleringen. 3.1 Definition af indvendig 3D-opmåling Indvendig 3D-opmåling er en målemetode, hvor der arbejdes med observationer i tre dimensioner. Indvendig 3D-opmåling består af indsamling, bearbejdning, modellering og visualisering af observationer. De indmålte punkter, som indgår i eller udgør objektet, er således repræsenteret ved hjælp af x-, y- og z-koordinater. Dette muliggør en efterfølgende tredimensional visualisering af det indmålte objekt, se figur 3.1. Der findes flere typer af registreringsmetoder til indvendig 3D-opmåling. Følgende registreringsmetoder behandles i foranalysen: Z Figur 3.1: Objekt i et 3D-koordinatsystem. X Y Terrestrisk fotogrammetri Terrestrisk laserscanning Reflektorfri totalstation Der findes yderligere et antal registreringsmetoder til indvendig 3D-opmåling, blandt andet kan nævnes opmåling med totalstation og prisme og rumlig fremskæring med totalstation. Disse registreringsmetoder vil ikke blive behandlet yderligere i denne projektrapport. 3.2 Anvendelsesområder for indvendig 3D-opmåling Indvendig 3D-opmåling anvendes i mange situationer. Hele 3D-emneområdet er meget aktuelt, da flere og flere efterspørger 3D-modeller i forbindelse med byggeri. For eksempel i planlægningsfasen anvendes 3D-teknik til at visualisere forslag til nyt byggeri. Dette er dog ikke noget, der nødvendigvis kræver inddragelse af indvendig 3D-opmåling. Nogle af de situationer, hvor indvendig 3D-opmåling er aktuelt, er behandlet herunder. Det er blot bud på nogle af de områder, hvor indvendig 3D-opmåling kan anvendes Ejerlejlighedsopdeling Indvendig 3D-opmåling kan anvendes i forbindelse med ejerlejlighedsopdeling, som foretages af de privatpraktiserende landinspektører. Der er taget kontakt til privatpraktiserende landinspek- 7

14 tør Niels Malmskov i Vordingborg for at høre, hvorledes han foretager ejerlejlighedsopdeling. Interviewet i sin helhed fremgår af bilag 2. Malmskov anvender normalt blot dimensionsmål ved ejerlejlighedsopdeling og ikke indvendig 3D-opmåling med eksempelvis en reflektorfri totalstation. Ofte er det tilstrækkeligt med dimensionsmål, da der ikke er krav om højere præcision ved opmålingen. Der er også gennemført et interview med Søren Nørmølle fra Landmålergården i Køge, jf. bilag 1. Landmålergården anvender reflektorfri totalstation ved ejerlejlighedsopdeling i København, hvor kvadratmeterprisen er meget høj, og høj præcision er afgørende for en korrekt fastsættelse af lejlighedens præcise areal. Dette betyder imidlertid ikke nødvendigvis, at der måles i 3D, da matriklen er i 2D, jf. bilag 1, s. 3. Indvendig 3D-opmåling i forbindelse med ejerlejlighedsopdeling kan blive aktuelt i tilfælde af, at der indføres en 3D-matrikel i Danmark. I Holland undersøges mulighederne for indførelse af en 3D-matrikel, men dette er fortsat på forskningsplan. Grundet den høje procentvise udnyttelse af landet er en 3D-matrikel mere relevant i Holland. Det ser ikke ud til, at en 3D-matrikel indføres foreløbigt i Danmark, idet der simpelthen ikke er behov for dette. Derfor vil der sandsynligvis ikke være behov for at anvende indvendig 3D-opmåling til ejerlejlighedsopdeling i nær fremtid i Danmark Byfornyelse I forbindelse med byfornyelsessager anvendes indvendig 3D-opmåling i stigende grad. Ved byfornyelsessager er der tid og penge at spare, hvis der i starten af renoveringen udarbejdes en nøjagtig indvendig 3D-model af byggeriet, som kan anvendes af alle parter, som er involveret i projektet. Dette sparer tid, da der undgås adskillige efterfølgende målinger udført af de forskellige parter i byggeriet, og materialer kan forberedes på fabrikken, inden de ankommer til byggepladsen. Da målene kendes nøjagtigt, kan elementerne simpelthen produceres med de mål, der kræves. Specielt ved byfornyelsessager på større byggerier, for eksempel ved større etageejendomme, hvor lejlighederne skal have renoveret det samme, kan præfabrikation betyde en væsentlig besparelse, jf. bilag 1, s Indretningsarkitekter og køkkenmontører Andre fagområder, som kan tænkes at være interesseret i en 3D-model af en bygning eller et rum, kan være indretningsarkitekter og køkkenmontører. De vil kunne anvende 3D-modellen til at designe rummene og visualisere eventuelle planer for kunderne. Det er imidlertid ikke sandsynligt, at der kræves høj nøjagtighed i forbindelse med disse opgaver, så dimensionsmål kan måske være fuldt ud tilstrækkeligt. Yderligere vil det kræve nogle flere færdigheder end de, en sælger har, for at opmåle eksempelvis et køkken ved hjælp af indvendig 3D-opmåling. Det er således sandsynligvis kun produktet af 3D-opmålingen, en indretningsarkitekt eller køkkenmontør 8

15 er interesseret i. Det vil kræve en person med kendskab til indvendig 3D-opmåling at udføre opmålingen Vurdering af huslejefastsættelse for lejemål Vurdering af huslejefastsættelse for lejemål er et område, som også kunne tænkes løst ved indvendig 3D-opmåling. For eksempel ved sager, hvor der er tale om udlejning af en fabrikshal til kontorformål, kunne det tænkes, at der kan indrettes kontorer i flere etager, hvor der simpelthen monteres et ekstra etage for at udnytte det store rum bedre. Ligesom ved nogle typer bilfærger, hvor et ekstra dæk kan sænkes ned, hvis der er behov for ekstra plads. Her ville dimensionsmål være meget tidskrævende og besværligt og indvendig 3D-opmåling en stor fordel. Generelt kan det siges, at i situationer, hvor der er behov for kendskab til rumlighed, kan det være en fordel at anvende indvendig 3D-opmåling. Dette kunne også være i forbindelse med godshoteller, hvor lejede arealer opgøres i kubikmeter, jf. bilag 2, s Registreringsmetoder til indvendig 3D-opmåling Der findes i dag flere registreringsmetoder til indvendig 3D-opmåling. Tre væsentlige metoder er terrestrisk fotogrammetri, terrestrisk laserscanning og reflektorfri totalstation. Hver metode beskrives kort herunder med hensyn til dataindsamling og efterbehandling af data Terrestrisk fotogrammetri Fotogrammetri betyder måling i billeder, og som navnet antyder, består terrestrisk fotogrammetri i at måle i billeder optaget på jorden modsat flyfotogrammetri, hvor billederne optages fra luften. Hvis for eksempel en mur skal opmåles, opstilles kameraet foran muren i en passende afstand beregnet ud fra blandt andet nøjagtighed og billedopløsning. Derefter tages billeder fra minimum to opstillinger, og disse kan nu efterfølgende bearbejdes, og en målfast model af muren kan konstrueres. Der findes flere typer af kameraer, der kan anvendes til terrestrisk fotogrammetri ved teknisk måling. Aalborg Universitet råder blandt andet over et UMK-kamera (Universal MessKammer), som er udviklet af Carl Zeiss Jena i det tidligere DDR. UMK-kameraet er sammenbygget med en teodolit, der så kan bruges til fastlæggelse af kamerastationen ved hjælp af tilbageskæring [Brande-Lavridsen, 1995, s. 11]. Det er et gammelt, men meget nøjagtigt instrument. Derudover rådes over et Rollei Metric 6006, som er et Réseau Figur 3.2: Rollei d7, digitalt kamera. kamera. Réseau betyder, at kameraet har indbygget en gitterplade med målekryds. Disse målekryds optages automatisk på billedet og bruges ved efterbehandlingen af billederne. Endelig er der Rollei d7, som er et digitalt kamera, se figur 3.2. De to andre modeller er analoge kameraer. 9

16 Det digitale kamera har den fordel, at billederne umiddelbart efter optagelsen kan overføres til PC, og efterbehandlingen kan starte med det samme. Terrestrisk fotogrammetri anvendes ved opmålinger, hvor der er krav om stor detaljeringsgrad. Fordelen ved terrestrisk fotogrammetri er, at alle detaljer ned til en bestemt størrelse kommer med i billedet. Dette gør det muligt at måle selv meget små detaljer i objektet. Dette er en stor fordel ved arkæologiske udgravninger, hvor små detaljer er nødvendige eller ved registrering af udsmykkede facader. [Brande-Lavridsen, 1995, s. 7 og 8] Nøjagtigheden afhænger af kamerakonstanten, basis/afstands-forholdet, målforholdet og afstanden til det objekt, som skal opmåles. Der kan opnås nøjagtigheder under 1 mm, hvis målforholdet for eksempel er 1:150, basis/afstands-forholdet er 1/1 og afstanden 15 m. Terrestrisk fotogrammetri kan således anvendes til opgaver, hvor der kræves høj præcision og høj detaljeringsgrad. [Brande-Lavridsen, 1995, s. 14] Efterbehandlingen af data indsamlet ved hjælp af terrestrisk fotogrammetri kan være tidskrævende. Billeder skal efterbehandles i et software, hvor der skal måles sammenknytningspunkter, paspunkter, og der skal foretages stråleudjævning. Hvis personen er trænet kan tidsforbruget selvfølgelig begrænses Terrestrisk laserscanning Da laserteknikken for alvor gjorde sit indtog i midten af 1980 erne opstod en række helt nye muligheder i landmålingen. Terrestrisk laserscanning adskiller sig fra laserscanning fra fly ved, at laserscanneren opstilles på jorden, og herfra scannes det objekt, der ønskes indmålt. Der findes forskellige typer af terrestriske laserscannere. De to mest kendte i landet er Callidus, som distribueres af Trimble, og Cyrax 2500, som er udviklet af Cyra. Aalborg Universitet har for nylig indkøbt en Cyrax En af de væsentligste forskelle mellem de to typer er, at Callidus kan scanne 360 grader om vertikalaksen og simpelthen kan placeres midt inde i det objekt, der ønskes indmålt, og derefter scanne dette fra én opstilling. Dette gør Callidus meget anvendelig Figur 3.3: Til venstre ses laserscanneren fra Cyrax 2500, i midten ses Callidus og til højre ses et eksempel på en punktsky fra Callidus. Hullet i punktskyens bund skyldes, at Callidus ikke kan scanne, hvor den er opstillet. 10

17 ved indvendig 3D-opmåling i for eksempel lejligheder. Der bliver ikke scannet i en cirkel rundt om det sted, hvor scanneren er opstillet, se figur 3.3. Callidus scanner nemlig vertikalt fra 30 grader til 180 grader, hvorfor der opstår et hul i bunden af punktskyen. Callidus kan scanne med en nøjagtighed på 5 mm ved en afstand mellem 1-30 m. Rækkevidden for instrumentet er 150 m. [Callidus, 2001, s. 3-1] Cyrax 2500 kan scanne et vindue på 40x40 grader og skal således bruge flere opstillinger for at scanne et objekt. Da Cyrax 2500 kun kan scanne dette vindue, er den ikke egnet ved indvendig 3D-opmåling i små rum. For at knytte opstillingerne sammen bruges målingerne fra de forskellige opstillinger. Nøjagtigheden ved 3D-opmåling er 6 mm ved måling på afstande fra 1,5 m til 50 m. Rækkevidden for instrumentet er 100 m. [ ] Fordelen ved laserscanning er, at der hurtigt indsamles en meget stor mængde punkter, også kaldet punktskyer, se figur 3.3. Selv vanskelige konstruktioner kan meget hurtigt og nøjagtigt måles op, se figur 3.4. Efterbehandlingen af data fra terrestrisk laserscanning foregår ved hjælp af software, som er udviklet af fabrikanten. Der er tale om programmer, der kan danne flader ud fra punktskyerne og sammenknytte disse til egentlige objekter. Efterbehandlingen af data kan specielt ved vanskelige konstruktioner tage tid. På figur Figur 3.4: Render-model af lejlighed opmålt ved laserscanning. 3.4 er vist en vanskelig model. Lejligheden på figuren består af mange forskellige flader. Der kræves også kendskab til programmellet, for at kunne afvikle efterbehandlingen effektivt. [ ] Reflektorfri totalstation En reflektorfri totalstation har indbygget en laserafstandsmåler, som kan måle afstande til punkter uden brug af prisme, se den stiplede linie på figur 3.5. Derudover er det muligt at måle afstande til et prisme ved at ændre indstillingerne på totalstationen, se den optrukne linie på figur 3.5. Der er mange fordele ved en reflektorfri totalstation. Der skal ikke placeres et prisme i det punkt, som skal indmåles. Ved Figur 3.5: Leica reflektorfri totalstation hjælp af laserafstandsmåleren måles afstanden til punktet, og opmåling kan således foretages af én mand. Ved udvendig opmåling er det en stor fordel, når for eksempel hushjørner skal indmåles ved matrikulære målinger. Indmåling af hus- 11

18 hjørner har tidligere været en fejlkilde, hvor hjørner hidtil er indmålt ved hjælp af offset og excentricitet, da placeringen af prismet på cirkelbuen sjældent sker præcist. Reflektorfri teknik er mere præcis, da afstanden til husmuren kan måles tæt ved hjørnet. Efterfølgende drejes der ind på selve hjørnet, og vinklen kan måles. Nøjagtighedskravet ved skelmåling er imidlertid ikke så højt, at ovenstående har ført til nøjagtighedsproblemer, da den fejl, der kan opstå afhængig af geometrien ved opmålingen maksimalt ligger på 1 cm. Ved bymåling efter TK3-standarden, hvor nøjagtighedskravet er 10 cm, er det heller ikke noget problem at måle hjørner med prisme. [Kommunalteknisk Chefforening, 1999, s. 24] For at indmåle et punkt med reflektorfri teknik kræves frit udsyn til det punkt, som skal indmåles, hvorfor det i nogle tilfælde vil være nødvendigt at have en person til at signalere punktet. For eksempel er det ved skelmåling ofte ikke muligt at se direkte til skelrøret, så i dette tilfælde skal en person signalere punktet med et prisme eller andet, så der kan måles til det. Landinspektører anvender primært reflektorfrie totalstationer i forbindelse med landmåling, byfornyelsessager, bygningsrenovering, facaderenovering, beregning af etageareal, men totalstationen anvendes også med fordel ved indendørs opmåling af rum, hvor der ikke er krav om stor detaljeringsgrad. Derudover anvendes reflektorfrie totalstationer med fordel også ved indmåling af utilgængelige punker. Figur 3.6 viser en situation, hvor en reflektorfri totalstation er anvendt til at opmåle en utilgængelig tagkonstruktion. Dette ville have været en umulig opgave, hvis der kun var tale om en totalstation med elektrooptisk-udstyr, da det ikke ville være mu- Figur 3.6: Eksempel på indmåling af tagkontruktion uden bruge af prisme. ligt at placere et prisme under taget, jf. bilag 1. [ ] Nøjagtigheden ved reflektorfrie totalstationer afhænger af geometrien ved opmålingen, men der kan opnås nøjagtigheder på under 2 mm for enkeltpunkter ved opmåling, hvor geometrien er optimal og afstanden kort [ ]. Efterbehandlingen af data indsamlet med reflektorfri totalstation afhænger af det software, der er til rådighed. Der findes mange forskellige produkter på markedet. Derjer det sig om et program til indvendig 3D-opmåling indeholdende en integreret løsning til indsamling og efterbehandling af data, findes der imidlertid i Danmark kun Landmålergårdens program. Programmet kan imidlertid ikke umiddelbart benyttes, da der kræves en del kendskab til opmåling for at anvende programmet Sammenligning af metoder De tre opmålingsmetoder terrestrisk fotogrammetri, terrestrisk laserscanning og reflektorfri totalstation sammenlignes for at klarlægge hvilke fordele, der er ved de enkelte metoder. Det vil i den 12

19 forbindelse være interessant at sammenligne de forskellige metoder med hensyn til nøjagtighed og deres anvendelsesområder. De tre metoder bruges imidlertid ofte i forbindelse med forskellige typer opgaver. Reflektorfrie totalstationer anvendes typisk ved opgaver, hvor der ikke er krav om en omfattende detaljeringsgrad. Dette kan være opgaver, hvor overordnede konstruktioner skal indmåles, for eksempel ved opmåling til byfornyelsesprojekter. Terrestrisk laserscanning anvendes typisk ved opgaver, hvor der kræves en større detaljeringsgrad, for eksempel hvor der er krav om indmåling af ledningsføring og andre tekniske detaljer. Det er dog ikke muligt at opnå en detaljeringsgrad, hvor den enkelte mursten kan ses, men skift i konturer vil vise sig i punktskyen. Ved deformationsmåling af blandt andet buede konstruktioner såsom tunneller anvendes terrestrisk laserscanning med fordel. Opmålingen vil kræve så mange punkter, at det vil tage for lang tid at indmåle objektet med reflektorfri totalstation. Terrestrisk fotogrammetri er en meget billig og hurtig metode til at indsamle observationer. Yderligere indeholder billederne meget detaljerede oplysninger om det fotograferede objekt, og nøjagtigheden kan ligge på under 1 mm ved afstande under 15 meter. Detaljeringsgraden gør det muligt at se objekter helt ned på millimeter niveau. Efterbehandlingen af observationerne tager typisk længere tid ved terrestrisk fotogrammetri og terrestrisk laserscanning end ved reflektorfri totalstation. Til gengæld er resultatet en mere detaljeret model af det indmålte objekt. 3.4 Programmer til indvendig 3D-opmåling I dette projekt er udgangspunktet at arbejde med indvendig 3D-opmåling. Desværre er der ikke tid til at arbejde med både terrestrisk fotogrammetri, terrestrisk laserscanning og reflektorfri totalstation. Det vil tage alt for lang tid at sætte sig ind i alle tre emner, så der foretages en afgrænsning således, at der kun arbejdes med indvendig 3D-opmåling med reflektorfri totalstation. Indvendig 3D-opmåling med reflektorfri totalstation er et voksende felt set i lyset af, at flere og flere landinspektører anskaffer sig reflektorfrie totalstationer. Derimod er det kun få landinspektørfirmaer, der er repræsenteret, når der arbejdes med et integreret opmålingssystem, som både omfatter dataindsamling, databearbejdning og modellering. Alt afhængig af opmålingsopgaven er det ikke en videnskab at indsamle observationer i 3D med reflektorfri totalstation. Derimod kan databearbejdningen og modelleringen være vanskelig og tidskrævende, hvis der ikke er noget tilgængeligt software til at bearbejde data. Der er ikke mange programmer i Danmark, som kan håndtere indvendig 3D-opmåling med online modellering på bærbar computer. Det er kun Landmålergården i Køge, som har haft succes med et udvikle et samlet system, hvor både 13

20 dataindsamling, databearbejdning og modellering er integreret i ét program. Programmet er beskrevet herunder for at give et overblik over, hvorledes det fungerer Landmålergårdens program til reflektorfri 3D-opmåling I 1995 igangsatte Boligministeriet Projekt Renovering, som var et 3-årigt udviklingsprojekt. Projektet skulle bidrage til at fremme kvalitet, produktivitet, ressourcebevidsthed, eksport- og konkurrenceevne i den danske byggebranche. Som en del af Projekt Renovering blev byfornyelsesprojektet Projekt 207: Anvendelse af 3D-opmåling til byfornyelse iværksat i 1996 med støtte fra Boligministeriet. Projektet var et udviklings- og demonstrationsprojekt omkring 3D-opmåling af bygninger og konstruktioner. I forbindelse med projektet skulle der ske udvikling af konkrete og generelt anvendelige metoder, der skulle afprøves i en konkret byggesag. Projektet blev gennemført i perioden i et samarbejde med DTI Byggeri (Danmarks Tekniske Institut) og Landmålergården i Køge. Det program til 3D-opmåling, som Landmålergården i dag har udviklet, er et resultat af Projekt 207. [ ] Systemet består af en reflektorfri totalstation, et web-kamera og en bærbar computer. Totalstationen er forbundet til computeren via en ledning til computerens kommunikationsport. Computeren registrerer de observationer, som totalstationen indsamler. Observationerne til fladerne, lagres i en relationel Access database, som selve programmet læser data fra. Der måles til fladerne i objektet, og disse struktureres i prismer. Når alle flader i prismet er målt, skæres der afgrænsede polygoner i fladerne. De afgrænsede polygoner danner nu en 3D-model af det indmålte objekt. Programmet foretager fladeberegning og udjævning, og resultatet vises i en 3Dviewer af mærket Cortzona. Observatøren kan løbende følge med i genereringen af det objekt, som indmåles, og der kan til flader, der ikke er tilstrækkeligt godt bestemt, tilføjes supplerende målinger. En flade, hvortil der skal foretages supplerende målinger, kan markeres i 3D-vieweren, og programmet tilpasses derefter automatisk til at være klar til at modtage observationer til denne specifikke flade. Når målingen derefter foretages på totalstationen, lagres punktinformationen korrekt. Dette giver observatøren en stor fordel, da det er meget hurtigere og nemmere at orientere sig i modellen via 3D-vieweren, og tidskrævende ommålinger forebygges. Det er nemlig svært at overskue rumligheden og de mange flader. Ved større byggerier kan modellen bestå af over 2500 flader, jf. bilag 1. [Nørmølle, 2001, s. 361] Ved hjælp af web-kameraet kan der tages billeder fra de forskellige opstillinger. Dette kan være en hjælp ved efterbehandlingen af måledata og generering af det endelige produkt, som er en detaljeret og præcis 3D-model af det indmålte objekt. Programmet kan også udjævne det net, som typisk etableres i forbindelse med opmålingsprojekter. Programmet er således et robust og gennemtestet produkt, som stort set gør det muligt for én person at opmåle forholdsvis store konstruktioner. Figur 3.7 viser, hvorledes Landmålergårdens brugergrænse flade er bygget op. 14

21 Figur 3.7: Brugergrænsefladen i Landmålergårdens progam. 3.5 Sammenfatning på foranalyse I foranalysen er indvendig 3D-opmåling defineret som værende både indsamling og efterbehandling af data. Forskellige anvendelsesområder for indvendig 3D-opmåling er behandlet og en række registreringsmetoder for indvendig 3D-opmåling er beskrevet og sammenlignet, med henblik på anvendelsesområder, nøjagtighed og efterbehandling. Endelig har projektgruppen valgt at arbejde videre med reflektorfri totalstation, og Landmålergårdens program til indvendig 3Dopmåling er beskrevet. Det initierende problem ligger op til at arbejde med optimering og automatisering af indvendig 3D-opmåling. Valget af reflektorfri totalstation som fokus i projekt gør det muligt at arbejde med udvikling, herunder programmering, af et opmålingssystem. Landmålergården er det eneste firma i Danmark, som har udviklet et program til indvendig 3D-opmåling med reflektorfri totalstation. Ud fra interviewet med Søren Nørmølle har projektgruppen fået et indblik i, hvorledes et landmålingsprogram til indvendig 3D opmåling kan opbygges. I det følgende kapitel udarbejdes problemformuleringen for projektet. 15

22 4 Problemformulering I dette kapitel udarbejdes problemformuleringen, som skal danne baggrund for udarbejdelsen af opmålingssystemet. Først samles op på resultatet af foranalysen, derefter udarbejdes problemformuleringen, og indholdet af opmålingssystemet beskrives. Endelig foretages en afgrænsning i forhold til udviklingen af opmålingssystemet. 4.1 Resultat af foranalysen I foranalysen er der foretaget en afgrænsning således, at der arbejdes med optimering af indvendig 3D-opmåling med reflektorfri totalstation. I den forbindelse har Landmålergårdens opmålingsprogram til indvendig 3D-opmåling vækket projektgruppens interesse. Landmålergårdens program til indvendig 3D-opmåling er ikke udviklet til umiddelbart at kunne anvendes af andre landinspektørfirmaer. Det initierende problem lægger op til udvikling af et program til indvendig 3D-opmåling. Hovedformålet med projektet skal være at få automatiseret en række manuelle metoder, så indvendig 3D-opmåling med reflektorfri totalstation optimeres, og metoden gøres anvendelig for flest mulige landinspektører specielt set i lyset af, at flere og flere landinspektører anskaffer sig en reflektorfri totalstation. Foranalysen har resulteret i nedenstående problemformulering. 4.2 Endelig problemformulering Problemformuleringen lyder således: Hvorledes kan et system til indvendig opmåling ved hjælp af en reflektorfri totalstation udvikles til at indsamle og lagre observationer i 3D, foretage behandling og løbende kontrol af måledata, samt foretage en 3Dvisualisering af objektet? Problemformuleringen lægger op til, at der udvikles et opmålingssystem til indvendig 3D-opmåling, der kan håndtere observationer i tre dimensioner. Dette er en meget interessant opgave og rummer aspekter indenfor programmering og 3D-modellering, hvilket det ønskes at arbejde med. Dette kræver blandt andet kendskab til målemetoder, programmeringssprog og udjævning. Systemet skal gøre indvendig 3D-opmåling med reflektorfri totalstation lettere for brugerne af denne opmålingsmetode, blandt andet de privatpraktiserende landinspektører, og sammenkæde dataindsamling og efterbehandling. Det skal være muligt i marken løbende at følge opmålingen og genereringen af de opmålte objekter. Yderligere skal programmet være simpelt at anvende. 16

23 Systemet kan blandt andet anvendes ved opmålingsopgaver i forbindelse med ejerlejligheder og byfornyelsesprojekter. 4.3 Beskrivelse af projektgruppens opmålingssystem I dette afsnit beskrives indholdet af det fuldstændige opmålingssystem med de funktioner som projektgruppen forestiller sig, det endelige produkt skal indeholde. Der er altså tale om det ideelle opmålingssystem med alle funktioner og faciliteter. I det efterfølgende afsnit foretages en afgrænsning på grund af det tidsmæssige aspekt. Opmålingssystemet består af en reflektorfri totalstation og en bærbar computer. Totalstationen er direkte forbundet med computeren. Dataindsamlingen sker således on the fly, hvilket vil sige, at observationerne løbende lagres i computeren, og observatøren kan følge dataindsamlingen og umiddelbart betragte de indsamlede data. Beregningen foregår også løbende, så flader, der ikke er bestemt tilfredsstillende, kan suppleres med nye målinger med det samme. Dette er en stor fordel, da hovedparten af arbejdet kan færdiggøres i marken og fare for fejl i forbindelse med opmålingen mindskes. Der udvikles en kodetabel til totalstationen, som anvendes til at identificere de forskellige objekter. Observationerne lagres i en Access-database, som er lagringsmedie for hele programmet. Det vil sige, at de udjævnede flader også lagres her. I programmets grænseflade visualiseres observationerne, koordinaterne til de indmålte punkter og beregningsresultaterne. Efterhånden som fladerne indmåles, beregnes disse, og målingerne kontrolleres ved hjælp af fladeudjævning efter mindste kvadraters princip. Når fladerne er tilstrækkeligt nøjagtigt bestemt foretages beregning af hjørnekoordinater mellem fladerne, og modellen af objektet visualiseres i en 3D-viewer. 3D-vieweren kan visualisere modeller i VRML-formatet, som gør det er muligt at betragte modellerne fra forskellige vinkler. Inden opmålingen påbegyndes, er det yderligere muligt at vælge foruddefinerede skabeloner af objekterne i 3D-vieweren. Hvis observatøren skal opmåle et firkantet rum, er det muligt at udpege en skabelon af en firkant i 3D-vieweren. Observatøren kan således bedre følge med under opmålingen af siderne i rummet. Den flade, der ønskes indmålt, markeres, og programmet sender herefter automatisk koden for den flade, der indmåles, til totalstationen, så de efterfølgende observationer lagres korrekt. Der skal måles til minimum tre punkter på en flade for at definere denne. Observationerne og de beregnede koordinater fremgår af programmets brugergrænseflade. Når det fjerde punkt måles på en flade, foretager programmet fladeudjævning og visualiserer resultatet i form af residualer. Efterhånden som objektet indmåles, opdateres 3Dvieweren med de indmålte flader, så observatøren hele tiden kan følge med i, hvilke flader, der mangler at blive indmålt. 17

24 Programmet skal også kunne håndtere opmåling og udjævning af et fikspunktsnet, som typisk etableres for at kunne sammenknytte de forskellige opstillinger og endelig tilknytte målingerne til referencenettet, eksempelvis System 34. Programmet leverer flere outputs. De enkelte observationer og beregnede koordinater lagres i databasen og kan hentes herfra. Resultaterne fra fladeudjævningerne i form af residualer lagres ligeledes og kan bruges som dokumentation for overholdelse af en given nøjagtighed. Koordinater til hjørner for skæringerne mellem de forskellige flader lagres også og danner 3D-modellen af objektet. 3D-modellen skal kunne konverteres til en fil, som efterfølgende kan hentes ind i eksempelvis Autocad til efterbearbejdning. 4.4 Afgrænsning På grund af tidsmæssige årsager har det været nødvendigt at foretage afgrænsninger fra en del af ovenstående system. Afgrænsningen sker så der kun arbejdes med et lukket firkantet rum. Afgrænsningen er sket så de vigtigste emner, som for eksempel programmering, beregning og fladeudjævning stadig er indeholdt i projektet. Først opstilles de væsentligste afgrænsninger på punktform, derefter uddybes afgrænsningen. Programmet udvikles ikke, så det kan fungere on the fly. Det udviklede program skal ikke kunne tage højde for buede flader og vanskelige konstruktioner. Dataindsamlingen sker kun fra én opstilling Det udviklede program skal ikke kunne håndtere udendørs opmåling af objekter. Der udvikles ikke et program, der kan opmåle flere rum og knytte disse sammen. Observationerne lagres efter overførsel fra Pcmcia-kortet direkte i programmet og ikke i en ekstern database. Programmet skal ikke kunne håndtere fikspunktsnet omkring objektet, som skal opmåles. Totalstationen er ikke direkte forbundet med computeren og data overføres således ikke direkte on-line, men lagres off-line på et Pcmcia-kort. Da programmet ikke skal kunne håndtere flere opstillinger, arbejdes der ikke med at knytte observationer fra forskellige opstillinger til samme objekt sammen. Yderligere kan målingerne ikke tilknyttes referencenet ligesom sammenknytning af forskellige objekter relativt, ikke er muligt. Alt i alt betyder dette, at det udviklede program ikke indeholder den fleksibilitet, som er nødvendig, for blandt andet, at kunne anvendes af landinspektører. Det er imidlertid vigtigt at understrege, at programmet vil kunne udbygges med den nødvendige fleksibilitet, hvis der blot var mere tid til udviklingen af programmet. 18

25 4.5 Krav til tilpasset system Det program, som udvikles, skal helt overordnet være i stand til at indlæse en GSI-fil fra totalstationen, foretage behandling af måleresultaterne og danne en 3D-model, som præsenteres i en 3D-viewer. Programmet kan kun håndtere data indsamlet fra én opstilling med totalstation og kan kun opmåle et lukket firkantet rum. Der skal udarbejdes en kodetabel, så observationerne til fladerne lagres i GSI-filen efter en bestemt kodeprocedure. Programmet er efterfølgende i stand til at identificere til hvilke flader, de enkelte observationer er knyttet. Programmet beregner ud fra observationerne en flade, som udjævnes, hvis der er målt mere end tre punkter til denne. Når alle flader er bestemt, beregnes koordinater til hjørnepunkterne og en 3D-model af rummet dannes i en 3D-viewer. For at andre faggrupper kan få glæde af 3D-modellen, er det muligt at konvertere koordinaterne til rummets otte hjørner fra resultatfilen til en ny fil. Denne fil kan så anvendes i forbindelse med efterbehandling i blandt andet Autocad og Microstation. Udfra problemformuleringen og den afgrænsning, der er sket i forhold til det ideelle opmålingssystem, kan der nu arbejdes videre med udviklingen af selve opmålingssystemet. Først udarbejdes en kravspecifikation, som er en specificering og uddybning af de overordnede krav fra dette kapitel. Kravspecifikationen skal danne udgangspunkt for selve systemudviklingen. 19

26 5 Kravspecifikation Formålet med dette kapitel er at opstille de specifikke krav til opmålingssystemet, som skal danne udgangspunkt for systemudviklingen. Det er projektgruppen selv, der har fastsat disse krav. Landmålergårdens program har dog inspireret og dannet udgangspunkt for nogle af kravene. På baggrund af den tidsmæssige afgrænsning i problemformuleringen i forhold til det ideelle opmålingssystem, opstilles en række helt specifikke krav til opmålingssystemet. For at overskueliggøre kravene kategoriseres disse i to overordnede kravtyper. Henholdsvis krav til kodningsprocedure samt krav til selve opmålingsprogrammet. Opmålingssystemet består således af to dele, dels kodetabellen og dels opmålingsprogrammet. Kravene behandles i de følgende afsnit. Der er udarbejdet et appendiks til denne projektrapport. Appendiks A indeholder de matematiske forudsætninger for opmålingssystemet, herunder udledning af formler til fladeudjævning. Appendiks A indeholder alle relevante matematiske beregninger i forbindelse med udviklingen af opmålingssystemet, og der vil løbende blive henvist til dette. 5.1 Krav til kodningsprocedure Kravene til kodningsproceduren er udarbejdet, så den efterfølgende udvikling af opmålingssystemet lettes med hensyn til programmering af beregningsfunktioner. Kodningsproceduren skal sikre, at fladerne i rummet, gulv, loft og væggene, navngives ens ved de forskellige opmålinger. Yderligere skal det enkelte punkt på den enkelte flade nummereres ens fra gang til gang. Den udarbejdede kodningsprocedure skal sikre, at fladeberegningerne sker korrekt. Hvis kodningsproceduren ikke følges, risikeres, at den efterfølgende databearbejdning forløber forkert. Opmålingssystemet udvikles til udelukkende at kunne opmåle firkantede rum. I udarbejdelsen af kodetabellen tages der udgangspunkt i dette. Hvis opmålingssystemet skulle kunne opmåle femkantede eller buede rum, ville dette kræve en mere omfattende kodetabel og ville stille flere krav til selve opmålingssystemet. Det vigtigste formål med kodetabellen er at holde styr på, hvilke flader de forskellige observationer tilhører. Derudover skal kodetabellen være nem at følge under opmålingen. Det er vigtigt, at kodetabellen ikke er vanskelig at anvende. Dette vil resultere i, at der opstår fejl ved kodningen af observationerne, og et omfattende behov for efterbearbejdning af observationerne vil opstå. Ved opmåling med totalstation er det muligt at skifte objektkode og punktnummer ved indmålingen af hvert punkt. Der kan anvendes både numeriske tegn og alfanumeriske tegn. For at gøre kodningsproceduren så simpel som mulig vælges at anvende udelukkende numeriske tegn. Kodetabellen er opbygget udfra disse overvejelser og fremgår af figur

27 Objekt Kode Objekt Kode Objekt Kode... Objekt Kode Gulv 1 Gulv pkt Gulv pkt Gulv pkt Loft 2 Loft pkt Loft pkt Loft pkt Væg1 3 Væg1 pkt Væg1 pkt Væg1 pkt Væg2 4 Væg2 pkt Væg2 pkt Væg2 pkt Væg3 5 Væg3 pkt Væg3 pkt Væg3 pkt Væg4 6 Væg4 pkt Væg4 pkt Væg4 pkt Figur 5.1: Kodetabellen, som er tilknyttet opmålingssystemet. Som det fremgår af kodetabellen, tildeles hver flade en numerisk værdi. Væg 2 har eksempelvis koden 4. Alle punkter på væg 2 tildeles altså objektkoden 4, og punkterne nummereres efter proceduren i figur 5.3. Punktet i det øverste højre hjørne på væg 2 vil altså få tildelt koden 43. I programmet vil dette punkt være repræsenteret ved denne kode. Der skal som minimum indmåles fem punker på hver flade for at sikre en fornuftig udjævning og dermed bestemmelse af fladen. Der kan måles op til ni punkter på hver flade. De ekstra punkter op til ni nummereres blot fortløbende og tildeles kode efter samme princip. Punkt 9 på gulvet kodes således 19, jf. figur 5.1. Der er ikke krav om, at punkterne skal indmåles i numerisk rækkefølge, men det er vigtigt, at punkterne nummereres korrekt Figur 5.2: Figuren viser den optimale placering af punkter, når der indmåles de fem punkter, der minimum skal indmåles på hver flade. Figur 5.3: Figuren viser den optimale placering og nummerering af punkter, når der indmåles ni punkter på en flade. Totalstationen skal så vidt muligt opstilles i midten af rummet for at undgå, at der opstår spidse vinkler, og at afstandene bliver kortere end 1,5 meter. Totalstationer kan som regel ikke måle afstande kortere end 1,5-2 meter. Hvis disse forhold ikke overholdes, kan nøjagtigheden forringes. [ ] For at opnå den bedste bestemmelse af den enkelte flade, skal de indmålte punkter placeres som vist på figur 5.2. På figuren er den optimale placering af punkterne vist. Det vil selvfølgelig i nogle 21

28 tilfælde være umuligt at indmåle punkterne således, hvis der eksempelvis er tale om et rum med mange reoler langs væggene. I sådanne tilfælde skal det blot undgås, at de tre første punkter ligger på en ret linie, se figur 5.4. Nummerering af de første fem punkter på fladerne skal ske som vist på figur 5.3. Punktet i nederste venstre hjørne på hver væg nummereres punkt 1, og derefter nummereres væggens hjørner med uret rundt, afsluttende med et punkt i midten. Hvis der indmåles ni punkter på fladen, er det ikke et krav, at punkterne 6-9 skal placeres som vist på figur 5.3. De sidste fire punkter kan placeres valgfrit på fladen. Ved nummerering af punkter på gulv og loft startes blot i et vilkårligt hjørne, men derefter gælder samme krav. De efterfølgende tre hjørnepunkter nummereres med uret rundt i forhold til det første punkt, afsluttende med et punkt i midten. Hvis der også her indmåles ni punkter, gælder samme forhold om valgfri placering. Den fastsatte kodningsprocedure skal som tidligere nævnt sikre, at fladeberegningerne forløber korrekt. Udregningen af de foreløbige fladeparametre inddrager nemlig de tre første punkter på hver flade. De matematiske beregninger for bestemmelsen af de foreløbige værdier er gennemgået i Appendiks A, s. 11. For at få den bedste bestemmelse af de foreløbige værdier, skal de tre første punkter danne en trekant, så fladerne ikke kan vippe, se figur 5.4. Hvis de tre første punkter derimod ligger på en ret linie, kan fladen vippe omkring denne linie. Derfor er det vigtigt, at de tre første punkter danner en trekant Figur 5.4: Den venstre figur viser, hvorledes en flade kan dreje, hvis de tre første punkter, der indmåles, ligger på en linie. Den højre figur viser den rigtige placering af punkterne. I tilfælde af at der under opmålingen enten måles til et forkert punkt, eller at punktet kodes forkert, er det vigtigt, at dette noteres i en målebog. Derefter indmåles blot det rigtige punkt og tildeles den korrekte kode. Det er efterfølgende i opmålingsprogrammet muligt at editere i observationerne, så de forkerte observationer rettes eller slettes. Rækkefølgen for indmålingen af væggene er også væsentlig. Det er valgfrit hvilken væg, der benævnes 3, men de andre vægge skal nummereres fortløbende med uret rundt i forhold til væg 3. Der er ikke nogle krav om rækkefølgen ved indmålingen af gulv og loft, men de skal kodes 22

29 med de korrekte koder. I tilfælde af at en væg kodes med 1, vil programmet tro, at der er tale om gulvet, og i den efterfølgende beregning af hjørnepunkterne i rummet vil programmet opfatte væggen som gulv. Dette resulterer i en forkert 3D-model, idet beregningerne af hjørnepunkterne forløber forkert, da det er de forkerte flader, der skæres i de forskellige hjørner Leica TCR 1105 reflektorfri totalstation Til opmålingen af rummet anvendes en Leica TCR 1105 reflektorfri totalstation, som lagrer observationerne i GSI-8 formatet på et Pcmcia-kort. GSI-8 formatet er et tekstformat, som Leicas instrumenter anvender til indbyrdes udveksling af data. GSI-8 formatet er yderligere beskrevet i bilag 3. Pcmcia står for Personal Computer Memory Card International Association, der en udviklingsgruppe, som har fastsat standarder for små hukommelsesmedier, som blandt andet kan anvendes af totalstationer. [ ] Specifikationerne for Leica TCR 1105 fremgår af figur 5.5. Totalstationen kan uden brug af prisme måle afstande på mellem 1,5 og 80 meter. Totalstationen skal yderligere være opsat til at lagre observationerne på en bestemt måde i rådatafilen. Hvis denne opsætning er forkert, indlæser programmet observationerne forkert, se bilag 3. Specifikationer TCR 1105 Nøjagtighed Vinkelmåling, Hz, V 1,5 mgon Afstandsafhængig fejl 2 ppm Grundfejl 3 mm Rækkevidde 1,5-80 m Figur 5.5: Specifikationer for TCR Krav til opmålingsprogrammet Kravene til opmålingsprogrammet er opdelt i krav til funktionalitet og brugergrænseflade. Krav til funktionalitet fastsætter de funktioner, programmet skal kunne udføre, mens krav til brugergrænseflade fastsætter kravene til de ting, som opmålingsprogrammet skal kunne visualisere Krav til funktionalitet De funktionelle krav udgør den centrale del af opmålingsprogrammet og skal indeholde alle de funktioner, som senere skal implementeres. Opmålingsprogrammet skal kunne foretage: Konvertering af GSI-8 fil således, at programmet kan tolke de indsamlede observationer Redigering af observationer Beregning af koordinater ud fra afstand, horisontal- og vertikalvinkel Beregning af flader ud fra koordinater Udjævning af flader og bestemmelse af spredning på vægtenhed og kovariansmatrix for hver flade Beregning af residualer til hvert punkt efter fladeudjævning Redigering i punkter efter fladeudjævning og genberegning 23

30 Beregning af hjørnepunkter til det indmålte rum Beregning af kovariansmatrix for de enkelte hjørnepunkter Konvertering af beregnede hjørnepunkter til en VRML-model (Virtual Reality Modeling Language) Visualisering af VRML-model i 3D-viewer og eksport af VRML-fil Konvertering af beregnede hjørnepunkter til en DXF-fil (Drawing exchange Format) Udskrivning af resultatfil, der skal fungere som dokumentation for opmålingen. Udfra ovenstående krav kan opmålingsprogrammets funktioner umiddelbart udledes og videreføres i systemudviklingen Krav til brugergrænseflade Kravene til brugergrænsefladen skal sikre, at brugeren af opmålingsprogrammet får mulighed for at kunne foretage ændringer i observationerne og har mulighed for løbende at følge databearbejdningen. Opmålingsprogrammet skal kunne visualisere: Observationer i form af afstand, horisontal- og vertikalvinkel Beregnede 3D-koordinater i en tabel Beregnede residualer til hvert punkt efter fladeudjævning Spredning på vægtenhed for hver af de udjævnede flader 3D-modellen af rummet i en viewer Generel information Udfra ovenstående krav kan de overordnede krav til brugergrænsefladen udledes med henblik på senere brug i forbindelse med kapitel 8 Systemdesign og 9 Systemkonstruktion. 5.3 Målgruppe for opmålingssystem Målgruppen for opmålingssystemet er personer med kendskab til opmåling med totalstation. Det er således ingeniører, landmålere og ikke mindst landinspektører, der vil kunne anvende programmet. Der kræves ikke et indgående kendskab til opmåling for at anvende programmet, men det vil være en klar fordel at kende til observationer, koordinater og fladeudjævning for at kunne bedømme resultaterne. Systemet vil specielt være beregnet for landinspektører, der beskæftiger sig med 3D-opmåling af simple konstruktioner. Det udviklede system kan imidlertid kun opmåle firkantede rum, men ved en videreudvikling vil systemet kunne anvendes i forbindelse med blandt andet ejerlejlighedsopdeling. Opmålingssystemet består som nævnt af en kodetabel og et opmålingsprogram. Efter fastlæggelsen af kodetabellen i kravspecifikationen, handler det nu om at udvikle opmålingsprogrammet ud fra de fastsatte krav i kravspecifikationen. Opmålingsprogrammet vil i resten af projekt- 24

31 rapporten benævnes DANRUM. I de næste kapitler udvikles DANRUM, hvor der gås i dybden med systemudvikling. 25

32 6 Systemudvikling I dette kapitel redegøres for valg af metode til systemudvikling. Formålet med kapitlet er at uddybe valget af metode samt beskrive, hvorledes systemudviklingen er opbygget. Først kommer et afsnit, som redegør for formålet med systemudvikling. Herefter følger et afsnit, som kort beskriver to forskellige metoder til systemudvikling. Derefter følger et afsnit, som redegør for den valgte metode. Endelig følger et afsnit, som beskriver, hvorledes den valgte metode til systemudvikling er anvendt i dette projekt, hvilket illustreres sidst i kapitlet ved et flowdiagram, som viser opbygningen af systemudviklingen. 6.1 Hvorfor systemudvikling? Det er ofte en omfattende og krævende proces at udvikle nye edb-systemer. Derfor er det afgørende fra starten at gøre sig klart, hvilke overordnede målsætninger, der er for systemudviklingen. Som følge af den teknologiske udvikling har disse målsætninger ændret sig i takt med behovet, og i dag er det altafgørende at få udviklet brugervenlige edb-systemer. For at systemudvikleren kan overholde denne målsætning, er det nødvendigt, at brugeren medvirker aktivt i systemudviklingsprocessen. Dette stiller store krav til systemudvikleren og ikke mindst til brugeren. [Dresling, 2000, s. 5] Når et nyt system skal udvikles, er det vigtigt, at det udvikles således, at det opfylder de krav, eksempelvis ledelsen har til det nye system. Der kan nævnes mange eksempler på krav, der ikke er blevet opfyldt af det nye system. Et tænkt eksempel kunne være et bibliotek. Her vil ledelsen gerne have automatiseret udlånsproceduren, så der kan spares tid i forbindelse med den enkelte ekspedition. Det nye system er imidlertid så indviklet at anvende for brugerne, at ekspeditionerne tager længere tid efter, det nye system er indført. Det er sådanne uhensigtsmæssigheder, der skal undgås. Løsningen hedder systemudviklingsmetoder, hvor en metode følges, så alle forhold vedrørende det nye system afdækkes, inden systemet udvikles. 6.2 Metoder til systemudvikling Der findes flere forskellige metoder til systemudvikling. To anvendte metoder herhjemme er Struktureret Analyse og ObjektOrienteret Analyse og Design (OOA&D). Det er også disse to metoder, der er stiftet bekendtskab med på tidligere semestre. Ved at følge en metode opnås det bedste grundlag for systemudvikling, da metoden tager højde for næsten alt lige fra det eksisterende system til designet af det nye system. En metode fører så at sige systemudvikleren gennem alle de nødvendige faser i udviklingen af det nye system. Hvorledes et system skal analyseres og hvilken metode, der skal anvendes, afhænger af opgaven. Struktureret Analyse Struktureret Analyse stammer helt tilbage fra omkring 1970, hvor de første analysemetoder til 26

33 systemudvikling blev udarbejdet. I denne periode bestod arbejdet i at automatisere nogle af datidens manuelle systemer. Der var derfor behov for analysemetoder, der kunne fokusere på det manuelle systems funktioner og automatisere disse. Struktureret Analyse er således en meget anvendelig metode, når der skal arbejdes funktionsrelateret. Metoden er i Danmark specielt anvendt ved udarbejdelse af administrative systemer, såsom lønsystemer. Metoden er sidenhen blevet suppleret med dataorienterede metoder, således at der både tages højde for funktioner, men også hvorledes data skal struktureres og benyttes af systemet. [Mathiassen, 2000, s. 8] Objektorienteret Analyse og Design OOA&D er op gennem 1990 erne blevet den dominerende metode til analyse og design af edbsystemer. At analysere objektorienteret vil sige, at der tages udgangspunkt i systemets objekter. Objekter kan være en medarbejder eller en type data, der indgår i systemet. Denne måde at betragte et system på giver en god indsigt i systemet og dets omgivelser. Metoden kæder analysen og designdelen sammen og giver en god fremstilling af det samlede system. OOA&D anvender den objektorienterede terminologi og kan således være svær umiddelbar at sætte sig ind i, hvis blot en del af metoden ønskes anvendt i en systemudviklingsproces. [Mathiassen, 2000, s. 3, 16-17] 6.3 Valg af metode til systemudvikling Inden den egentlige systemudvikling påbegyndes, er det vigtigt at vælge, hvilken metode, der skal anvendes. Hvis dette valg ikke er foretaget, risikeres, at nogle aspekter overses eller udelades, da der ikke følges en struktureret arbejdsproces. Det er også muligt at udarbejde sin egen metode, hvor aspekter fra forskellige metoder indgår, men dette kræver et godt indblik i de forskellige metoder. Ofte tages udgangspunkt i en metode, men undervejs kan der godt ske afvigelser fra metoden, da denne er udviklet til alle systemer generelt. Alt afhængig af hvilket system, der udvikles, kan nogle faser i metoden være overflødige. Der vælges at anvende værktøjerne fra Struktureret Analyse, fordi denne metode umiddelbart virker som den mest oplagte til udviklingen af DANRUM. Valget er foretaget på baggrund af erfaringer med de to metoder fra tidligere semestre. OOA&D indeholder gode værktøjer til udarbejdelse af foranalysen, hvor det eksisterende system i virksomheden analyseres og beskrives. Foranalysen kædes nemt sammen med analysedelen i OOA&D, og resultatet er en gennemarbejdet kravspecifikation, som danner et godt udgangspunkt for systemdesignet. Selve systemdesignet i OOA&D er meget omfattende at anvende, og det er svært umiddelbart at kæde denne fase sammen med programmeringen. Alt i alt virker OOA&D mere oplagt, når der er tale om udvikling af store komplekse systemer til virksomheder, og mindre egnet, når der skal udvikles simple systemer. DANRUM er et relativt simpelt system, og det skal ikke udvikles til en bestemt virksomhed. Der 27

34 er således ikke behov for en omfattende analyse af et eksisterende system i en specifik virksomhed. Projektgruppen har selv fastsat kravene til systemet, og funktionerne i systemet er ligeledes lette at overskue. Struktureret Analyse er derfor mere relevant at anvende. Metoden indeholder en god overgang mellem analysen af systemets funktioner og selve programmeringen. Styrken ligger i funktionsanalysen, hvor systemet struktureres i diagrammer på forskellige niveauer. Udfra disse diagrammer er det muligt at foretage programmeringen. OOA&D vurderes til at være alt for tung at bruge, da DANRUM blot er et stykke software, som udvikles uden fokus på en specifik virksomhed. Det er således kun nødvendigt at bruge en del af en systemudviklingsmetode, og da OOA&D ikke er opbygget på en sådan måde, at det er let at hoppe ind og bruge enkelte dele af analysen, er Struktureret Analyse endnu en gang mere oplagt at anvende. 6.4 Struktureret Analyse Ideen bag Struktureret Analyse var at løse datidens problemer omkring ustruktureret og uigennemskuelig systemudvikling. Ved at anvende Struktureret Analyse til udviklingen af et system opnås der flere fordele. Eksempelvis kan det nævnes, at de analyse- og beskrivelsesværktøjer, som metoden indeholder, er i stand til at give et hurtigt overblik og samtidig beskrive systemet ned i mindste detalje. Ligeledes er værktøjerne gode til at supplere hinanden, således at tingene kun bliver beskrevet ét sted i forbindelse med systemudviklingen. [Delskov, 1991, s. 17] Den overordnede fremgangsmåde i Struktureret Analyse er top-down metoden. Når der arbejdes top-down, startes der med at se hele systemet som en stor funktion. Derefter brydes systemet op trin for trin i mindre funktioner. Til sidst opnås en fuld beskrivelse af alle systemets funktioner og handlinger. Til denne proces benytter metoden sig af et værktøj, der kaldes dataflowdiagrammer. Dataflowdiagrammerne har den fordel, at de er lette at arbejde med, og de er med til at skabe overblik over de enkelte funktioner i systemet. [Frederiksen, 2000, s. 36 og 39] [Dresling, 2000, s. 5] Målet med Struktureret Analyse og dataflowdiagrammerne er at skabe en formel beskrivelse af, hvordan systemet skal se ud og fungerer. Den formelle beskrivelse kaldes modellen for systemet og skal beskrive systemet så godt, at det er muligt at konstruere systemet ud fra modellen. [Frederiksen, 2000, s. 36] For at gøre systemudviklingen mere overskuelig, er Struktureret Analyse opdelt i seks faser. Faserne skal sikre, at systemudvikleren kommer gennem alle relevante forhold undervejs i systemudviklingen. Rækkefølgen i faserne er fremkommet ud fra det overordnede princip med at arbejde top-down. De seks faser er: 28

35 Foranalyse Systemanalyse Systemdesign Systemkonstruktion Test af system Vedligeholdelse De seks faser viser strukturen i systemudviklingen: Først udarbejdes en foranalyse, som skal afdække de problemer og krav, som systemet skal løse. Derefter handler systemanalysen om at få udarbejdet en model for det nye system, hvor brugeren og systemudvikleren i et tæt samarbejde indarbejder ønsker og tilpasser programmet. Når systemanalysen er færdig påbegyndes systemdesignet, hvor der tages udgangspunkt i resultaterne fra systemanalysen. Systemdesignet inddrager ikke brugeren, idet det udelukkende er en fase, hvor resultaterne fra analysen skal formuleres i en designspecifikation. Designspecifikationen skal danne grundlag for den egentlige programmering. I kapitlet om systemkonstruktion programmeres selve systemet. Her følges igen samme princip om at arbejde top-down. Når systemkonstruktionen er færdig, skal systemet testes for at finde ud af, om det opfylder kravene og virker, som det er tiltænkt. Det er vigtigt, at der udarbejdes en testplan, så systemet testes i forhold til alle funktioner og rutiner. Endelig følger vedligeholdelsen af systemet, som typisk sker løbende med rettelse af fejl og uhensigtsmæssigheder samt indarbejdelse af nye faciliteter. [Delskov, 1991, s ] [Dresling, 2000, s ] Det kan godt virke meget omfattende at skulle igennem alle disse faser. Det vil afhænge af det konkrete system, hvor omfattende de forskellige faser bliver. Det er vigtigt at pointere, at analysen er et værktøj, som ikke må overskygge målet. Målet for systemudviklingen er at finde ind til de behov og krav, systemet skal opfylde. Altså er det vigtigt at forholde sig kritisk til analysemetoden og foretage de valg, der er nødvendige i forhold til det aktuelle system. [Delskov, 1991, s. 66] Struktureret Analyse anvendt til udvikling af DANRUM DANRUM er som tidligere nævnt ikke et særligt omfattende program. Dette forhold taget i betragtning betyder, at kun nogle af faserne i Struktureret Analyse udfærdiges. Derudover vil der også under den enkelte fase ske tilpasninger, så kun de relevante værktøjer anvendes. Figur 6.1 er flowdiagrammet for systemudviklingsprocessen. Der er foretaget en del tilpasninger og afgrænsninger i forhold til Struktureret Analyse. Nogle tilpasninger skyldes den tidsmæssige afgrænsning, som er foretaget i problemformuleringen. Andre tilpasninger skyldes, at kravene til DANRUM ikke er blevet opstillet i samarbejde med en rekvirent. De overordnede principper fra metoden om at arbejde top-down og opbygge modellen af DANRUM udfra dataflowdiagrammer anvendes. 29

36 Kapitel 7 Systemanalyse Dataflowdiagrammer Datastrømme Dataordbog Krav til model Procesbeskrivelser Kapitel 8 Systemdesign Teknologivalg Grænsefladedesign Programdesign Konstruktion af model Brugervejledning Kapitel 9 Systemkonstruktion Brugergrænseflade Programmering DANRUM Kapitel 10 Test af System Figur 6.1: Flowdiagram over systemudviklingen. Der er ikke udarbejdet en foranalyse, som følger retningslinierne i Struktureret Analyse. Den udarbejdede foranalyse i kapitel 3 ligger så at sige uden for selve systemudviklingen. Foranalysen i denne projektrapport har ikke til formål at identificere problemer og ønsker til DANRUM. I foranalysen i kapitel 3 er det slet ikke besluttet endnu, at DANRUM skal udvikles. Grunden til, at foranalysen i systemudviklingen kan sorteres væk, er, at der er ikke er behov for at afdække problemer og krav til et eksisterende system. DANRUM udvikles ud fra egne ideer, så det er projektgruppen selv, der fastsætter kravene til DANRUM. Systemudviklingen består således af systemanalyse, systemdesign, systemkonstruktion og test af systemet. Indholdet af disse afsnit præsenteres i starten af hvert kapitel. Under hvert afsnit er der kun inddraget de relevante dele fra metoden. Endelig er vedligeholdelsesfasen ikke udarbejdet, da det ikke er væsentligt at behandle dette emne, idet DANRUM ikke udvikles i samarbejde med en rekvirent. Yderligere er DANRUM i forvejen så afgrænset, at det ikke er relevant at arbejde med vedligeholdelse. Der vil snarere være tale om færdigudvikling. 30

37 7 Systemanalyse I systemanalysen skal kravene fra kravspecifikationen videreføres. Med udgangspunkt i kravene udarbejdes der en struktureret specifikation for DANRUM. Specifikationen skal efterfølgende indgå som grundlag for systemdesignet, se kapitel 8 Systemdesign. Formålet med systemanalysen er ikke at konstruere DANRUM, men derimod at specificere de krav, der skal danne grundlag for selve systemkonstruktionen. Systemanalysen udarbejdes i trin og bliver efterhånden mere specifik. Dette betyder, at der arbejdes fra overordnede funktioner til specifikke beskrivelser af de enkelte funktioner. I Struktureret Analyse defineres en funktion som en proces. [Delskov, 1991, s ] [Dresling, 2000, s. 33] Det gælder om at få struktureret kravene til DANRUM i en samlet model. Derefter skal modellen nedbrydes i mindre processer. Dette gøres ved at opstille dataflowdiagrammer over processerne. Dataflowdiagrammerne over modellen og de enkelte processer fungerer som dokumentation for systemanalysen og er vigtige for at give indblik i DANRUM. I systemanalysen anvendes dataflowdiagrammer til at give et visuelt overblik, mens detaljer beskrives med tekst i en dataordbog samt i procesbeskrivelser. Indholdet og udformningen af dataordbogen og procesbeskrivelserne beskrives senere i kapitlet. Modellen fungerer primært som en mere detaljeret kravspecifikation for konstruktionen af DAN- RUM. Sekundært skal modellen give systemudvikleren overblik og indsigt i systemet. Modellen er således grundstammen i opmålingsystemet, og normalt er det meget vigtigt, at denne model verificeres af brugerne, inden der arbejdes videre med systemudviklingen. Modellen for opmålingssystemet er teknologineutral og inddrager således ikke overvejelser omkring hvilken teknologi, der skal anvendes til at udvikle systemet med. [Delskov, 1991, s. 37] 7.1 Modellen for DANRUM For at beskrive modellen for DANRUM anvendes en række værktøjer. Hvert værktøj har sit eget formål og skal afdække et område indenfor modellen. De fire værktøjer, der anvendes til at beskrive modellen, er: Dataflowdiagram Datastrømme Dataordbog Procesbeskrivelse De fire værktøjer og anvendelsen af dem i forbindelse med DANRUM beskrives under hvert af de tilhørende afsnit. De fire værktøjer udarbejdes sideløbende og kan ikke stå alene, da de 31

38 tilsammen udgør modellen for DANRUM. Der skal selvfølgelig startes et sted, og der startes som regel med at udarbejde dataflowdiagrammer. [Delskov, 1991, s. 41] Dataflowdiagrammer Dataflowdiagrammerne skaber overblik over DANRUMs processer ved at skitsere disse i forskellige niveauer. Dataflowdiagrammerne viser DANRUM set fra funktionssiden. Der udarbejdes tre niveauer af dataflowdiagrammer; kontekstdiagrammet, oversigtsdiagrammet og endelig et antal niveau 2-diagrammer. Kontekstdiagrammet betragter DANRUM i forhold til omgivelserne, oversigtsdiagrammet skitserer alle processer og endelig anvendes niveau 2-diagrammerne til at skitsere de enkelte processer. I dataflowdiagrammerne anvendes en bestemt symbolik. For at kunne forstå de enkelte dataflowdiagrammer, er det vigtigt at kende til denne symbolik. I Struktureret Analyse benyttes der fire forskellige symboler i dataflowdiagrammerne, se figur 7.1. Beregn 3Dkoordinater 2. Rådata Bobler viser processer. Processens navn er angivet inde i boblen med tilhørende nummer. Pile illustrerer en hændelse, der sætter en proces i gang. Hændelsen er typisk, at der kommer data til en proces. De navngivne pile kaldes datastrømme eller dataflow. GSI-8 fil To parallelle streger symboliserer et datalager. Navnet på datalagret står mellem stregerne. Datalagret kan godt være midlertidigt. Totalstation Firkanter betegner en instans udefra og kaldes eksterne processer eller terminatorer. Navnet på instansen står inde i firkanten. Figur 7.1: Symboler anvendt i dataflowdiagrammerne. [Frederiksen, 2000, s. 39] Top-down tankegangen fremgår tydeligt af inddelingen af dataflowdiagrammerne. Det mest overordnede diagram, kontekstdiagrammet, kaldes et niveau 0-diagram. I oversigtsdiagrammet, der kaldes et niveau 1-diagram, nummereres de enkelte processer med ét ciffer. I niveau 2-diagrammerne nummereres delprocesserne med to cifre. Fremgangsmåden er illustreret på figur 7.2. Figuren til venstre er kontekstdiagrammet, som viser et systems sammenhænge med omverdenen og afgrænser systemet udadtil. I midten er principperne for oversigtsdiagrammet, som omfatter de overordnede processer indenfor et system, vist. Til højre ses de overordnede processer delt op i delprocesser udtrykt i et antal niveau 2-diagrammer. [Delskov, 1991, s. 41] [Frederiksen, 2000, s. 39] 32

39 Kontekstdiagram Oversigtsdiagram Niveau 2-diagrammer Figur 7.2: Hierarkiet for, hvorledes dataflowdiagrammerne opdeles og nummeres. Kontekstdiagram Som tidligere nævnt er det første diagram, der udarbejdes, kontekstdiagrammet. Kontekstdiagrammet for DANRUM viser de datastrømme, der udveksles med omverdenen, se figur 7.3. Instanserne i omverdenen kaldes for terminatorer, og det er vigtigt af slå fast, at DANRUM udelukkende kommunikerer med instanserne og ikke bestemmer over dem. Totalstation Observationer DANRUM 3D-Model CAD-program VRML-fil Resultatfil Teksteditor Bruger Input Brugere Figur 7.3: Kontekstdiagrammet for DANRUM. Det fremgår af figur 7.3, at DANRUM modtager observationer fra en totalstation, og at brugere kan fodre DANRUM med oplysninger. Som output leverer DANRUM tre filer. Den ene fil er en resultatfil, som skal fungere som dokumentation for de foretagede beregninger, mens de andre filer er henholdsvis en CAD-fil af det indmålte rum og en VRML-fil. CAD-filen kan importeres i et CAD-miljø med henblik på videre bearbejdning og VRML-filen kan importeres i en 3Dviewer med henblik på visualisering. 33

40 Oversigtsdiagram Der ses nu bort fra forbindelserne til omverdenen og kigges udelukkende på DANRUM. Formålet med oversigtsdiagrammet er at opdele DANRUM i mindre processer for at overskueliggøre programmet. [Delskov, 1991, s ] Rådata Import og visualisering af observationer 1. Redigerede observationer Beregning af 3Dkoordinater 2. 3D-koordinater GSI-8 fil Redigerede observationer 3D-koordinater Fladeparametre Nøjagtighed for flader Udjævn flader 3. Dan resultatfil 5. Hjørnepunkter Nøjagtighed for hjørnepunkter Beregn hjørnepunkter 4. Fladeparametre Resultatfil Hjørnepunkter Hjørnepunkter Visualiser 3Dmodel i viewer 6. Dan DXF-fil 7. DXF-fil Figur 7.4: Oversigtsdiagrammet viser de overordnede processer i DANRUM. I figur 7.4 er alle processer visualiseret og har fået tildelt et nummer. For hver proces udarbejdes der i næste afsnit et niveau 2-diagram. Mellem processerne ses datastrømmene. Det eneste datalager, som fremgår af figuren, er GSI-8 filen indeholdende rådata. Dette viser, at DANRUM ikke benytter datalagre undervejs i beregningsforløbet. Niveau 2-diagrammer For at uddybe de enkelte processer i oversigtsdiagrammet og detaljeret vise, hvad DANRUM skal kunne, er der for hver proces udarbejdet et niveau 2-diagram. I det enkelte niveau 2- diagram er processen opdelt i en række delprocesser, som er nummereret med tocifrede numre. Udfra disse delprocesser er den enkelte proces specificeret og funktionaliteten fremgår. 34

41 Proces 1, Import og visualisering af observationer Rediger kode 1.3 Slet observation 1.4 Slet alle observationer 1.5 Rådata Konvertering af GSI-8 fil 1.1 Observationer Visualisering af observationer 1.2 Redigerede observationer Figur 7.5: Niveau 2-diagram over Proces 1, Import og visualisering af observationer. Proces 1 indlæser først rådata fra GSI-8 filen og oversætter rådata til et mere læsbart format. Derefter visualiseres observationerne i en tabel. Nu er det muligt at redigere i koderne og slette i observationerne. Hvis en forkert Rådata-fil indlæses kan denne slettes og en ny indlæses. Outputtet er de redigerede observationer, som skal bruges i de følgende processer. Proces 2, Beregning af 3D-koordinater Indtast koordinater til opstillingspunkt 2.2 Redigerede observationer Beregning af 3Dkoordinater 2.1 3D-koordinater Visualisering af 3D-koordinater 2.3 3D-koordinater Figur 7.6: Niveau 2-diagram over Proces 2, Beregning af 3D-koordinater. Input til Proces 2 er de redigerede observationer. Koordinaterne til opstillingspunktet indtastes, og beregningen af 3D-koordinaterne foretages. Efter beregningen af 3D-koordinaterne visualiseres disse i en ny tabel i DANRUM. Outputtet er 3D-koordinater, som skal anvendes i de følgende beregningsprocesser. Formlerne for beregningen af 3D-koordinaterne fremgår af Appendiks A, s

42 Proces 3, Udjævning af flader 3D-koordinater Indtast apriori spredning 3.2 Beregn foreløbige fladeparametre 3.1 Foreløbige parametre Udjævning af flader 3.3 Fladeparametre Visualisering af resultater 3.4 Fladeparametre Rediger og genberegn flader 3.5 Figur 7.7: Niveau 2-diagram over Proces 3, Udjævning af flader. Input til Proces 3 er de beregnede 3D-koordinater. Først beregnes de foreløbige fladeparametre udfra de tre første punkter på hver flade. Derefter skal a priori spredningen for fladeudjævningen indtastes. A priori spredningen vurderes ud fra, hvor nøjagtigt totalstationen måler og definitionsnøjagtigheden af fladerne i rummet, jf. afsnit 10.1 Fastsættelse af a priori spredning. Herefter foretages fladeudjævningen, og resultatet visualiseres i form af spredningen på vægtenheden for hver flade og residualet til hvert enkelt punkt, der angiver den vinkelrette afstand fra den udjævnede flade til det enkelte punkt. De punkter, der menes at være fejlbehæftede, kan udelades, og fladeudjævningen kan gentages. Outputtet er fladeparametre for de seks flader i rummet. Formlerne for udjævningen af fladerne er beskrevet i Appendiks A, s Proces 4, Beregning af hjørnepunkter Input til Proces 4 er de beregnede fladeparametre. Ud fra fladeparametrene beregnes hjørnepunkterne mellem de tre flader, der mødes i de otte hjørnepunkter. Resultatet er 3Dkoordinater til de otte hjørnepunkter i rummet. Formlerne for beregningen af hjørnepunkterne er beskrevet i Appendiks A, s. 14. Fladeparametre Beregn hjørnepunkter 4.1 Hjørnepunkter Figur 7.8: Niveau 2-diagram over Proces 4, Beregning af hjørnepunkter. 36

43 Proces 5, Dan resultatfil Figur 7.9 viser de input, som resultatfilen modtager. Selve dannelsen af resultatfilen sker løbende, efterhånden som beregningerne skrider frem. De redigerede observationer indføres i resultatfilen. Hvis det ønskes at se rådata, kan rådatafilen blot åbnes. Derefter lagres 3D-koordinaterne, fladeparametrene og kovariansmatricerne fra fladeudjævningen. Endelig lagres de otte hjørnepunkter med tilhørende kovariansmatricer i resultatfilen. Udover ovenstående input, lagres også generel information om objektet, der indmåles, og koordinaterne til opstillingspunktet. Redigerede observationer 3D-koordinater Dan resultatfil 5.1 Fladeparametre Nøjagtighed for flader Hjørnepunkter Nøjagtighed for hjørnepunkter Figur 7.9: Niveau 2-diagram over Proces 5, Dan resultatfil. Proces 6, Visualiser 3D-model i viewer Inputtet til proces 6 er koordinaterne til de otte hjørnepunkter, som er beregnet ud fra skæringen mellem fladerne. Først dannes en VRML-fil, hvor koordinaterne indsættes på de korrekte pladser. Derefter indlæses VRML-filen i 3D-vieweren, hvorved 3D-modellen visualiseres. Hjørnepunkter Dannelse af VRML-fil 6.1 VRML-fil Indlæsning af VRML-fil i 3Dviewer 6.2 Figur 7.10: Niveau 2-diagram over Proces 6, Visualiser 3Dmodel i viewer. Proces 7, Dannelse af DXF-fil Hjørnepunkter Dannelse af DXFfil 7.1 DXF-fil Figur 7.11: Niveau 2-diagram over Proces 7, Dannelse af DXFfil. Figur 7.11 viser den sidste proces, Dannelse af DXF-fil. Her er inputtet igen hjørnepunkterne i rummet. Disse punkter indlæses i en DXF-fil, således at koordinaterne placeres på de korrekte steder i filen. Derefter er det muligt at indlæse filen i et CAD-miljø for yderligere editering. Udover hjørnekoordinaterne indeholder DXF-filen også punktnumre og information om, hvordan punkterne skal sammensættes for at danne en model af rummet. Der anvendes symboler i form af kryds til at visualisere hjørnepunkterne. Hjørnepunkterne forbindes med linier, og fladerne i rummet udfyldes ikke. Der dannes således en trådmodel af rummet, som kan viderebearbejdes i CAD-miljøet Datastrømme Formålet med dette afsnit er at beskrive de data, som systemet gør brug af. Normalt vil dette 37

44 afsnit ved hjælp af entitets- og relationsdiagrammer forklare, hvorledes systemets database skal opbygges. Det er normalt en omfattende opgave, og der udarbejdes en decideret dataanalyse. I forbindelse med DANRUM er der imidlertid ikke nogen stor mængde data, der skal struktureres i en database, så derfor vil dette afsnit ikke blive så omfattende som normalt. Efter at have beskrevet DANRUMs processer ved hjælp af dataflowdiagrammer, er det nu vigtigt at beskrive, hvorledes DANRUM skal håndtere data. DANRUM gør ikke brug af en database, men modtager data i form af observationer fra rådatafilen. Disse data bliver løbende anvendt og ændret undervejs i programmet og håndteres derfor som variable. Dette betyder, at data ikke lagres undervejs i beregningerne, og der anvendes således ikke datalagre. Data bliver blot løbende indført i resultatfilen, så det er muligt efterfølgende at kunne dokumentere de processer, der er foregået. Data fremgår af niveau 2-diagrammerne i form af datastrømmene. I niveau 2-diagrammerne er hver datastrøm navngivet. For at få indblik i, hvad de forskellige datastrømme indeholder af data, skal dataordbogen betragtes. I dataordbogen er hver datastrøm beskrevet med hensyn til indhold og de definitioner, der knytter sig hertil. [Delskov, 1991, s. 42] Dataordbog Sideløbende med udarbejdelsen af dataflowdiagrammerne opbygges en dataordbog. Dataordbogens funktion er at beskrive de enkelte datastrømme fra dataflowdiagrammerne så detaljeret som muligt. I dataflowdiagrammerne er det kun muligt at se det overordnede navn på datastrømmen. I dataordbogen er det muligt at se, hvad den enkelte datastrøm indeholder af data. Datastrømmene opdeles, så det er muligt at se, hvilke dataelementer, der udgør disse. Et dataelement er et stykke data, som ikke skal defineres yderligere, og kan enten bestå af numeriske eller alfanumeriske værdier. I dataordbogen anvendes en bestemt symbolik for at gøre den overskuelig og forståelig. De anvendte tegn er: = læses som "er" + læses som "og" * Stjernen angiver, at der er tale om et dataelement. Dette betyder, at data ikke kan deles yderligere op. Opbygningen af dataordbogen sker ved at beskrive data i flere trin, hvormed ordbogen bliver mere og mere detaljeret. På figur 7.12 er vist et eksempel, hvor datastrømmen Observationer beskrives. 38

45 Datastrøm: Observationer Trin 1: Observationer = Kode + Horisontalvinkel + Vertikalvinkel + Afstand Trin 2: * Kode = koden til et punkt jævnfør kodetabellen Heltal, længde 2 karakterer * Horisontalvinkel = horisontalvinklen til et punkt Reelt tal, længde 8 karakterer * Vertikalvinkel = vertikalvinklen til et punkt Reelt tal, længde 8 karakterer * Afstand = afstanden til et punkt Reelt tal, længde 8 karakterer Figur 7.12: Udsnit fra dataordbogen, som viser indholdet af datastrømmen Observationer. Dataordbogen følger den kronologiske rækkefølge i processerne, således at datastrømmene i proces 1 defineres først og så videre. Den fuldstændige dataordbog fremgår af bilag 6. [Delskov, 1991, s. 105] [Frederiksen, 2000, s. 42] Procesbeskrivelser Den sidste fase i systemanalysen er udarbejdelse af procesbeskrivelser. Formålet med procesbeskrivelserne er at beskrive systemets processer i detaljer. I dataflowdiagrammerne er processerne opdelt i overskuelige delprocesser. Hver af disse delprocesser skal beskrives ved hjælp af procesbeskrivelser. Det er kun funktionerne, som de enkelte delprocesser skal udføre, der beskrives. Der skal ikke fokuseres på de data, som anvendes. I dataordbogen er hver datastrøm allerede defineret. [Delskov, 1991, s. 49] Der kan anvendes forskellige metoder til at beskrive processerne på. I Struktureret Analyse anvendes oftest enten almindeligt sprog eller struktureret sprog. I denne projektrapport anvendes almindeligt sprog. Det er vigtigt, at procesbeskrivelserne er så korte og klare som muligt, så der ikke opstår tvivlsspørgsmål, og systemudvikleren er i stand til at forstå indholdet. Samtlige procesbeskrivelser er indeholdt i bilag Sammenfatning på systemanalyse Nu er systemanalysen gennemført, og der foreligger en model for DANRUM i form af dataflowdiagrammerne, dataordbogen og procesbeskrivelserne. Modellen indeholder en struktureret specifikation for DANRUM og fungerer som en slags uddybet kravspecifikation for programmet. Ved hjælp af dataflowdiagrammerne, dataordbogen og procesbeskrivelserne er det nu nemmere at fortsætte systemudviklingen, da denne er gennemtænkt og udspecificeret. Modellen skal 39

46 anvendes i den videre systemudvikling, hvor der skal arbejdes med systemkonstruktion og design af brugergrænseflade. Systemanalysen er udarbejdet uden stillingtagen til den teknologi, der skal anvendes. I næste kapitel behandles designet af DANRUM, og der arbejdes blandt andet videre med valg af teknologi. 40

47 8 Systemdesign Systemdesign fungerer som bindeled mellem systemanalysen og den egentlige systemkonstruktion. Resultatet af systemanalysen er i form af dataflowdiagrammerne et abstrakt billede på, hvordan systemet i bedste fald skal fungere. Formålet med systemdesign er i så høj grad som muligt at overføre ideerne eller kravene fra det abstrakte billede til en konkret specifikation af systemet. Systemdesignet skal med andre ord sørge for, at programmet rent fysisk konstrueres, så det opfylder de specifikationer, der er opstillet gennem systemanalysen. Derfor tages der også i mange af systemdesignets aspekter udgangspunkt i oversigtsdiagrammet og niveau 2-diagrammerne fra systemanalysen. Systemdesignet danner i sidste ende grundlag for systemkonstruktionen og selve programmeringen. Der vil i det efterfølgende blive gået i dybden med følgende emner inden for systemdesign: Teknologivalg Grænsefladedesign Programdesign Brugervejledning [Delskov, 1991, s. 30, 205] 8.1 Teknologivalg Førend det er muligt at gå i gang med systemkonstruktionen er det nødvendigt at beslutte sig for, hvilken teknologi, der skal benyttes. Valg af teknologi spiller en rolle i forbindelse med: Lagrede data Processer Datastrømme Alt efter hvilken teknologi, der vælges i forhold til de ovenstående emner, får valget stor indflydelse på den efterfølgende systemkonstruktion. Vælges det eksempelvis, at en enkelt af processerne skal udføres manuelt, skal der tages hensyn til dette i konstruktionen af de processer, der har med denne proces at gøre Lagrede data Med udgangspunkt i oversigtsdiagrammet og niveau 2-diagrammerne fra systemanalysen gennemgås data med hensyn til måden, de er opbevaret på. Eneste datalager i DANRUM er GSI- 8 filen indeholdende rådata. Hvorvidt denne, der i første omgang forefindes på et Pcmcia-kort, skal ekspederes manuelt kan diskuteres, men det forudsættes, at filen i forvejen er overført og lagret som en tekstfil på computerens harddisk. Som regel trækker større systemer på en data- 41

48 base, men set i lyset af programmets omfang er dette ikke nødvendigt. Altså består teknologivalget med hensyn til lagrede data i, at al data opbevares på digital form i form af en tekstfil Processer Processerne kan i følge Struktureret Analyse udføres af enten mennesker eller maskiner. I og med at data er lagret digitalt, kan stort set alle processer udføres af en computer. Teknologivalget i forbindelse med systemets processer drejer sig altså om, at en stor del af processerne skal udføres af et program på en computer med styresystemet Windows. Med hensyn til nogle af processerne udføres de af mennesker. Det drejer sig i første omgang om redigeringen af observationerne efter, at de er blevet indlæst. For det andet om vurderingen af de enkelte fladeudjævninger i forhold til residualerne, der eventuelt resulterer i en frasortering af punkter. Disse processer foregår online og er en tovejskommunikation mellem brugeren og programmet. Programmet bygges op fra bunden, og implementeringen foretages ved hjælp af Microsoft Visual Basic 6.0, idet dette program udover at indeholde mange grundlæggende programmeringsmæssige bestanddele også indeholder mange præfabrikerede grafiske elementer. På denne måde får programmet et professionelt og brugervenligt udseende, uden at der bruges alt for meget programmeringstid. Til visualisering af 3D-modellen benyttes programmet CosmoPlayer, der er en 3D-viewer. Komponenten er kompatible med Visual Basic og kan downloades gratis fra internettet. Derudover vil det være hensigtsmæssigt at have et program på computeren, der kan læse DXF-formatet, for at kontrollere om DXF-filen er korrekt Datastrømme Datastrømme skal overføres via et kommunikationsmedie. Eksempelvis kan kommunikationsmediet være et stykke papir, en datakommunikationslinie, en dataskærm eller et tastatur. Som det var tilfældet med de ovenstående afsnit forenkles teknologivalget ved, at stort set alle processer udføres af programmet. Foregår datastrømmen indenfor det samme program på en computer, består datastrømmen mange gange blot af en række variable, der overføres mellem programmets forskellige dele. 8.2 Grænsefladedesign Alt afhængig af om der er behov for kommunikation mellem en bruger og et system eller mellem et system og andre systemer, er der behov for design af grænseflader. Grænseflader er et systems kontakt til omverdenen. Grænseflader kan overordnet deles op i to kategorier, brugergrænseflader og systemgrænseflader. Brugergrænsefladen sørger for kommunikationen mellem en bruger og et system, mens systemgrænsefladen sørger for kommunikationen mellem et system og andre systemer. 42

49 Programmets brugergrænseflade er meget enkel i sin opbygning. Dette er muligt, idet systemet i forhold til andre systemer indeholder forholdsvist få funktioner. Brugergrænsefladen udgøres først og fremmest af et enkelt skærmbillede, hvori hele programmet kan afvikles. Skærmbilledet er overordnet inddelt efter de principper, der fremgår af figur 8.1. Som det ses af figur 8.1, afviger programmet i første omgang fra normen ved, at der ingen menubjælke er for oven. I betragtning af de få funktioner er der ingen grund til at benytte sig af menuer. Derimod benyttes knapper, som placeres på selve brugergrænsefladen. Havde der været tale om et mere avanceret program med mange funktioner, ville det have været svært at finde plads til knapperne til de mange funktioner, og skærmbilledet ville have været svært at overskue. Eksempelvis ville der med hensyn til Microsoft Word aldrig kunne være plads til en knap for hver af de mulige funktioner, programmet tilbyder. I de tilfælde er en menubjælke en god måde at strukturere funktionerne på. Danrum Generel information Observationer CosmoPlayer Udjævning Figur 8.1: Den overordnede inddeling af skærmbilledet. Opdelingen af skærmbilledet i fire felter kan forklares ved, at der som udgangspunkt er givet noget data i form af observationer. Disse data og de funktioner, der knytter sig dertil, er der afsat plads til øverst til venstre i skærmbilledet. Umiddelbart under data, nederst til venstre, er der afsat plads til beregningen af data, hvilket vil sige selve fladeudjævningsdelen af programmet. Blandt andet skal resultatet af de forskellige udjævninger visualiseres i denne del af skærmbilledet. Når først data er beregnet, kan de visualiseres i 3D-vieweren, som der er afsat plads til nederst til højre. Det sidste felt øverst til højre er tiltænkt generel information om opmålingen. 43

50 Eksempelvis er det muligt at indtaste oplysninger omkring opmålingen og resultatet af den, som det er nødvendigt at være opmærksom på. Derudover vil der blandt andet i forbindelse med definitionen af koordinatsystemet blive anvendt en dialogboks for at sikre, at de nødvendige input for beregninger er indtastet. Dialogbokse kan aktiveres ved tryk på en knap og åbner et lille nyt vindue. Herefter er det i dette vindue muligt at indtaste oplysninger. Da systemet arbejder offline og fungerer uafhængigt af andre programmer, er der ikke behov for design af systemgrænseflader. 8.3 Programdesign I programdesign deles systemet op i mindre dele, der er så indbyrdes uafhængige som muligt. Uafhængigheden gør det muligt at arbejde med mindre dele uden de store konsekvenser for resten af systemet. Disse mindre dele kaldes moduler. Opdelingen i moduler er også en fordel i forbindelse med systemkonstruktionen, da de stort set kan implementeres samtidigt og uafhængigt af hinanden, hvilket i høj grad effektiviserer systemkonstruktionen. [Delskov, 1991, s. 218] I forbindelse med at systemet skal opdeles i moduler, er det en god ide at tage udgangspunkt i de i forvejen opstillede niveau 2-diagrammer. Systemets forskellige processer kan nemlig i mange tilfælde overføres og fungerer som et uafhængigt modul. Nogle gange er det muligt at slå flere af processerne sammen. Med udgangspunkt i niveau 2-diagrammerne kan systemet opdeles i følgende moduler: 1. Konvertering af GSI-8 fil 2. Visualisering og redigering af observationer 3. Beregning og visualisering af 3D-koordinater 4. Beregning af foreløbige fladeparametre 5. Udjævning af flader og efterfølgende vurdering og redigering 6. Beregning af 3D-hjørnekoordinater 7. Oprettelse og skrivning til resultatfil 8. Oprettelse af DXF-fil 9. Oprettelse og visualisering af VRML-fil i 3D-viewer Modulerne vil i det følgende hver især blive gennemgået med hensyn til, hvilke processer modulet består af. Derudover vil der med hensyn til hvert modul blive forklaret, hvorfor enkelte processer er blevet slået sammen, og hvorfor modulet kan implementeres uafhængigt af de andre. Det første modul kan sidestilles med proces 1.1 og har til opgave at sortere i GSI-8 filen og 44

51 indhente relevante oplysninger i form af observationer. Observationerne tildeles hver især et variablenavn og skal bruges i den videre beregning. Modulet kan udemærket implementeres uafhængigt af de andre. Implementeringen bygger udelukkende på viden om og behandling af GSI-8 formatet. Resultatet af konverteringen er let at kontrollere, idet den oprindelige GSI-8 fil kan sammenholdes med variablenavnene og disses værdier. I det andet modul er processerne 1.2, 1.3, 1.4 og 1.5 slået sammen. Dette skyldes, at visualiseringen af observationerne opdateres sideløbende med redigeringen. Hvad enten det drejer sig om sletning af observationer eller blot redigering, sker det på grundlag af visualiseringen. Denne bør derfor også løbende ændre sig som følge af den foretagne redigering. Processerne implementeres derfor som ét modul. Der skal i bearbejdningen af data ikke tages hensyn til hverken det foregående eller efterfølgende modul. Observationerne, der bliver leveret af modul 1, opdateres i modul 2 og sendes videre til modul 3. I det tredje modul er processerne 2.1, 2.2 og 2.3 slået sammen, idet processen 2.3 blot er en visualisering af resultatet af processerne 2.1 og 2.2. Modulet kan udemærket implementeres uafhængigt af de andre, idet modulet omregner observationerne leveret af det foregående modul til nogle 3D-koordinater, der skal bruges af det efterfølgende modul. Tages der eksempelvis udgangspunkt i nogle få eksempler på observationer, kan resultatet af omregningen i modul 3 let kontrolleres ved at sammenholde resultatet med resultatet af en omregning foretaget på lommeregner. Modul 4 er endnu et beregningsmodul, der kan implementeres uafhængigt af de andre. Modul 4 dækker over processen 3.1, hvor de foreløbige fladeparametre bliver beregnet. Modulet tager resultatet fra modul 3, beregner de foreløbige fladeparametre og sender dem og resultatet fra modul 3 videre til modul 5. I modul 5 foretages udjævningen og en eventuel efterbehandling af den. Modulet indeholder processerne 3.2, 3.3, 3.4 og 3.5, idet disse processer hænger nøje sammen. På forhånd er det muligt at indtaste nogle grænseværdier for residualerne. Herpå udjævnes fladerne og alt efter resultatet, der visualiseres, foretages eventuelt en udelukkelse af enkelte punkter, hvorefter der foretages en ny udjævning og så videre. Modulet sender de udjævnede fladeparametre videre til modul 6. I modul 6 beregnes 3D-koordinaterne til rummets hjørner. Modulet dækker over processen 4.1. Ud fra fladeparametrene, der leveres af modul 5, beregnes hjørnepunkterne ud fra skæringerne mellem fladerne. Modul 7 fungerer som et form for udskriftsmodul. Der udskrives dog udelukkende til en fil. Filen 45

52 oprettes, og observationerne og de beregnede 3D-koordinater skrives til den. Modulet kan implementeres uafhængigt af de andre moduler, idet det blot benytter sig af resultaterne fra disse. Modul 8 har til opgave at oprette en DXF-fil, der kan fortolkes af et CAD-program. Modulet benytter sig af 3D-hjørnekoordinater fra modul 6, som det sætter ind i en DXF-fil forberedt til formålet. Herpå kan denne fil åbnes i et hvilket som helst CAD-program, der kan fortolke DXFfiler. Det niende og sidste modul er en smule mere kompliceret end det ottende, idet det udover at skulle leverer det samme resultat som modul 8, blot i form af en VRML-fil, også skal visualisere VRML-filen direkte i 3D-vieweren i programmet. Som nævnt sørger opdelingen i moduler for, at forskellige dele af programmet kan programmeres samtidigt af forskellige personer, hvilket effektiviserer programmeringsprocessen. 8.4 Brugervejledning til de manuelle processer Udover at tage stilling til de processer, der foregår på computeren, kan også de manuelle processer behandles i systemdesignet. Det er væsentligt, at de mennesker, der betjener systemet, er klar over, hvad deres opgave indebærer for, at systemet i sidste ende leverer det rigtige produkt. Som det fremgår af teknologivalget, drejer de manuelle processer sig om editering af de indlæste observationer, samt vurdering af de enkelte fladeudjævninger i forhold til residualerne, hvilket eventuelt resulterer i en udelukkelse af punkter og genberegning af flader. Med hensyn til redigeringen af de indlæste observationer er brugervejledningen ikke så kompliceret. De indlæste observationer kan redigeres i en tabel i DANRUM. Under opmåling af et rum er det vigtigt at notere ændringerne til observationerne i en målebog. Ændringerne til observationerne vil typisk være tildeling af en ny kode til et punkt eller sletning af forkerte punkter. Det er vigtigt, at der under opmålingen indmåles de korrekte punkter. Hvis et fejlindmålt punkt slettes, og det korrekte punkt ikke er indmålt, vil dette punkt mangle i den følgende fladeberegning. Når en kode til et punkt skal rettes, slettes den forkerte kode, og den korrekte kode indtastes i tabellen. Når de noterede koderettelser er gennemført, er det muligt at kontrollere observationernes koder. Der må nemlig ikke være punkter, der har den samme kode, og det er muligt at se, om alle punkter til hver flade er indeholdt i observationerne. Hvis der mangler punkter, kan det resultere i, at rummet skal opmåles på ny. Det er vigtigt, at observatøren selv er opmærksom på, at alle punkter indmåles, og noterer sig de fejl, der efterfølgende skal rettes. Hvis dette ikke gøres, så forløber beregningerne ikke korrekt, og modellen af rummet bliver ikke rigtig. 46

53 Vurderingen af de enkelte fladeudjævninger i forhold til residualerne stiller større krav til brugeren. Ud fra opmålingsmæssige erfaringer og de respektive vægges definitionsnøjagtighed er det op til brugeren ud fra størrelsen af residualerne at vurdere, hvilke punkter, der eventuelt skal udelukkes fra udjævningen. Efter udelukkelsen kan udjævningen foretages på ny uden det udelukkede punkt, hvorefter det nye resultat kan vurderes. En anden vurderingsfaktor er spredningen på vægtenheden, som skal give omkring 1, hvis observationernes a priori spredninger er fastsat korrekt. I tilfælde af at spredningen på vægtenheden for en flade er under 1 er apriori spredningerne for store og vice verca. Fastsættelsen af apriori spredningerne er behandlet i kapitel 10.1 Fastsættelse af a priori spredning. 47

54 9 Systemkonstruktion I dette kapitel gøres der rede for, hvorledes DANRUM designes og programmeres. Udgangspunktet for dette kapitel er systemanalysen og systemdesignet. Først beskrives tilvejebringelsen og opbygningen af programmets brugergrænseflade. Dernæst beskrives, hvordan DANRUM er programmeret. Kapitlet gør altså rede for overvejelserne bag udviklingen af brugergrænsefladen og giver indsigt i, hvorledes programmeringen er grebet an. I forbindelse med programmeringen af de funktioner som DANRUM skal kunne udføre, er Appendiks A anvendt. I dette appendiks er det muligt at finde de formler og matricer, som skal anvendes undervejs i programmeringen af funktionerne. 9.1 Opbygning af brugergrænsefladen Brugergrænsefladen kan overordnet deles op i en skærmbillededel og en udskriftsdel. Skærmbillededelen består af de skærmbilleder, brugeren støder på i afviklingen af programmet, mens udskriftsdelen udgøres af dokumentationen for de resultater, programmet leverer Skærmbillede Ved opbygningen af skærmbilledet spiller flere faktorer ind. Eksempelvis er der i design af skærmbilledet lagt stor vægt på overskueligheden og brugervenligheden. Inddelingen og rækkefølgen er fremkommet på baggrund af niveau 2-diagrammerne, procesbeskrivelserne i kapitel 7 og modulinddelingen i kapitel 8. Desuden er der, som tidligere nævnt, også fundet inspiration i Landmålergårdens program. Den overordnede opdeling af brugergrænsefladen er beskrevet i afsnit 8.2 Grænsefladedesign. For at overskueliggøre og dokumentere de enkelte funktioners udseende og placering er dette afsnit delt op på følgende måde: Felt 1: Observationer Felt 2: Udjævning Felt 3: CosmoPlayer Felt 4: Generel information Under hvert punkt beskrives feltet oppe fra og ned. Tekst skrevet i kursiv refererer til det enkelte element i skærmbilledet. 48

55 Observationer Observationerne placeres øverst i venstre hjørne. Den første funktion består af en knap, som giver brugeren mulighed for at indlæse en GSI-8 fil. Når GSI-8 filen er valgt, visualiseres denne i en tabel, hvor brugeren har følgende muligheder i form af knapper. Brugeren kan slette en fil, redigere en observation eller slette en observation. Slet fil giver mulighed for at slette den indlæste fil. Rediger observation eller Slet observation giver brugeren mulighed for at ændre observationerne inde i tabellen. Knapperne er placeret lige over tabellen, idet funktionerne knytter sig til denne. Knappen Beregn koordinater er placeret under tabellen. De beregnede koordinater visualiseres i en tabel lige under denne knap, jf. figur 9.1. Danrum Indlæs Observationer Slet Fil Kode Rediger Observation Slet observation Horisontal (gon) Vertikalvinkel (gon) Afstand (m) Beregn Koordinater Kode X - Koordinat Y - Koordinat Z - Koordinat Figur 9.1: Opbygningen af det første felt. Udjævning Nederst i venstre side er knappen, Beregn flade, placeret. Funktionen bag knappen beregner Danrum Indlæs Observationer Slet Fil Kode Rediger Observation Slet observation Horisontal (gon) Vertikalvinkel (gon)afstand (m) Beregn Koordinater Kode X - Koordinat Y - Koordinat Z - Koordinat Beregn Flader Redisualer (mm) Flade nr. Pkt. 1 Pkt. 2 Pkt. 3 Pkt. 4 Pkt Undlad pkt. Genberegn Flader Spredning på vægtenhed Figur 9.2: Opbygningen af felt 1 og 2. 49

56 ud fra de ovenstående koordinater fladeparametrene til de forskellige flader. Eftersom fladerne udjævnes, vil alle punkter få tildelt et residual. Residualet visualiseres i en tabel under knappen. Under tabellen er der placeret to knapper, Undlad punkt og Genberegn flader. Ved at trykke på Undlad punkt får brugeren mulighed for at gå ind i tabellen og undlade et punkt. Genberegn flader genberegner herefter fladerne, jf. figur 9.2. CosmoPlayer Nederst i højre del af skærmbilledet placeres som tidligere nævnt en 3D-viewer, der viser det indmålte rum. Denne viewer, som er af mærket CosmoPlayer, fylder hele feltet, da det giver en bedre overskuelighed. Vieweren har den egenskab, at den indeholder en række funktioner, som gør det muligt at bevæge sig rundt, panorere og zoome i billedet. For at visualisere det indmålte rum trykkes der på knappen, Dan model, ovenover vieweren, jf. figur 9.3. Danrum Indlæs Observationer Slet Fil Kode Rediger Observation Slet observation Horisontal (gon) Vertikalvinkel (gon) Afstand (m) Beregn Koordinater Kode X - Koordinat Y - Koordinat Z - Koordinat Dan model Beregn Flader Redisualer (mm) Flade nr. Pkt. 1 Pkt. 2 Pkt. 3 Pkt. 4 Pkt Undlad pkt. Genberegn Flader Spredning på vægtenhed Figur 9.3: Felt 1, 2 og 3. Generel information Øverst i højre side indsættes en tekstboks, hvor der kan indtastes generel information om det indmålte rum. For eksempel kan der skrives noget om stedet for opmåling, tidspunktet, samt hvilken observatør, der står for opmålingen. Disse informationer føjes efterfølgende til resultatfilen. Under tekstboksen sidder der to knapper, Eksportér til DXF og Gem resultatfil. Bag knappen Eksportér til DXF ligger en funktion, som konverterer modellen til DXF-formatet således, at modellen kan indlæses i et CAD-program. Gem resultatfil gør det muligt at gemme alle beregninger i en tekstfil. Det endelige skærmbillede kommer således til at fremstå som vist på figur

57 Danrum Indlæs Observationer Slet Fil Rediger Observation Slet observation Kode Horisontal (gon) Vertikalvinkel (gon) Afstand (m) Info om målingen Tidspunkt og sted for opmåling Observatør og eventuelle bemærkninger Beregn Koordinater Kode X - Koordinat Y - Koordinat Z - Koordinat Dan model Ekspotér til DXF Gem Resultatfil Luk Program Beregn Flader Redisualer (mm) Flade nr. Pkt. 1 Pkt. 2 Pkt. 3 Pkt. 4 Pkt Undlad pkt. Genberegn Flader Figur 9.4: Det endelige skærmbillede Udskrifter Spregning på vægtenhed Det er i DANRUM muligt at gemme en dokumentationsfil med beregningerne. Dokumentationsfilen består af en simpel tekst-fil, som indeholder alle beregningerne i kronologisk rækkefølge. Hvis der sker ændringer i beregningerne undervejs, overskrives de gamle beregninger af de nye. Rækkefølgen i dokumentations-filen er som følger: Generel information Observationer Koordinater Fladeligninger Kovariansmatricer for fladeparametre Hjørnepunkter Kovariansmatricer for hjørnepunkter Figur 9.5 er et uddrag af en resultatfil. RESULTATFIL FOR OPMÅLING AF RUM Dato: :21:41 Journalnummer: Test 4 Adresse: Fibigerstræde 11 Eventuelle bemærkninger: Seminarrum 1 Opmålt af grp. 8.5 Dato: 16/5-03 Punktnr Hz V s gon gon m , ,495 6, , ,8325 5, , ,9045 5, , ,322 5, , ,199 2, , ,761 6, , ,328 7,008 Figur 9.5: Uddrag af resultatfil. 9.2 Programmering I dette afsnit forklares, hvorledes programmeringen er foretaget i Visual Basic. Først beskrives opbygningen af udviklingsprogrammet, Visual Basic. Derefter beskrives udviklingen af de moduler, som programmet er delt op i. Beskrivelsen består af problemer, resultater og erfaringer i 51

58 forbindelse med programmeringen. Sidst i afsnittet gives et konkret eksempel på, hvordan syntaksen i Visual Basic ser ud Opbygning af Visual Basic Lige så længe der har eksisteret computere, har der eksisteret programmering. Dog har både hardwaren, softwaren samt programmeringen ændret sig. Sproget Basic, der står for Beginners All-purpose Symbolic Instruction Code, stammer fra starten af 1960 erne og var det første sprog, som henvendte sig til undervisningsbrug. Sproget har sidenhen udviklet sig til det sprog, som kendes i dag, Visual Basic. Visual Basic 1.0 blev lanceret i 1991 og blev hurtigt meget populært, da nybegyndere relativt hurtigt og simpelt kunne udvikle brugergrænseflader. Syntaksen ligger meget tæt på talesproget, og brugeren har mulighed for grafisk at designe brugergrænsefladen. [Cronberg, 1999, s. 23] I dette projekt benyttes Visual Basic 6.0, der er en nyere version. Programmet indeholder alle de værktøjer, der skal til for at lave et program. Programmet har et meget simpelt udviklingsmiljø. Med udviklingsmiljøet menes der opbygningen af programmets brugergrænseflade. Udviklingsmiljøet indeholder blandt andet værktøjer, der hjælper med at skrive kode ved automatisk at foreslå procedurer, der kan benyttes i en given situation. Alle disse hjælpefunktioner er en af grundene til, at Visual Basic kaldes for et RAD-system (Rapid Application Development). Selv for nybegyndere er det meget let at udvikle et brugbart program. Brugergrænsefladen i Visual Figur 9.6: Brugergrænsefladen i Visual Basic

59 Basic 6.0 fremgår af figur 9.6. I resten af dette afsnit gøres der rede for, hvordan udviklingsmiljøet er bygget op. [Cronberg, 1999, s. 30] Udviklingsmiljøet er opbygget således, at der øverst er placeret en menu- og værktøjslinie. Her findes mange af de funktioner, som kendes fra andre Windows-programmer. Eksempelvis klip og kopier. Yderligere findes der nogle funktioner, som er helt specifikke for Visual Basic. De mest anvendte funktioner er placeret i både menuen og på værktøjslinien, jf. figur 9.7. Midt på skærmen, under menu- og værktøjslinien, findes et tomt vindue, der i Visual Basic kaldes for en Form. Programmøren opbygger sit program ved at placere en række forskellige objekter på formen. Programmøren fylder med andre ord det tomme vindue ud med funktionalitet. De forskellige objekter tildeles forskellige egenskaber alt efter, hvilket objekt det er, jf. figur 9.7. Objekter i form af kontroller kommer fra værktøjskassen, som er placeret til venstre på skærmen. I værktøjskassen findes alle de kontroller, der benyttes til at designe brugergrænsefladen, jf. figur 9.7. De oftest anvendte kontroller er knapper, tekstbokse og listbokse. Ved hjælp af kontrollerne kommunikerer brugeren med programmet. Værktøjskassen benyttes ved at trykke på den enkelte kontrol. Kontrollen markeres, og musen flyttes over i den tomme form, hvor der markeres et omrids svarende til den placering og størrelse, kontrollen skal have. Menu- og Værktøjslinie Projekt-Explorer Kontroller Form Properties Kodevindue Skærmviser Figur 9.7: De overordnede dele i Visual Basics brugergrænseflade. 53

60 I den højre side af skærmen er der placeret tre vinduer over hinanden. Det øverste vindue er en projekt-explorer, som viser, hvad projektet består af, og hvorledes det er opbygget. Det er altså muligt at have flere forme i samme projekt. Projekt-exploreren minder meget om Windows Stifinder. Under projekt-exploreren ligger properties-vinduet. Properties-vinduet viser en række egenskaber for hver kontrol. For eksempel kan det vise kontrollens højde, bredde, font og placering. Alle projekter, forme og kontroller har hver deres properties, jf. figur 9.7. Vinduet nederst i højre hjørne viser, hvor på skærmen programmet åbnes. Ved at dobbeltklikke på formen eller kontrollen kommer et kodevindue frem. Den øverste linie i dette vindue står allerede skrevet og angiver start for denne kontrol. Den nederste linie er ligeledes skrevet og angiver slutningen på koden. Imellem start og slut skrives koden af programmøren. For eksempel kan det være de handlinger, der skal ske, når brugeren trykker på en knap eller vælger i en liste. Udviklingsmiljøet kan være i to tilstande, når der udarbejdes et program i Visual Basic. Enten foregår det i Design time, hvor programmøren indsætter kontroller eller skriver kode til dem. Den anden tilstand er Run time. Her kan funktionerne i programmet afprøves for at se, om programmet virker som tiltænkt. Det er hele tiden muligt at afprøve programmet, og opstår der en fejl, mens programmet kører, fortæller Visual Basic ved hjælp af online beskeder, hvor fejlen er. Beskederne giver også et bud på, hvilken løsning, der er på problemet, hvilket gør programmet meget let at arbejde i. [Kristensen, 2001, s. 18] Programmering af DANRUM i Visual Basic Formålet med dette afsnit er at redegøre for programmeringen af DANRUM i Visual Basic. Som beskrevet i kapitel 8 Systemdesign er programmeringen delt op i et antal moduler. Hvert modul er udviklet for sig og til sidst samlet til det endelige DANRUM. I det efterfølgende gøres der først rede for nogle generelle forhold omkring programmeringen. Dernæst beskrives hvert moduls opbygning, eventuelle alternative måder at konstruere modulerne på, samt problemer og erfaringer i forbindelse med programmeringen af modulet. Visual Basic er et objektorienteret programmeringssprog. Det vil sige, at programmøren blandt andet er i stand til at definere sine egne klasser. En klasse er en samling af objekter med samme egenskaber. Udover egenskaberne kan der til objekterne i en klasse knytte sig en række metoder. Med andre ord er det muligt at definere, hvordan objekterne kan manipuleres ved hjælp af forskellige former for procedurer. Oprettelsen af en brugerdefineret klasse spiller en central rolle i objektorienteret programmering. Frem for hele tiden at skulle definere det enkelte objekt, er det muligt at tildele et objekt en klasses generelle egenskaber og metoder. Egenskaber og metoder defineres en gang for alle og kan genbruges lige så mange gange, det er nødvendigt. I Visual Basic defineres en ny klasse ved at oprette et klassemodul, hvori egenskaber og metoder defineres. 54

61 I forbindelse med konstruktionen af de enkelte moduler er det en fordel at have adgang til og gøre brug af Visual Basic s veldokumenterede hjælpe-funktion. Her er det muligt både at skabe sig et overblik ved en kronologisk gennemgang af de forskellige aspekter af programmering i Visual Basic, men også søge efter detaljeret information omkring et specifikt emne. Et andet hjælpemiddel, der kan drages nytte af, er fejlsøgningsfunktionerne, Debug og Watch. Ved hjælp af Debug-funktionen kan programmets forskellige procedurer gennemløbes trinvis ved at udføre én kommando ad gangen. Undervejs i gennemløbet kan der ved hjælp af Watch-funktionen holdes øje med værdien af procedurens forskellige variable. 1 Konvertering af GSI-8 fil og redigering af observationer Forud for programmeringen er det nødvendigt at sætte sig ind i selve opbygningen af en GSI-8 fil med hensyn til, hvor i tekstfilen de forskellige observationer kolonnevis er placeret, jf. bilag 3. Herefter sørger modulet for at hente observationerne i de rigtige kolonner og skrive dem ud i observationstabellen, hvor det er muligt at redigere de enkelte observationer eller slette en hel observation. Når observationerne er redigeret, hentes de over i et dynamisk todimensionelt array. Et array er en samling af variable af samme datatype. Samles variablene i et array, er det muligt at holde styr på og manipulere alle variablene på en gang, eller håndtere dem enkeltvis. At arrayet er todimensionelt vil sige, at arrayet i stedet for at bestå af en enkelt række består af flere rækker, hvilket svarer til en tabel eller en matrix. Ydermere er arrayet dynamisk, hvilket vil sige, at arrayet tilpasser sig antallet af observationer. Fordelen ved at gøre arrayet dynamisk er, at arrayet ikke optager mere hukommelse end nødvendigt samtidig med, at eksempelvis for-løkkerne udelukkende løbes igennem det antal gange, der er behov for. Modulet kan også designes på en sådan måde, at der i stedet for at tage udgangspunkt i observationernes fysiske placering i GSI-8 filen, tages udgangspunkt i måden observationerne er kodet på. En afstandsobservation har en bestemt kode, mens en horisontalretningsobservation har en anden og så videre. Rækkefølgen af observationerne i GSI-8 filen er brugerdefineret og kan variere fra totalstation til totalstation. Er rækkefølgen en anden, kan programmet ikke læse observationerne ind. Modulet ville med udgangspunkt i observationskoden være mere fleksibelt. I stedet for at placere observationerne i et array kan de placeres i tabeller i en database, hvilket blandt andet ville gøre det muligt at benytte sig af SQL-forespørgsler. Dette ville gøre håndteringen af observationerne mere fleksibel blandt andet med hensyn til sortering, gruppering og så videre. Observationerne skal dog kun håndteres i begrænset omfang, hvilket ikke retfærdiggør de ekstra arbejdsresourcer, en eventuel tilknytning af en database ville kræve. 2 Beregning og visualisering af 3D-koordinater Dette modul tager de redigerede observationer fra arrayet med observationer og regner dem om til 3D-koordinater. Forud for beregningen taster brugeren opstillingspunktets x-, y- og z-værdi 55

62 ind. Som default-værdier er valgt 10, 10 og 2 m, da disse værdier for mange rum vil resultere i positive x-, y- og z-værdier. Modulet benytter sig af de formler til beregning af 3D-koordinater, der er beskrevet i Appendiks A, s.1. Det er i Visual Basic muligt at benytte sig af de mest almindelige trigonometriske funktioner, der spiller en central rolle i formlerne. Efterhånden som 3D-koordinaterne beregnes, visualiseres de i en tabel på brugergrænsefladen. I forbindelse med en test af systemet er der i øvrigt opstået et behov for direkte at kunne indlæse en koordinatfil. Denne funktion vil altså kunne benyttes i de situationer, hvor koordinatberegningen allerede er foretaget manuelt eller i et andet program. I øjeblikket er det kun muligt at indlæse koordinater med en længde på 5 karakterer. Funktionen kan dog uden besvær ændres til at kunne håndtere koordinater indeholdende flere karakterer som for eksempel System koordinater. 3 Beregning af foreløbige fladeparametre Dette modul har først og fremmest til opgave at beregne de foreløbige parametre til fladerne. Opgaven er løst ved først at definere en ny klasse ved navn Flade. Egenskaberne for objekterne i klassen Flade er blandt andet Fladeparametre, Fladekoor og Residualer. Først oprettes i alt seks objekter af typen Flade. De beregnede x-, y- og z-koordinater fra modul 2 tilskrives hver især Fladekoor-arrayet for den flade, de hører til. Dernæst benyttes de tre første koordinatsæt for hver flade til beregning af de foreløbige fladeparametre, a 0, b 0 og c 0, der tilskrives fladernes Fladeparametre-egenskab. Matematikken bag beregningen fremgår af Appendiks A, s.11. Udviklingen af modulet er en overkommelig opgave og begrænser sig, når først teorien bag oprettelsen af brugerdefinerede klasser er på plads, til nogle matematiske beregninger. Tildelingen af kode til punkter kan gøres mere enkel ved at programmere modul 3, så det automatisk finder tre punkter, der ikke ligger på linie, og ud fra disse beregner de foreløbige fladeparametre. Observatøren behøver i dette tilfælde kun specificere, hvilken flade punktet ligger på, og ikke ved hjælp af endnu et ciffer, hvor på fladen punktet ligger. Rutinen kan programmeres på en sådan måde, at programmet først finder de to punkter på fladen, som ligger længst fra hinanden, og derefter det punkt, som ligger længst fra linien mellem disse to punkter. I teorien vil disse tre punkter, hvis det er muligt at måle et punkt op i minimum tre hjørner af fladen, ligge i hvert sit hjørne, jf. bilag 11, :\F_Matlabfiler\Planfit.m. 4 Udjævning af flader og efterfølgende vurdering og redigering Dette modul er et af de mest omfattende i programmet. Det har til opgave at udjævne fladerne og efterfølgende redigere fladeudjævningerne. Udjævningsteorien, der er beskrevet i Appendiks A, forudsætter, at værdierne, der indgår i udjævningen, er stillet op i matricer. Selve udjævningen foregår også ved hjælp af matrixoperationer. Desværre er matrixoperationer ikke standard i Visual Basic, men der er til formålet udviklet flere Active X-komponenter. En Active X-kompo- 56

63 nent er kort fortalt et genbrugeligt stykke programkode. Blandt andet kan der downloades en demo af en Active X-Matrixkomponent udviklet af firmaet BlueBit. Demoen gør det dog kun muligt at opstille matricer i størrelsesordenen 6x6, hvilket ikke er tilstrækkeligt til udjævningen af fladerne. Ønskes der fuld funktionalitet, kan komponenten erhverves for 35 dollars [ ]. Med udgangpunkt i de matrixoperationer, der er nødvendige i forbindelse med udjævning, udviklede projektgruppen selv et Matrix-klassemodul. Objekterne i Matrix-klassen er matricer, som de kendes fra lineær algebra. Egenskaberne begrænser sig til antallet af rækker og kolonner, men også selve de værdier, der indgår i matricen. De metoder, der knytter sig til klassen, udgøres af de mest almindelige matrixoperationer. Altså er det eksempelvis muligt at transponere og invertere matricerne, men også gange to matricer sammen eller gange en matrix med en skalar. Selve fladeudjævningsmetoden knytter sig til klassen Flade, men metoden trækker mange gange på de metoder, der er defineret i klassen Matrix. Forud for udjævningen bedes brugeren indtaste en a priori punktspredning. Derpå opstilles de matricer, der skal bruges i udjævningen, hvorpå programmet benytter sig af en række udjævningsformler for at finde de udjævnede fladeparametre, residualer til de enkelte punkter og spredningen på vægtenheden. Appendiks A indeholder en detaljeret beskrivelse af de enkelte matricer, samt udjævningsformlerne. Resultatet af fladeudjævningerne skrives ud i en tabel på brugergrænsefladen. Hvis brugeren ønsker det, kan der indtastes en grænseværdi, hvorefter residualer, der overskrider denne værdi, markeres i tabellen. Ligeledes er det muligt at undlade punkter i tabellen og genberegne fladerne. 5 Beregning af 3D-hjørnekoordinater Med hensyn til modul 5 og beregning af 3D-hjørnekoordinaterne er problemet løst ved, at der opstilles tre ligninger med tre ubekendte. De ubekendte er x-, y- og z-koordinaten til hjørnet, mens de kendte værdier er fladeparametrene for de tre flader, der grænser op til hinanden i hjørnet. Ligningssystemet stilles op i en matrix, hvorefter matricen rækkereduceres. Dette svarer til, at ligningssystemet løses. Altså regner modul 5 de 6 sæt fladeparametre om til 8 sæt 3Dhjørnekoordinater, jf. Appendiks A, s. 14. De 8 3D-hjørnekoordinater kunne også have været beregnet geometrisk ved først at finde skæringen mellem fladerne to og to. To flader vil, med mindre fladerne er parallelle, skære hinanden i en ret linie. 3D-hjørnekoordinaterne kan herefter beregnes ved at finde skæringen mellem disse fladeskæringslinier. Idet Matrix-klassen og en metode til rækkereduktion allerede er defineret, benyttes førstnævnte metode. I følge kapitel 7 Systemudvikling skulle modulet også kunne beregne nøjagtigheden af hjørnepunkterne i form af kovariansmatricer. Formlerne, der skulle bruges til beregningen, viste sig dog 57

64 at være meget omfattende, hvorfor det i stedet valgtes at foretage beregningerne ved hjælp af et Matlab-script, jf. bilag 8. Funktionen er derfor ikke at finde i DANRUM. 6 Oprettelse og skrivning til resultatfil Resultatfilen er dokumentation for de beregninger, programmet foretager. Modul 6 trækker på teksten i nogle af tekstboksene på brugergrænsefladen, samt en række af resultaterne fra de andre moduler. Først bedes brugeren navngive og placere resultatfilen. Dernæst skrives først dato og tid for oprettelse og teksten fra journalnr.-, adresse- og bemærkningstekstboksen til filen. Derpå hentes de redigerede observationer fra modul 1 ind i resultatfilen. Dernæst hentes de beregnede 3D-koordinatsæt til de indmålte punkter fra modul 2 ind i resultatfilen. Derudover hentes fladeparametrene, samt kovariansmatricerne for de enkelte flader ind. Sidst i resultatfilen skrives de beregnede 3D-hjørnekoordinater ud. I forbindelse med test af systemet har det i øvrigt vist sig, at også residualerne til fladeudjævningerne bør fremgå af resultatfilen, da unøjagtigheder eller uregelmæssigheder eventuelt kan forklares ud fra en undersøgelse af residualerne. Residualerne bør dog i første omgang kontrolleres under afviklingen af programmet, før fladeudjævningerne godkendes og 3D-modellen dannes. 7 Oprettelse af DXF-fil Denne funktion er valgt fra på grund af tidsmæssige årsager. Der er dog stadig mulighed for at tegne et indmålt rum, da 3D-hjørnekoordinaterne til det indmålte rum fremgår af resultatfilen. Disse hjørnekoordinater kan brugeren selv indtaste i et hvilket som helst CAD-program. 8 Oprettelse og visualisering af VRML-fil i CosmoPlayer Forud for programmeringen af modul 8 er det nødvendigt at sætte sig ind i VRML-formatet, jf. bilag 4. Ligeledes er det nødvendigt at undersøge dokumentationen for den valgte viewer, CosmoPlayer. Oplysninger omkring VRML-formatet kan hentes på 3D WEB Consortiums hjemmeside. Ud fra oplysningerne er det muligt at konstruere en VRML-fil, hvor det eneste, der mangler, er koordinater til hjørnerne i rummet. [ ] Modulet er opbygget således, at det sætter de beregnede hjørnekoordinater ind i den konstruerede VRML-fil, og brugeren bedes herefter navngive og placere filen. På baggrund af en URLsti til filen opdateres herefter en browser på brugergrænsefladen. Hvis der på computeren er installeret en 3D-viewer, der kan håndtere VRML-formatet, visualiseres modellen i browseren. Det skulle i teorien være muligt at implementere CosmoPlayer direkte på brugergrænsefladen udenom webbrowseren som en hvilken som helst anden Visual Basic-kontrol, men dels viste 58

65 kontrollen sig at være ustabil, idet adressen til kildefilen ofte ændrede sig selv. Dels lykkedes det ikke at finde den opdateringsmetode, der nødvendigvis må knytte sig til kontrollen. Problemet blev i første omgang løst ved at åbne et nyt vindue, for hver gang filen skulle visualiseres, hvilket også fungerede, men løsningen lod noget tilbage at ønske blandt andet i forhold til udelukkende at benytte sig af et enkelt skærmbillede. Helhedsindtrykket af programmet forbedres også væsentligt ved brug af webbrowser-løsningen. For at sikre sig, at 3D-modellen fra start dukker op i vieweren, og brugeren ikke skal til at lede efter den, translateres modellen i forhold til translationsvektoren (-10,-10,-20). Translationen bevirker, at rum, hvor opstillingspunktets koordinater udgøres af defaultværdierne, fra start dukker op i vieweren. Denne løsning vælges, idet den er enklere end at skulle definere startsted i vieweren i VRML-filen. I øvrigt burde vieweren udvikles, så den automatisk undersøger omfanget og placeringen af modellen og udfra disse undersøgelser fra start visualiserer hele modellen. Sammenfatning Programmeringen af DANRUM har betydet, at enkelte af kravene til programmet er fraveget, og ekstra funktioner er kommet til. Afvigelserne i funktionaliteten er der gjort rede for undervejs i gennemgangen af modulerne, men også brugergrænsefladen er blevet ændret, så opbygningen er blevet mere hensigtsmæssig. Overordnet er opbygningen dog stadig den samme. Den endelige brugergrænseflade fremgår af figur B10.1 i bilag Konkret eksempel på programmering Formålet med dette afsnit er at beskrive Visual Basics grundlæggende syntaks, samt det objektorienterede aspekt i programmeringen. Dette gør det i højere grad muligt for udenforstående at læse og forstå kildekoden, jf. bilag 7. Fladeudjævning spiller en central rolle i programmet, og der tages i beskrivelsen udgangspunkt i denne del af programmet. Selve fladeudjævningen igangsættes, når der trykkes på Beregn flader-knappen. Aktiveringen af knappen betyder, at programmet springer til den procedure i scriptet for Form 1, der beregner fladerne, jf. bilag 7, s. 5. For ikke at miste overblikket uddybes kun første del af proceduren. Private Sub cmdberegnflader_click() On Error GoTo cancelvalgt Dim f As Integer, r As Integer, k As Integer, AntalFlader As Integer, _ maxantalpkt As Integer, pktspredningimm As Double, pktspredningimmtxt As String pktspredningimmtxt = InputBox("Indtast a priori spredning i mm", "A priori spredning", "10") If pktspredningimmtxt = "" Then GoTo cancelvalgt pktspredningimm = CDbl(pktspredningimmTxt) konverterer tekststrengen til et reelt tal AntalFlader = 6 txtgrænseværdi = "" & GrænseVærdi & " mm" 59

66 'Koordinaterne deles ud på fladerne For f = 1 To AntalFlader FladeNr(f).AntalPktPåFlade = 0 For r = 1 To UBound(koor, 2) If koor(1, r) > f * 10 And koor(1, r) < (f + 1) * 10 Then FladeNr(f).KoorTilFlade koor(1, r), koor(2, r), koor(3, r), koor(4, r) End If Next r Next f Private Sub i første linie angiver, at der er tale om en lokal Sub-procedure. Karakteristisk for Sub-procedurer er, at de i modsætning til Function-procedurer eksempelvis ikke kan gøre det ud for en værdi i en ligning. De udfører blot en række handlinger, mens Function-procedurer returnerer en værdi. At proceduren er lokal betyder, at proceduren kun kan tilgås fra selve den form, hvor knappen er placeret. Havde proceduren været global (Public), kunne proceduren også tilgås andre steder fra. Af samme grund bør globale procedurer benyttes med omhu. CmdBeregnFlader er navnet på kontrollen (knappen) på brugergrænsefladen, mens Click er den hændelse (Event), der skal aktivere proceduren. Sub-procedurer kan enten være af typen generel eller event, hvor dette altså er et eksempel på en event-sub-procedure. Altså aktiveres udjævningsdelen af programmet med et klik på Beregn Flader-knappen. En procedure indledes som regel med at erklære de variable, proceduren benytter sig af, hvilket også er tilfældet med denne procedure. En af variablene, pktspredningimm, skal indtastes af brugeren, hvilket programmeres ved at benytte den præfabrikerede kontrol, Inputbox. I forbindelse med den kode, der sørger for, at koordinaterne deles ud på de rigtige flader, benyttes for-løkker. En af ordrerne i den inderste løkke lyder: FladeNr(f).KoorTilFlade koor(1, r), koor(2, r), koor(3, r), koor(4, r) Overordnet kalder ordren den generelle Sub-procedure, KoorTilFlade, og beder computeren udføre denne procedure på objektet FladeNr(f). I forbindelse med kaldet af proceduren sendes argumenterne koor(1, r), koor(2, r), koor(3, r) og koor(4, r) med. Mere specifikt definerer første led i ordren det objekt, ordren skal udføres på. I dette tilfælde indgår objektet i et array ved navn FladeNr. Parentesen efter navnet på arrayet angiver, hvilket objekt, der konkret er tale om. Af variable-definitionerne i toppen af scriptet for Form 1 fremgår det, at arrayet indeholder objekter af typen Flade. Dim FladeNr() as Flade Efter punktummet kommer andet led i ordren. Dette led angiver, hvilken egenskab eller metode, der skal henholdsvis redigeres eller anvendes i forbindelse med objektet. Metoden KoorTilFlade 60

67 er sammen med resten af metoderne og egenskaberne for objekter af typen Flade defineret i klassemodulet Flade. Af klassemodulet fremgår det, at KoorTilFlade-metoden er en public subprocedure. Public Sub KoorTilFlade( kode, xkoor, ykoor, zkoor) Dim antalpkt As Integer antalpkt = kode Mod 10 ReDim Preserve FladeKoor(1 To 4, 1 To antalpkt) FladeKoor(1, antalpkt) = kode FladeKoor(2, antalpkt) = xkoor FladeKoor(3, antalpkt) = ykoor FladeKoor(4, antalpkt) = zkoor End Sub Parentesen efter procedure-navnet i første linie betyder, at der, når proceduren kaldes, skal medsendes nogle input-værdier. Denne eller disse værdier kaldes for argumenter. Argumenterne, der medsendes, er de sidste led i ordren fra For-løkken, kode, xkoor, ykoor og zkoor. Som det fremgår af eksemplet behøver navnet på input-værdien ikke nødvendigvis at stemme overens med navnet på det argument, der medsendes i procedure-kaldet. I linie 2 erklæres variablen antalpkt som et heltal og i linie 3 sættes værdien af antalpkt ved hjælp af MODulus-funktionen til antallet af punkter, der er målt ind på fladen. MODulus-funktionen returnerer restværdien ved division med et bestemt tal. Eksempelvis vil 13 MOD 10 sætte værdien af antalpkt til 3. I linie 4 REDIMensioneres FladeKoor-arrayet, så antallet af rækker svarer til antallet af punkter målt ind på fladen. Preserve sørger for, at de eksisterende værdier i arrayet bevares. I linierne 5-8 sættes input-værdierne ind på pladserne i den nye række i arrayet. FladeKoor-arrayet er en af egenskaberne for objekter af typen Flade. Når proceduren er gennemført er de værdier fra koor-arrayet, der eksempelvis hører til FladeNr(1), gemt i FladeKoorarrayet til FladeNr(1). Ovenstående gennemgang er langtfra udtømmende i forhold til syntaks og objektorienteret programmering i Visual Basic. En udtømmende gennemgang ville blive for omfattende. Ikke desto mindre bidrager gennemgangen formodentlig til en bedre forståelse af kildekoden til DANRUM, jf. bilag 7. 61

68 10 Test af system I dette kapitel beskrives, hvorledes systemet er blevet testet. Formålet med kapitlet er at undersøge, om DANRUM er konstrueret korrekt, og om beregningerne foretages korrekt. Yderligere er der gennemført en række tests for at undersøge nøjagtigheden af de beregnede hjørnekoordinater. Først fastsættes a priori spredningen for koordinaterne til de indmålte punkter. Derefter gennemgås de fire tests, der er udført. Endelig følger en sammenfatning, hvor det vurderes, om systemet opfylder de fastsatte krav Fastsættelse af a priori spredning I forbindelse med udjævningen af fladerne er der behov for kendskab til a priori spredningen for de indmålte punkter. A priori spredningen kan fastsættes ud fra instrumentspecifikationerne til den benyttede totalstation eller på baggrund af empiriske forsøg. Hvis a priori spredningen skal fastsættes udfra empiriske forsøg, vil det kræve en række målinger, for at kunne fastsætte en korrekt værdi. I dette tilfælde ville definitionsnøjagtigheden på fladerne være inkluderet i spredningen. Når a priori spredningen fastsættes udfra instrumentspecifikationerne, tages der ikke højde for definitionsnøjagtigheden af fladerne, og det er således kun instrumentets nøjagtighed, der inddrages. I DANRUM skal a priori spredningen for koordinaterne til de indmålte punkter indtastes, inden fladeudjævningen gennemføres. Det vil sige, at der skal indtastes en spredning for x-, y- og z- koordinaten. Spredningens størrelse er estimeret på baggrund af empiriske forsøg. A priori spredningen til koordinaterne er estimeret ud fra tre referencemålinger, som er omtalt i afsnit Test 3, Nøjagtigheden i forhold til placering af punkter. Der er foretaget fladeudjævning af hver referencemåling, hvor der er indtastet forskellige værdier for a priori spredningen til koordinaterne. Det har vist sig, at en a priori spredning på 3 mm er passende. Dette giver en punktspredning på 5 mm for de indmålte punkter. Denne punktspredning indeholder således også definitionsnøjagtigheden for fladerne. Fladeudjævningen er gennemført for de tre referencemålinger, og da gennemsnittet af spredningen på vægtenheden i de tre målinger ligger omkring 1, vurderes 3 mm at være en passende størrelse for koordinatspredningen. A priori spredningen gælder for et standardrum på Aalborg Universitet. Hvis opmålingen skal foretages et andet sted, ville en anden værdi formodentlig være passende. I de tilfælde, hvor spredningen på vægtenheden bliver over 1 ved anvendelse af en a priori spredning på eksempelvis 3 mm, er det således et udtryk for, at fladen ikke er godt defineret, forudsat at der selvfølgelig ikke er grove fejl i observationerne. 62

69 10.2 Gennemgang af tests Der gennemføres fire tests i forbindelse med undersøgelsen af systemet. Testene er gennemgået i de følgende afsnit. De fire tests omfatter undersøgelse af følgende forhold: Test 1, Kontrol af DANRUM Test 2, Nøjagtigheden i forhold til et rums størrelse Test 3, Nøjagtigheden i forhold til placering af punkter Test 4, Indmåling af et rum med hældende loft De to første tests er fiktive tests, hvilket vil sige, at de anvendte data er konstrueret. De to sidste tests bygger på data indsamlet med totalstation og indeholder således data fra opmåling af forskellige rum. Alle test kunne i princippet være fiktive, men da det har været et ønske i projektgruppen også at foretage opmåling med reflektorfri totalstation, er dette gjort i to af testene. De fire tests gennemføres indenfor rammerne af den afgrænsning, der er foretaget i problemformuleringen. Det er ikke formålet med testene at få programmet til gå ned ved at forsøge at udføre beregninger, det ikke er udviklet til. Dog undersøges det i test 1, hvorledes programmet forholder sig ved beregning af et rum, hvor væggene er eksakt lodrette, hvilket programmet formodentlig ikke vil være i stand til at håndtere. I forbindelse med de forskellige tests sammenlignes hjørnekoordinaterne. For at kunne forstå navngivningen og være i stand til at identificere de enkelte hjørnepunkter og flader er der udarbejdet en figur, som viser placeringen af disse. På figur 10.1 fremgår et standardrum, hvor hjørnepunkter og flader er navngivet. Hjørnepunkterne består af et trecifret nummer, der angiver hvilke tre flader, der indgår i det respektive hjørnepunkt. Loft Flade 6 Flade Flade 3 Gulv Figur 10.1: Nummereringen i et standardrum. 234 Flade Test 1, Kontrol af DANRUM Formålet med test 1 er at undersøge, om DANRUM foretager beregningerne korrekt. For at kontrollere beregningerne udarbejdes et sæt koordinater, som definerer et rum med kendte hjørnekoordinater. Derefter er det muligt at sammenligne hjørnekoordinaterne og vurdere, om DAN- RUM regner korrekt. Derudover undersøges, hvorledes DANRUM reagerer, når der foretages beregninger af et rum med eksakt lodrette vægge. Der er udarbejdet et sæt koordinater, der danner et rum med denne egenskab. 63

70 Beskrivelse af test 1 Der konstrueres et rum bestående af seks flader. De otte hjørnekoordinater defineres, så de danner et rum, der ikke har lodrette flader. Der dannes således et rum, der kun hviler på ét hjørne, jf. figur Rummet hviler på punkt 136, mens punkt 134 har en z-værdi på 1. De konstruerede hjørnekoordinater skal fungere som kontrol af de beregnede hjørnekoordinater, som DAN- RUM beregner ud fra en koordinatfil med fiktive punkter. Til hver flade skal der beregnes fem fiktive punkter bestående af en x-, y- og z-koordinat. Figur 10.2: Rummets placering i 3D. Hældningen er overdrevet for at synliggøre princippet om, at fladerne ikke må være lodrette. De konstruerede hjørnepunkter anvendes til at beregne fladeligningerne til de seks flader. Hver flade indeholder fire hjørnekoordinater, og tre af disse anvendes til at bestemme fladeligningerne. Der skal være fem punkter på hver flade, så de sidste to punkter beregnes ved at indsætte x- og y-koordinater i fladeligningerne og derved beregne z-koordinaten. Nu er der bestemt fem punkter på hver flade, og disse punkter indføres i koordinatfilen, som kan importeres direkte i DAN- RUM ved hjælp af funktionen Indlæs koordinatfil. Ved udjævningen af fladerne indtastes en a priori spredning på 0,1 mm, da punkterne er konstrueret så de danner entydige flader. Koordinatfilen med de fiktive koordinater til hver flade fremgår af bilag 11, :\E_Testdata\Test1. Z Y X Resultat af test 1 Efter at beregningen af hjørnekoordinaterne er foretaget i DANRUM, sammenlignes disse resultater med de konstruerede koordinater. Det er nu muligt at vurdere, om DANRUM foretager beregningerne korrekt. Af figur 10.3 fremgår de konstruerede og de beregnede hjørnekoordinater. De grå felter er de konstruerede koordinater, og de hvide felter er de beregnede. Resultatfilen fra beregningen er vedlagt i bilag 11, :\E_Testdata\Test1. Det fremgår af figuren, at der ikke er afvigelser mellem de to sæt koordinater til hvert hjørnepunkt. Dette betyder, at DANRUM foretager beregningerne som forventet. Sammenligning af konstruerede koordinater og beregnede koordinater i DANRUM Koor x y z Figur 10.3: Sammenligning af konstruerede og beregnede koordinater. De grå felter er de konstruerede koordinater, og de hvide felter er de beregnede. Koordinaterne afviger først på fjerde decimal, så derfor er kun de første cifre vist i tabellen. Afvigelsen er opstået som følge af afrundingsfejl. Grunden til, at koordinaterne til hjørnerne er så pæne, er, at rummet ikke er konstrueret med rette vinkler. 64

71 Håndtering af eksakt lodrette flader I test 1 indgår også en mindre test, som egentlig ligger uden for rammerne for testene. Der er gennemført en test af, hvordan DANRUM reagerer, når der indlæses en koordinatfil, der beskriver et rum med eksakt lodrette flader. DANRUM er ikke udviklet til en sådan situation, men det er undersøgt, hvorledes DANRUM håndterer situationen. Som forventet kan DANRUM ikke beregne hjørnekoordinaterne til rummet. Programmet melder Overflow i forbindelse med beregningen af de foreløbige fladeparametre til fladerne. Dette skyldes, at normalvektorens z-parameter, C, bliver nul i forbindelse med beregningen af de foreløbige fladeparametre, se Appendiks A, s. 11. Dette betyder, at det ikke er muligt at bestemme de tre foreløbige fladeparametre a 0, b 0 og c 0 til fladeligningerne. For at bestemme fladeparametrene a 0, b 0 og c 0 divideres med C for at isolere z på venstre side af fladeligningen, og dette kan ikke lade sig gøre, når C er nul. Det matematiske udtryk for fladen, som anvendes, fungerer simpelthen ikke i det tilfælde, hvor fladerne er eksakt lodrette. Hvis fladerne skal bestemmes, er det nødvendigt at rotere rummet, så der ikke opstår lodrette flader. I et firkantet rum vil dette betyde, at det skal stå på ét hjørne, jf. figur Matematikken fungerer heller ikke, når en flade er tæt på lodret. I dette tilfælde bliver fladeparametrene store som følge af, at der divideres med C, som har en lille værdi. Hvis fladeparametrene er meget store, kan der opstå unøjagtigheder i forbindelse med udjævningen af den enkelte flade. Unøjagtigheden skyldes, at der sker afrundingsfejl i beregningerne, når tallene er meget store. Det er altså begrænsninger i matriceregningen, der bevirker, at programmet ikke korrekt håndterer udjævningen af en flade, som er tæt på lodret. Det har ikke været muligt at fastsætte en numerisk grænse for ved hvor store tal, det går galt. I forbindelse med test 3 og 4 er der indmålt forskellige rum, men der er ikke konstateret problemer i forbindelse med håndteringen af udjævningen af fladerne i disse rum. Et udtryk for, hvor følsomme matricer er overfor disse afrundningsfejl, er en matrices konditionstal. Et meget stort konditionstal bør undgås, da matricer med denne egenskab er tæt på at være singulære. [Borre, 1992, s. 122] Test 2, Nøjagtigheden i forhold til et rums størrelse Formålet med test 2 er at undersøge ændringen i nøjagtigheden af hjørnekoordinaterne ved måling af rum med forskellige størrelser. Den indledende betragtning er, at nøjagtigheden må stige, jo større rummet er, idet målenøjagtigheden har mindre at sige ved opmåling af store rum. Der dannes fiktive koordinater til fladerne i to rum af forskellig størrelse. Hjørnekoordinaterne beregnes, og kovariansmatricerne til hjørnepunkterne bestemmes. Ud fra kovariansmatricerne kan der beregnes konfidensellipsoider til hjørnepunkterne i de to rum, som efterfølgende kan sammenlignes for at vurdere, hvilket rum, der er bedst bestemt. 65

72 Beskrivelse af test 2 De to rum bestemmes med udgangspunkt i rummet fra test 1. Herved sikres, at de to rum ikke har eksakt lodrette flader. Der konstrueres to rum med realistiske dimensioner. Rummet fra test 1 skaleres således med en faktor ½ og 3, så der opstår et lille og et stort rum, jf. figur ca. 15 ½ ca. 2,5 3 ca. 30 ca. 5 ca. 2,5 ca. 15 Figur 10.4: Forholdet mellem det lille og det store rum. Figuren er ikke målfast. Rummene er orienteret i det koordinatsystem, der er vist på figur Nu skal x-, y-, og z-koordinaterne til rummene tillægges tilfældige fejl, så der opstår et behov for udjævning af fladerne. Hvis der ikke bliver tilføjet tilfældige fejl, vil punkterne til hver flade danne en entydig flade, hvor alle punkter vil få et residual på nul. Til at danne de tilfældige fejl anvendes randn-funktionen i Matlab, der returnerer normalfordelte værdier med middelværdi på 0 og varians 1. Der er genereret en 30x3 matrix, da der er 30 punkter med hver en x-, y- og z- koordinat til hvert rum, jf. bilag 11, :\E_Testdata\Test2. Efter at de to rum er skaleret, er koordinaterne omregnet til centimeter, og de tilfældige fejl er tilføjet koordinaterne. Derefter er koordinaterne igen omregnet til millimeter. Det er vigtigt at understrege, at der er anvendt de samme tilfældige fejl til begge rum. Derefter er de nye koordinater indført i to koordinatfiler, som kan importeres i DANRUM. Koordinatfilerne fremgår af bilag 11, :\E_Testdata\Test2. Nu kan fladeudjævningen af de to rum foretages efterfulgt af en beregning af hjørnekoordinaterne, se Appendiks A, s. 14. Resultatfilerne fra beregningerne fremgår af bilag 11, :\E_Testdata \Test2. Resultatfilen indeholder resultatet af udjævningen af hver flade, som er udtrykt ved a posteriori kovariansmatricen for hver flade. Denne matrice indeholder varianser og kovarianser til de udjævnede fladeparametre. For at kunne bestemme nøjagtigheden af de enkelte hjørnekoordinater anvendes den generelle fejlforplantningslov. Princippet i fejlforplantningsloven er, at kovarianserne fra de tre flader, der danner hvert hjørnepunkt, forplanter sig til hjørnepunktet. Nøjagtigheden i hjørnepunktet er udtrykt i en kovariansmatrice for koordinaterne til hjørnepunktet. 66

73 Bestemmelse af kovariansmatrice og konfidensellipsoide til hjørnepunkt Der skal bestemmes kovariansmatricer til hjørnepunkter i forbindelse med både test 2 og 3. Til dette formål er Matlab-scriptet Flask3dk.m udviklet, jf. bilag 8. Matlab-scriptet foretager skæring af flader ved hjælp af fladeparametre. Outputtet fra scriptet er koordinaterne til hjørnepunktet og den tilhørende kovariansmatrice. Koordinaterne til hjørnepunktet er allerede bestemt i DANRUM, men scriptet kan altså også beregne disse. Matlab-scriptet beregner kovariansmatricen til hjørnepunktet ud fra denne formel: Hj = J Flade T J hvor Flade er en 9x9 kovariansmatrix for de tre flader, der bestemmer hjørnepunktet. J kaldes en Jacobian matrix og skal først opstilles for at kunne bestemme kovariansmatricen til hjørnepunktet. Matricerne fremgår af bilag 8. J-matricen indeholder de partielt afledte for hver koordinat med hensyn til hver parameter. For at bestemme J er formlerne til beregning af hjørnekoordinaterne partielt differentieret med hensyn til den enkelte fladeparameter. Dette giver nogle meget omfattende ligninger, som er løst i Matlab og efterfølgende indført i Flask3dk.m. Input til Matlab-scriptet er de tre fladers fladeparametre og disses varianser og kovarianser. Ud fra kovariansmatricen til det enkelte hjørnepunkt kan konfidensellipsoiden bestemmes ved hjælp af Matlab-scriptet Plot3dke.m, se bilag 11, :\F_Matlabfiler. Outputtet fra scriptet er et plot af konfidensellipsoiden for hjørnepunktet. Ud fra konfidensellipsoidens størrelse, orientering og form er det muligt at få et visuelt indtryk af nøjagtigheden i hvert hjørnepunkt. I forbindelse med test 2 vil konfindensellipsoiderne for udvalgte punkter blive inddraget for at sammenligne nøjagtigheden af hjørnepunkterne. Sammenligningen af konfidensellipsoiderne sker i xy-, xzeller yz-planet, hvor Matlab-scriptet Viewplan.m er anvendt til at orientere konfindensellipsoiderne, se bilag 11, :\F_Matlabfiler. Resultat af test 2 Kovariansmatricerne til tre af hjørnepunkterne i de to rum er bestemt ved hjælp af Flask3dk.m. Resultatfilerne er vedlagt på bilag 11, :\E_Testdata\Test2. Det viser sig, at kovariansmatricerne er størst ved hjørnepunkterne i det store rum. Hjørnepunkterne i det store rum er altså dårligere bestemt end hjørnepunkterne i det lille rum. Betragtes kovariansmatricerne til fladeparametrene i de to rum, er det imidlertid fladerne i de store rum, der har de mindste kovariansmatricer. Nøjagtigheden af hjørnepunkterne bliver altså på trods af dette faktum dårligere i det store rum end i det lille. Dette stemmer ikke overens med den indledende antagelse om, at jo større rummet er, jo bedre er nøjagtigheden. Der er beregnet konfidensellipsoider for to hjørnepunkter for at synliggøre tendensen og visualisere størrelsesforholdet. På figur 10.5 og 10.6 er konfindensellipsoiderne for hjørnepunkt 134 vist. 67

74 Figur 10.5: Konfidensellipsoide for hjørnepunkt 134 i det lille rum, set fra yz-planet. Figur 10.6: Konfidensellipsoide for hjørnepunkt 134 i det store rum, set fra yz-planet. Konfidensellipsoiderne er skaleret ens, så de umiddelbart kan sammenlignes. Ellipsoiderne viser 19 % konfidensintervallet. Konfidensellipsoiderne for hjørnepunkt 134 er vist i yz-planet, og det er tydeligt, at ellipsoiden for det lille rum er mindst. I bilag 9 figur B9.1 er konfidensellipsoiderne til hjørnepunktet vist i alle tre planer. Ved hjørnepunkt 145 gælder samme forhold. Punktet er bedst bestemt i det lille rum. For at undersøge om denne tendens gælder for alle hjørner, er konfidensellipsoiderne for hjørnepunkt 256 i de to rum også bestemt. Af bilag 9 figur B9.2 fremgår konfidensellipsoiderne for henholdsvis det lille og det store rum. Afstand Ellipsoiderne til hjørnepunkt 256 er ikke orienteret A helt ens, men de har nogenlunde samme dimensioner. Dette betyder, at nøjagtigheden af hjørnepunktet B i de to størrelser rum er næsten ens. Dette stemmer ikke helt overens med situationen ved de to andre hjørnepunkter. Der er altså ikke en klar regel, men noget tyder på, at der er en tendens til, at hjørnepunkterne i det lille rum er bedst bestemt. En mulig forklaring på, at de bedst bestemte flader i det store rum danner hjørnepunkter, som er dårligere bestemt, kan skyldes rummets dimensioner. Den lille unøjagtighed på fladerne i det store rum kan nå at forplante sig og få en væsentlig betydning ude i hjørnepunktet. I det lille rum kan de større unøjagtigheder på fladerne ikke nå at få en stor betydning, da hjørnepunkterne ligger tæt på hinanden. Figur 10.7 viser disse forhold. Figur 10.7 viser to flader med forskellig længde og nøjagtighed. Forskellen i nøjagtigheden er vist ved størrelsen af vinklerne A og B. Vinkel A er størst. Altså er den lille flade markeret med fed dårligst bestemt. Den lille flade har således den største hældning, men da fladen er lille, betyder denne hældning ikke meget i kanten af Figur 10.7: Den lille flade er vist med den fede linie, og den store er vist med den tynde. 68

75 fladen. Vinkel B er derimod mindre, og den store flade, vist med den tynde streg, er således bedre bestemt. Længden af den store flade resulterer imidlertid i større unøjagtighed i kanten af fladen symboliseret ved længden af den stiplede streg. Det er samme problemstilling som kendes fra vinkelmålingen. En lille fejl i vinklen betyder ved kort afstand mindre end ved en lang afstand. Den indledende betragtning om, at jo større rummet er, jo bedre nøjagtighed ved hjørnekoordinaterne, er altså ikke korrekt, når der tales om rum, der bestemmes udfra observationer med samme nøjagtighed. Selv ved meget små rum, hvor fladerne er dårligt bestemt på grund af forholdet mellem spredningens størrelse og sidelængden, bliver hjørnepunkterne bedre bestemt end i det store rum med mere nøjagtige flader Test 3, Nøjagtigheden i forhold til placering af punkter Formålet med test 3 er at undersøge betydningen af de indmålte punkters placering på den flade, der indmåles. Den indledende betragtning er, at nøjagtigheden af hjørnekoordinaterne afhænger af, hvor på fladen indmålingen af punkterne er foretaget. Placeringen af punkterne vil i sidste ende være altafgørende for en korrekt bestemmelse af hjørnekoordinaterne. Der er gennemført fem forskellige tests under test 3, som alle har til formål at undersøge nøjagtigheden af hjørnekoordinaterne i forskellige målesituationer. De fem tests er: 3.1, Indmålte punkter er centreret i højre hjørne på fladen 3.2, Indmålte punkter er centreret midt på fladen 3.3, Kodningsfejl 3.4, Indmålte punkter er placeret i en smal stribe 3.5, Indmåling af 9 punkter på hver flade Test 3 er gennemført i et testrum, som beskrives i næste afsnit. I forbindelse med hver test, sammenholdes resultatet med en referencemåling, som er en optimal indmåling af testrummet. Hjørnekoordinater og kovariansmatricer sammenlignes, og det vurderes, hvor stor betydning placeringen af de indmålte punkter har ved hver test. Beskrivelse af test 3 Test 3 er gennemført i rum 77 Fibigerstræde 13. En skitse af rummet fremgår af figur Rummet består af tre murstensvægge, fladerne 4, 5 og 6, hvor der i flade 6 er placeret to vinduer. Flade 3 består af gipsplader. Ved siden af døren i flade 4 hænger der et stort reolsystem, som gør det umuligt at måle punkt 45 direkte i midten. Derfor måles punkt 45 lidt til højre for midten, jf. figur Testrummet er ryddet, så alle hjørner er frie. Det er imidlertid ikke muligt at måle alle flader optimalt. Ved to af hjørnerne i loftet er det svært at måle, da der løber et vandrør langs loftet, se figur Rummet har også den ulempe, at fladerne buer i nogle af hjørnerne, hvilket betyder, at fladerne ikke er godt bestemt her. Yderligere er flade 6 dårligt defineret, da væggen 69

76 består af to uafhængige betonelementer og et murstenelement i midten. Dybden i væggen varierer cirka en centimeter. Der skal tages højde for disse forhold, når testrummet indmåles, og i forbindelse med vurderingen af fladeudjævningen. Totalstationen er opstillet i midten af testrummet, og der er taget udgangssigte til et hjørne på Fibigerstræde 11. Udgangssigtet skal gøre det muligt at kontrollere opstillingen undervejs i målingerne. Alle målinger til test 3 er foretaget fra samme opstilling. Dette er nødvendigt for at gøre det muligt at sammenligne hjørnekoordinaterne. Hvis nogle målinger bliver foretaget fra en anden Flade 5 Flade 6 Flade 3 4 m Loft Flade 4 6 m Gulv Figur 10.8: Skitse af testrum, rum 77 i Fibigerstræde 13. Figur 10.9: Flade 4 med reolsystemet, der betyder, at punkt 45 ikke kan måles i midten. Figur 10.10: Hjørnepunkt 236, 45 hvor et varmerør forhindrer en placering tæt ved hjørnet. opstilling, vil resultatet være andre bud på hjørnekoordinaterne, da opstillingspunktet ikke er det samme. Hvis opstillingen ændres undervejs, er det nødvendigt at starte forfra med målingerne, da der ikke er centreret over et opstillingspunkt. Der er foretaget tre referencemålinger af rummet, hvor der er målt fem punkter på hver flade. Referencemålingerne er foretaget efter retningslinierne i kapitel 5.1 Krav til kodningsprocedure. Antallet af referencemålinger gør det muligt at vurdere, om der er grove fejl i målingerne. Den referencemåling, der bestemmer testrummet bedst, udvælges og anvendes efterfølgende som referencemåling i test 3. Udvælgelsen af referencemålingen er sket ved at finde middelværdien for hjørnepunkterne for derefter at bestemme den referencemåling, der ligger tættest på middelværdien. Sammenligningen af de tre referencemålinger Ref 1, Ref 2 og Ref 3 fremgår af bilag 11, :\E_Testdata\Test3\Ref. Det viser sig, at Ref 1 afviger mest fra middelværdien af hjørnekoordinaterne. Ref 2 og Ref 3 stemmer godt overens, og da Ref 2s punkter har de mindste residualer, anvendes Ref 2 som referencemåling. 70

77 En mulig løsning til at bestemme referencemålingen ville være at udjævne de tre refrencemålinger for at få den bedste bestemmelse af testrummet. Det er imidlertid ikke relevant, da de udjævnede hjørnekoordinater ikke kan bruges i test 3. Dette skyldes, at hjørnekoordinaterne fra referencemålingen skal sammenlignes med hjørnekoordinaterne fra den enkelte test. Hvis hjørnekoordinaterne bliver udjævnet, ville det ikke være muligt at sammenligne hjørnekoordinaterne direkte. I forbindelse med test 3.1, 3.2, 3.3 og 3.4 anvendes flade 3 som testflade, se figur Det vil sige, at det kun er denne flade, der opmåles ved hver test. Observationerne til flade 3 fra hver test, indsættes i observationsfilen fra referencemåling 2. Observationerne til de resterende flader i referencemålingen bibeholdes altså. I test 3.5 er alle fladerne i testrummet indmålt med 9 punkter, og der er således dannet en komplet observationsfil. I forbindelse med vurderingen af testene bliver projektgruppen opmærksom på, at det er nødvendigt at nulstille horisontalkredsen mod midten af flade 3. Det vil ellers være vanskeligt at vurdere ændringen i koordinaterne, hvis koordinatsystemets orientering ikke er kendt. Horisontalkredsen nulstilles mod punkt 35, som cirka ligger midt på flade 3. Dette er ikke optimalt, men det er den eneste løsning. Der er anvendt en specielt version af DANRUM til at beregne koordinaterne i test 3. I funktionen Indlæs observationer korrigeres alle horisontalretninger med horisontalretningen til punkt 35. Derved sikres, at alle koordinater orienteres, så y-aksen er placeret i retningen mod flade 3. I forbindelse med den enkelte test er det således kun i y-retningen, at koordinaterne skal ændre sig, da det kun er flade 3, der opmåles. Der kan dog forekomme små ændringer i x- og z-koordinaten som følge af, at punkt 35 ikke ligger præcist i midten af flade 3, og fordi de tilstødende flader ikke ligger helt rigtigt. Ved vurderingen af hver test sammenlignes de fire hjørnekoordinater 134, 136, 234 og 236 med de samme hjørnekoordinater fra referencemålingen Ref 2, jf. figur Figur viser flade 3, som er testflade. Derudover sammenlignes kovarianserne til hjørnepunkterne i hver test med kovarianserne fra referencemålingen. I nogle situationer inddrages konfidensellipsoider for at synliggøre resultatet af testen og visualisere nøjagtigheden i de enkelte hjørnepunkter Figur 10.11: Flade 3 med de fire hjørnepunkter, som indgår i fladen. Bestemmelse af hjørnekoordinater i Ref 2 Observationerne til Ref 2 er indlæst i DANRUM, og koordinatberegningen er foretaget ved at anvende defaultværdierne til opstillingspunktet (10, 10, 2). Derefter er udjævningen af fladerne gennemført ved at indtaste en a priori spredning på 3 mm, jf. afsnit 10.1 Fastsættelse af a priori

78 spredning. Af figur fremgår residualerne til punkterne og spredningen på vægtenheden til hver flade. Flade 1, 2 og 6 får en spredning på vægtenheden, som er over 1. Dette viser, at definitionsnøjagtigheden ved disse flader ikke er god. Flade 6 har den største spredning på vægtenheden, som er et udtryk for, at definitionsnøjagtigheden for denne flade er dårlig. Dette er ikke overraskende, da denne flade består af flere typer materialer, Figur 10.12: Residualerne til de indmålte punkter fra fladeudjævningen af Ref 2. der ikke danner en entydig flade. Det er kun flade 3, der udskiftes ved hver test, og den er godt bestemt i Ref 2. Efter fladeudjævningen er hjørnekoordinaterne bestemt, og resultatfilen fremgår af bilag 11, :\E_Testdata\Test3\Ref\Ref2. Test 3.1, Indmålte punkter er centreret i højre hjørne på fladen Formålet med test 3.1 er at undersøge, hvorledes 236 Flade 3 32 nøjagtigheden af de fire hjørnekoordinater varierer Flade som følge af, at de fem indmålte punkter er placeret i det øverste højre hjørne af testfladen, jf. figur De fem indmålte punkter dækker et område på størrelse med et A4-ark. Observationerne til flade 3 indsættes i observationsfilen til Ref 2, og 136 fladeudjævningen er efterfølgende foretaget. Hjørnekoordinaterne er beregnet, og kovariansmatricerne til disse er bestemt. Observationsfilen og Figur 10.13: Placeringen af de indmålte punkter. resultatfilen fremgår af bilag 11, :\E_Testdata \Test3\Test_ Resultat af test 3.1 I figur er de fire hjørnepunkter fra test 3.1 sammenlignet med Ref 2. Test 3.1 viser at hjørnepunkt 134 afviger mest fra Ref 2. Y-koordinaten afviger 16 cm. Afvigelserne for hjørnepunkt 136 og 236 er omkring 8 cm for y-koordinaten. Hjørne x-koordinat (m) y-koordinat (m) z-koordinat (m) Ref 2 Test 31 Diff Ref 2 Test 31 Diff Ref 2 Test 31 Diff ,173 12,174-0,001 12,239 12,400-0,161 0,384 0,384 0, ,719 7,719-0,001 12,267 12,346-0,079 0,381 0,381 0, ,166 12,166 0,000 12,234 12,232 0,003 3,019 3,019 0, ,740 7,739 0,001 12,263 12,178 0,085 3,021 3,021 0,000 Figur 10.14: Forskel mellem hjørnekoordinaterne ved Ref 2 og test 3.1. Differensen for punkt 134 og 136 er negativ, hvilket betyder, at fladen her hælder væk fra opstil- 72

79 lingen, se figur Differensen 236 er positiv, hvilket betyder at fladen her hælder ind imod opstillingen. Det er interessant, at det er punkt 134, som afviger mest. Teorien siger ellers, at det burde være det hjørnepunkt, der ligger længst fra de indmålte punkter, som får de største afvigelser. I dette tilfælde er det hjørnepunkt 136, som ligger i det diagonale hjørne. Hjørnepunkt 234, som ligger i umiddelbar nærhed af de indmålte punkter, afviger stort set ikke fra Ref 2, hvilket stemmer overens med teorien. Det har ikke været muligt at finde en forklaring på, hvorfor det er hjørnepunkt 134, der afviger mest, men det virker ikke logisk. Figur viser koordinatspredningerne på de fire hjørnepunkter. Her er det hjørnepunkt 134, der har de største spredninger. Dette betyder, at det er dette hjørnepunkt, der er dårligst bestemt Figur 10.15: Den grå flade skitserer den korrekte placering af flade 3, mens den stiplede flade stammer fra test 3.1. Hjørne σx (m) σy (m) σz (m) Ref 2 Test 31 Diff Ref 2 Test 31 Diff Ref 2 Test 31 Diff 134 0,002 0,279 0,277 0,001 0,159 0,158 0,005 0,005 0, ,016 0,175 0,159 0,001 0,101 0,100 0,005 0,005 0, ,002 0,006 0,005 0,001 0,004 0,003 0,007 0,007 0, ,015 0,152 0,137 0,001 0,088 0,087 0,007 0,007 0,000 Figur 10.16: Spredningen for hver koordinat til hjørnepunkterne på flade 3. Test 3.2, Indmålte punkter er centreret midt på fladen Formålet med denne test 3.2 er at undersøge nøjagtigheden af hjørnepunkterne, når fladen ind- Flade Flade måles udelukkende med punkter placeret i midten af fladen. De fem punkter indmåles midt på fladen, som vist på figur Der er opsat et stykke A4 papir midt på flade 3. Anvendelsen af A4 papiret skal sikre, at punkterne danner en lille firkant. Der er målt udenfor papirets hjørner, og punkt 35 er placeret i midten af der, hvor papiret var placeret. Observa-tionsfilen og resultatfilen fremgår af bilag 11, :\E_Testdata\Test3\ Figur 10.17: Placering af indmålte punkter i test 3.2. Test_32. Resultat af test 3.2 Den indledende betragtning er, at de fire hjørnepunkter får samme koordinatafvigelse samt koordinatspredning i forhold til Ref 2, hvis de fem punkter er indmålt i midten af flade 3. Hjørnepunkterne vil blive dårligere bestemt end ved Ref 2, da de indmålte punkter dækker en meget lille del af fladen. Figur viser koordinatafvigelserne i forhold til Ref 2. 73

80 Hjørne x-koordinat (m) y-koordinat (m) z-koordinat (m) Ref 2 Test 32 Diff Ref 2 Test 32 Diff Ref 2 Test 32 Diff ,173 12,173 0,000 12,239 12,229 0,010 0,384 0,384 0, ,719 7,719 0,000 12,267 12,289-0,022 0,381 0,381 0, ,166 12,165 0,000 12,234 12,217 0,018 3,019 3,019 0, ,740 7,740 0,000 12,263 12,277-0,014 3,021 3,021 0,000 Figur 10.18: Forskel mellem hjørnekoordinaterne ved Ref 2 og test 3.2. Det fremgår af figur 10.18, at hjørnepunkterne 136 og 236 begge har lidt større y-koordinater end Ref 2 og hjørnepunkterne 134 og 234 har lidt mindre. Dette betyder at flade 3 er drejet om z-aksen i forhold til Ref 2. Dette fremgår af figur 10.19, hvor den korrekte placering af flade 3 er markeret med gråt. Den stiplede flade viser placeringen af flade 3 i test 3.2. Årsagen til at fladen er drejet lidt, kan være, at de indmålte punkter ikke ligger præcist i midten af fladen. Drejningen i fladen kan måske også skyldes unøjagtigheder ved de indmålte punkter Figur 10.19: Den grå flade skitserer den korrekte placering af flade 3, mens den stiplede flade stammer fra test 3.2. Figur viser spredningerne for hjørnekoordinaterne. Spredningerne til y-koordinaterne er alle 4-5 mm større end i Ref 2, hvilket er forholdsvist lidt i forhold til de andre tests. Hjørne σx (m) σy (m) σz (m) Ref 2 Test 32 Diff Ref 2 Test 32 Diff Ref 2 Test 32 Diff 134 0,002 0,002 0,000 0,001 0,006 0,005 0,005 0,005 0, ,016 0,016 0,000 0,001 0,005 0,004 0,005 0,005 0, ,002 0,002 0,000 0,001 0,005 0,004 0,007 0,007 0, ,015 0,015 0,000 0,001 0,004 0,004 0,007 0,007 0,000 Figur 10.20: Spredningen for hver koordinat til hjørnepunkterne på flade 3. I figur er konfidensellipsoiden for punkt 134 vist. Bemærk ellipsoidens udstrækning i y- retningen. Hjørnepunkterne ændres altså ikke væsentligt i forhold til Ref 2. Dette betyder, at nøjagtigheden ikke forringes i forhold til Ref 2. Det er interessant, at nøjagtigheden ikke ændres væsentligt i test 3.2, set i forhold til resultatet fra test 3.1 på trods af, at de indmålte punkter dækker samme lille område. Dette skyldes at afstanden fra de indmålte punkter til hjørnepunkterne er mindre. I test 3.1 er afstanden fra de indmålte punkter til tre af hjørnepunkterne noget længere. Figur 10.21: Konfidensellipsoide for hjørnepunkt

81 Test 3.3, Kodningsfejl Formålet med denne test er at undersøge, hvordan DANRUM håndterer beregningen og visualiseringen af hjørnepunkterne, når der kodes et punkt på en forkert væg, og punktkoden ikke bliver rettet i observationerne, inden koordinatberegningen og fladeudjævningen foretages. Figur viser en skitse af opmålingen. De fire første punkter på flade 3 måles tæt på hjørnerne og kodes jf. kodetabellen. Punkt 35 er kodet forkert og er i virkeligheden indmålt på flade 5, som er den modsatte væg i rummet. Flade 5 Flade Flade Figur 10.22: Placering af de indmålte punkter i test 3.3. Bemærk at punkt 35 er placeret på flade Figur 10.23: Residualer til punkter efter fladeudjævning inden udeladelse af punkt 35. Figur 10.24: Residualer til punkter efter fladeudjævning efter udeladelse af punkt 35. På figur er residualerne til de fire første punkter på flade 3 over 1,2 m, mens residualet til punkt 35 kun er 2 mm. Dette viser, at mindste kvadraters udjævning ikke giver den rigtige løsning, når der er grove fejl i observationerne. Det burde være punkt 35, der fik et kæmpe residual, da det er dette punkt, som ligger på en forkert flade. Mindste kvadraters løsning giver i dette tilfælde en løsning, der betyder, at flade 3 nærmest ligger vandret i rummet, jf. figur For at opnå den korrekte bestemmelse af rummet må punkt 35 udelades af fladeberegningerne. Af figur fremgår residualerne til punkterne efter udeladelsen af punkt 35. Residualerne til de resterende fire punkter på flade 3 er nu minimale, og fladen er korrekt bestemt. Dette fremgår også af figur 10.26, hvor rummet nu er korrekt visualiseret. Figur 10.25: Rummet inden udeladelse af punkt 35. Figur 10.26: Rummet efter udeladelse af punkt

82 Det er vigtigt, at der ikke er fejl i observationerne, når fladeudjævningen og beregningen af hjørnepunkterne foretages. Dette vil resultere i en forkert model af rummet. Det er dog ofte muligt at lokalisere eventuelle fejl allerede efter fladeudjævningen, og denne kan genberegnes efter udelukkelse af den grove fejl. Test 3.4, Indmålte punkter er placeret i en smal stribe Flade 6 Flade 3 Figur 10.27: Placeringen af punkterne på flade 3 i forbindelse med test 3.4. Formålet med test 3.4 er at undersøge nøjagtigheden for hjørnepunkterne på en flade, når de indmålte punkter udelukkende placeres i toppen af fladen. På figur fremgår punkternes placering på flade 3. Punkterne er indmålt i kanten af fladen, men udelukkende i toppen af fladen. Punkt 35 er indmålt i midten af det rektangel, som udspændes af de fire andre punkter. Nøjagtigheden af de to hjørnepunkter i bunden af flade 3 formodes, som følge af placeringen af punkt 31 og 34, at blive dårligere. De fem punkter til flade 3 er indsat i Ref 2 og erstatter punkterne til den oprindelige flade. Observationsfil og resultatfiler fremgår af bilag 11, :\E_Testdata\Test3\Test_ Resultat af test 3.4 I figur er afvigelserne mellem hjørnekoordinaterne i test 3.4 og Ref 2 beregnet. Det fremgår af figur 10.28, at y-koordinaterne til hjørnepunkterne 134 og 136 har de største afvigelser på cirka 16 cm. Dette er de to hjørnepunkter, som er placeret ved gulvet. Det er logisk, at disse koordinater ændres mest, da flade 3 kun er indmålt med punkter nær loftet. Hjørne x-koordinat (m) y-koordinat (m) z-koordinat (m) Ref 2 Test 34 Diff Ref 2 Test 34 Diff Ref 2 Test 34 Diff ,173 12,174-0,001 12,239 12,394-0,156 0,384 0,384 0, ,719 7,720-0,001 12,267 12,422-0,155 0,381 0,381 0, ,166 12,165 0,000 12,234 12,222 0,013 3,019 3,019 0, ,740 7,740 0,000 12,263 12,249 0,014 3,021 3,021 0,000 Figur 10.28: Forskelle mellem de beregnede hjørnekoordinater fra Ref 2 og test 3.4. For punkterne 234 og 236, som er placeret ved loftet, er afvigelsen med hensyn til y-koordinaten i størrelsesordnen 1,4 cm. Ud fra afvigelserne i koordinaterne er det muligt at se, at flade 3 ligger skævt i forhold til lodret. På figur er placeringen af flade 3 skitseret ved den stiplede flade i forhold til den korrekte placering, der er angivet ved den grå flade. Test 3.4 viser, at flade 3 vipper om horisontalaksen Figur 10.29: Hældning af flade3. 76

83 Det viser sig også, at spredningen for punkterne 134 og 136 er meget høje som følge af den dårlige geometri ved indmålingen af flade 3. Spredningen på y-koordinaten er omkring 85 cm, og knap 10 cm for punkterne 234 og 236, jf. figur Det er således meget tydeligt, at fladen er meget dårligt bestemt i y-retningen som følge af, at fladen vipper, jf. figur Der er ikke udarbejdet konfidensellipsoider, der viser dette, da de vil være enormt store. Hjørne σx (m) σy (m) σz (m) Ref 2 Test 34 Diff Ref 2 Test 34 Diff Ref 2 Test 34 Diff 134 0,002 0,007 0,005 0,001 0,867 0,867 0,005 0,005 0, ,016 0,018 0,002 0,001 0,842 0,841 0,005 0,005 0, ,002 0,002 0,000 0,001 0,073 0,072 0,007 0,007 0, ,015 0,015 0,000 0,001 0,100 0,099 0,007 0,007 0,000 Figur 10.30: Koordinatspredninger for henholdsvis Ref 2 og test 3.4. I forhold til test 3.2 er det interessant, at spredningerne i test 3.4 er væsentlig dårligere på trods af, at de indmålte punkter faktisk dækker hele fladens bredde. Problemet er, at de indmålte punkter ligger dårligt i forhold til fladens højde. Forholdet mellem afstanden fra de nederste indmålte punkter til gulvet og afstanden til loftet er meget forskellig, jf. figur I test 3.2 holder de indmålte punkter fladen på plads i midten, så den ikke vipper i samme grad, hvorimod det i test 3.4 tydeligt fremgår, at fladen vipper meget. Test 3.5, Indmåling af 9 punkter på hver flade Formålet med test 3.5 er at undersøge, om nøjagtigheden af hjørnekoordinaterne bliver bedre som følge af, at der indmåles 9 punkter på alle fladerne i rummet. På figur er placeringen af de 9 punkter på flade 3 vist. Der er foretaget en indmåling af testrummet fra samme opstilling som referencemålingen Ref 2. I Ref 2 er rummet indmålt med 5 punkter, og det er således muligt at sammenligne hjørnekoordinaterne og de tilhørende spredninger til koordinaterne mellem de to målinger Flade Figur 10.31: Placeringen af de 9 indmålte punkter i test 3.5. Observationsfilen og resultatfilen til test 3.5 er vedlagt i bilag 11, :\E_Testdata\Test3\Test_35. Observationerne er indlæst i DANRUM, der efterfølgende foretager beregningen af hjørnekoordinaterne. Ud fra kovariansmatricerne til fladerne er kovariansmatricen til de otte hjørnepunkter bestemt. Resultat af test 3.5 Først sammenlignes hjørnekoordinaterne mellem de to målinger. I figur er afvigelsen bestemt for alle otte hjørnepunkter. Hjørnepunkterne 136, 156, 236 og 256 har afvigelser i størrelsesordnen 2,2-3,5 cm for x-koordinaten. Noget tyder på, at flade 6, der indgår i bestemmelsen 77

84 af disse punkter, er dårligt bestemt i test 3.5. Det er faktisk muligt at se, at flade 6 i test 3.5 hælder i forhold til flade 6 i Ref 2. Punkt 136 og 156 ved gulvet ligger tættere på opstillingspunktet end punkterne 236 og 256 ved loftet. Dette fremgår af x-koordinaternes størrelser. Der er forholdsvis små og ubetydelige ændringer ved y- og z-koordinaten. Hjørne x-koordinat (m) y-koordinat (m) z-koordinat (m) Ref 2 Test 35 Diff Ref 2 Test 35 Diff Ref 2 Test 35 Diff ,173 12,173 0,000 12,239 12,241-0,003 0,384 0,384 0, ,140 12,141-0,001 7,684 7,684 0,000 0,384 0,381 0, ,681 7,646 0,035 7,725 7,725 0,000 0,380 0,381 0, ,719 7,696 0,023 12,267 12,271-0,003 0,381 0,383-0, ,166 12,165 0,000 12,234 12,231 0,003 3,018 3,017 0, ,133 12,133-0,001 7,691 7,691 0,000 3,020 3,020 0, ,702 7,724-0,022 7,733 7,732 0,001 3,023 3,022 0, ,740 7,774-0,034 12,263 12,260 0,003 3,021 3,019 0,002 Figur 10.32: Afvigelser mellem de beregnede hjørnekoordinater fra Ref 2 og test 3.5. Næste skridt er at undersøge spredningerne for hjørnekoordinaterne i de to målinger for at vurdere hvilken måling, der er mest nøjagtig. Figur viser spredningerne til x-, y- og z- koordinaten for alle otte hjørnepunkter i de to målinger. Igen er det de fire hjørnepunkter 136, 156, 236 og 256, hvor flade 6 indgår, som skiller sig ud. Punkterne er faktisk dårligt bestemt i begge målinger. Det er dog i test 3.5, at disse hjørner er dårligst bestemt. Det burde egentlig have været omvendt, da flere observationer til fladerne skulle give en bedre bestemmelse af fladen. Det viser sig dog, at z-koordinaterne til alle hjørnepunkterne er bedst bestemt i test 3.5. På baggrund af test 3.5 er det ikke muligt at sige noget generelt om antallet af indmålte punkter på fladen og den tilhørende nøjagtighed. Dette skyldes, at det kun er ved de hjørnepunkter, hvor flade 6 indgår, at test 3.5 er dårligere. Da flade 6 er meget dårligt bestemt i test 3.5, kan der ikke konkluderes noget. Der er noget, der tyder på, at nøjagtigheden ikke ændres væsentligt, når antallet af punkterne på fladerne ændres fra 5 til 9. Hjørne σx (m) σy (m) σz (m) Ref 2 Test 35 Diff Ref 2 Test 35 Diff Ref 2 Test 35 Diff 134 0,002 0,001 0,000 0,001 0,002 0,001 0,005 0,003-0, ,001 0,001 0,000 0,001 0,001 0,000 0,004 0,003-0, ,008 0,037 0,029 0,014 0,001-0,013 0,004 0,003-0, ,016 0,036 0,020 0,001 0,002 0,002 0,005 0,003-0, ,002 0,001 0,000 0,001 0,002 0,001 0,007 0,003-0, ,001 0,001 0,000 0,001 0,001 0,000 0,007 0,003-0, ,007 0,032 0,024 0,013 0,001-0,012 0,007 0,003-0, ,015 0,031 0,016 0,001 0,002 0,001 0,007 0,003-0,004 Figur 10.33: Forskelle mellem spredningerne til hjørnekoordinater fra Ref 2 og test Test 4, Indmåling af et rum med hældende loft Formålet med test 4 er at undersøge, hvordan DANRUM håndterer beregningen af et rum med hældende loft. Testen er således mest en undersøgelse af, hvorledes visualiseringen håndteres i 78

85 dette tilfælde. Yderligere har det været et ønske fra projektgruppens side at måle et større rum. Observationsfilen og resultatfilen fremgår af bilag 11, :\E_Testdata\Test4. Beskrivelse af test 4 Test 4 gennemføres i seminarrum 1 Fibigerstræde 11. Rummet er et forelæsningslokale med et hældende loft, jf. figur Definitionsnøjagtigheden ved de forskellige flader er svingende, da disse består af forskellige materialer. Tre af væggene består af mursten, mens den sidste består af vinduer. Der vælges at måle til sprosserne på væggen med vinduer, da disse formodes at definere væggen bedst. Det hældende loft består af et antal betonspær, som indbyrdes er veldefinerede, men definitionsnøjagtigheden for hele loftet er dårlig, da betonspærene ikke danner en entydig flade. Figur 10.34: Opstilling under indmåling af rum 1 Fibigerstræde 11. Figur 10.35: Den røde linie angiver hvor skæringspunktet mellem vinduesfladen og loftet er. Totalstationen er opstilles i midten af rummet, så det er muligt at måle i nærheden af alle hjørner i rummet. På figur ses den fejl, der opstår ved at måle rummet ind som et firkantet rum bestående af seks flader. DANRUM kan ikke håndtere rum bestående af mere end seks flader. Seminarrummet består imidlertid af flere flader, så det har været nødvendigt at generalisere rummet. Generaliseringen bevirker, at hjørnepunkterne mellem vinduesfladen og loftet ligger længere nede end loftets afgrænsning, jf. figur Højden af vinduesfladen bliver derfor mindre. Da formålet med denne test som udgangspunkt skal vise, hvordan DANRUM håndterer et rum med hældende flader, har dette ingen betydning. Resultat af test 4 Beregningen af test 4 fremgår af figur 10.36, hvor skærmbilledet fra DANRUM er vist. DAN- RUM har ikke problemer med at udjævne fladerne eller at visualisere rummet. Fladeudjævningen viser, at en del af residualerne til punkterne overskrider den opsatte grænseværdi på 5 mm. Dette er et udtryk for, at fladerne i rummet har en dårlig definitionsnøjagtighed. Flade 2 og 3, som er henholdsvis loftet og væggen med tavlen, se figur 10.36, er tilsyneladende de flader, der er 79

86 dårligst defineret. Loftet består som tidligere nævnt af en række betonspær, som ikke danner en entydig flade. Flade 3 består primært af mursten, og der er målt til disse både ved gulv og loft. Noget tyder på, at fladen ikke er helt plan, men det har ikke været muligt at forklare de store residualer. Figur 10.36: Skærmbillede fra DANRUM, som viser beregningen af test 4. Det er imidlertid overraskende, at flade 6 ikke får større residualer. Denne flade består af vinduerne og er egentlig to flader delt af et betonelement. De små residualer tyder på, at fladen alligevel er godt defineret, og at vinduerne er opsat meget præcist. I figur er seminarrummet visualiseret i CosmoPlayer. Rummet er set fra siden, og det hældende loft fremgår tydeligt. Den lave side er flade 6 med vinduerne. Visualiseringen sker korrekt, og testen har vist, at der ikke er problemer med at håndtere rum med skæve flader Sammenfatning på tests På baggrund af de gennemførte tests af DANRUM kan det konkluderes, at programmet foretager beregningerne korrekt. De funktioner, der er indarbejdet i programmet, fungerer også som planlagt. I test 2 og 3 er nøjagtigheden for hjørnepunkterne blevet undersøgt, og på baggrund af disse tests er der fundet frem til, at det er vigtigt, at fladerne indmåles med en god geometri, hvor 80

87 punkterne placeres så yderligt som muligt. Det viser sig imidlertid på baggrund af test 3.2, hvor de indmålte punkter er placeret i et lille felt på midten af fladen, at der opnås bedre nøjagtighed ved hjørnepunkterne i denne situation, end når de indmålte punkter ligger på en smal stribe i toppen af fladen, som det var tilfældet i test 3.4. Nøjagtigheden for hjørnepunkterne afhænger dels af den anvendte totalstation og fladernes definitionsnøjagtighed. I figur er det muligt at se, at de hjørnepunkter i Ref 2, der er bestemt af flader med god definitionsnøjagtighed, har lave koordinatspredninger på omkring 5 mm, hvilket stemmer overens med den præcision, hvormed punkter kan bestemmes med den benyttede totalstation. De hjørnepunkter, der er bestemt af flader, der er dårligt defineret, får en nøjagtighed, der fuldstændig afhænger af fladernes definitionsnøjagtighed. I Ref 2 er flade 6 dårligt bestemt, og de hjørnepunkter, hvor denne flade indgår, har store koordinatspredninger, se figur Test 2 viser, at det kan være svært at overskue fejlforplantningen, når der arbejdes i tre dimensioner. Det viste sig, at det ikke er muligt at slutte, at hjørnekoordinaterne ved store rum er mere nøjagtige end i mindre rum. På trods af det faktum, at fladerne i de lille rum har større kovariansmatricer, er der tendens til, at nøjagtigheden ved hjørnekoordinaterne er bedre i det lille rum end i det store. Dette skyldes, at den lille unøjagtighed ved fladerne i det store rum får stor betydning ude i hjørnepunkterne. 81

88 11 Konklusion Temaet for denne projektrapport er teknisk måling. Indenfor dette emneområde er der valgt at arbejde med emnet Indvendig 3D-opmåling. Der arbejdes med at automatisere eksisterende manuelle målemetoder til indvendig 3D-opmåling med henblik på effektivisering af efterbehandlingen af data. I projektrapporten arbejdes der med udvikling af et software, der kan håndtere efterbehandlingen af observationer til et indmålt rum. Udgangspunktet for projektet er en interesse for teknisk måling anvendt ved indvendig 3Dopmåling. Interessen stammer fra dette års faglige møde i Nyborg, hvor to af projektgruppens medlemmer overværede et foredrag af landinspektør Søren Nørmølle fra Landmålergården i Køge. Foredraget omhandlede et software, som Landmålergården har udviklet til 3D-opmåling med reflektorfri totalstation. For at opnå indblik i emneområdet indvendig 3D-opmåling er der udarbejdet en foranalyse, hvor de eksisterende målemetoder til indvendig 3D-opmåling behandles. På baggrund af resultatet af denne foranalyse er der udarbejdet en problemformulering, som danner udgangspunktet for selve projektrapporten. Problemformuleringen lyder således: Hvorledes kan et system til indvendig opmåling ved hjælp af en reflektorfri totalstation udvikles til at indsamle og lagre observationer i 3D, foretage behandling og løbende kontrol af måledata, samt foretage en 3Dvisualisering af objektet? Projektgruppen har valgt at arbejde med indvendig 3D-opmåling med reflektorfri totalstation, og da det yderligere har været projektgruppens mål at arbejde med programmering, er der valgt at arbejde med udvikling af et opmålingssystem, der kan optimere denne form for indvendig 3Dopmåling. På baggrund af problemformuleringen foretages en tidsmæssig afgrænsning i forhold til det optimale opmålingssystem. Med udgangspunkt i afgrænsningen udarbejdes en kravspecifikation for opmålingsystemet, som indeholder krav til opmåling og krav til selve programmet, kaldet DAN- RUM. Kravspecifikationen danner udgangspunkt for systemudviklingen og skal sikre, at DAN- RUM udvikles således, at målsætningerne for programmet opfyldes. Til systemudvikling anvendes metoden Struktureret Analyse. Metoden indeholder værktøjer, som kan anvendes efter behov. Systemudviklingen i denne projektrapport indeholder tre dele. Ved hjælp af dataflowdiagrammer struktureres kravene til DANRUM i Systemanalysen. System- 82

89 analysen er en detaljeret kravspecifikation for DANRUM, som danner udgangspunkt for Systemdesignet, hvor en konkret specifikation for DANRUM udarbejdes. Systemdesignet danner bindeled mellem Systemanalyse og Systemkonstruktion. I Systemkonstruktionen foregår den egentlige konstruktion af DANRUM, hvor selve programmeringen af programmet gennemgås og dokumenteres. Der udvikles et opmålingssystem, der kan opmåle et firkantet rum bestående af seks flader, foretage fladeudjævning og visualisere en 3D-model af dette rum. På baggrund af en observationsfil i GSI-8 formatet indlæses og visualiseres observationerne i en tabel. I tabellen er det muligt at redigere i observationerne. Efter at redigeringen er gennemført foretages beregningen af 3Dkoordinater til de indmålte punkter på fladerne. Derefter gennemføres fladeudjævningen, og residualerne til de indmålte punkter visualiseres i en tabel, hvor også spredningen på vægtenheden til hver flade fremgår. Det er muligt at udelukke fejlbehæftede punkter og foretage genberegning af fladerne. Når fladeudjævningen er accepteret kan hjørnekoordinaterne til det indmålte rum beregnes og selve rummet visualiseres i en 3D-viewer i VRML-formatet. Det er muligt at gemme resultaterne fra beregningerne i en resultatfil. Efter at DANRUM er udviklet, er der gennemført en test af systemet. Testen er opdelt i forskellige tests, hvor forskellige situationer undersøges. Formålet med testene er at sikre, at systemet er konstrueret korrekt og foretager beregningerne korrekt. Yderligere undersøges hjørnepunkternes nøjagtighed i forskellige opmålingssituationer. For at kunne undersøge nøjagtigheden i hjørnepunkterne er det nødvendigt at bestemme kovariansmatricen for hvert hjørnepunkt. Der er i denne forbindelse udarbejdet et Matlab-script, der kan håndtere beregning af kovariansmatricer til hjørnepunkterne ud fra kovarianserne til flade parametrene. Værdierne fra de forskellige kovariansmatricer kan derefter sammenlignes. Den oprindelige plan var, at DANRUM skulle være i stand til at beregne kovariansmatricerne, men dette er af tidsmæssige årsager ikke implementeret i programmet. I nogle af testene sammenlignes nøjagtigheden af hjørnekoordinaterne ved brug af konfidensellipsoider. Der anvendes et Matlab-script til at visualisere ellipsoiderne, hvor inputtet er kovariansmatricen til hjørnepunktet. Test 2 viser i denne forbindelse et interessant resultat. Nøjagtigheden for hjørnepunkterne i et stort rum viser sig ikke at være mere nøjagtige end i et lille rum. Der er faktisk en tendens til, at hjørnepunkterne i det lille rum er bedre bestemt. Dette fremgår ved, at konfidensellipsoiderne i det lille rum er mindre end i det store. På baggrund af testene konkluderes det, at DANRUM opfylder de fastsatte krav til systemet fra kravspecifikationen. Der er dog enkelte forhold, der behøver nærmere kommentering. 83

90 Det har ikke været muligt at afse tid til at udvikle DANRUM, så det er muligt at eksportere det indmålte rum til en DXF-fil. DXF-formatet viste sig at være mere omfattende, end projektgruppen havde regnet med. Dette betød, at denne del af programmet ikke er blevet udviklet, da andre ting som blandt andet testen af systemet blev prioriteret højere. DANRUM rummer en del begrænsninger i funktionaliteten som følge af den afgrænsning, der er foretaget i problemformuleringen. Disse begrænsninger vil kunne fjernes, hvis blot tiden var til det. I kapitel 12 Perspektivering er udvidelserne af DANRUM gennemgået i detaljer. Her nævnes de generelle begrænsninger i DANRUM. Der kan kun indlæses rådata indsamlet med en Leica totalstation, og rådata skal i observationsfilen være opstillet på en bestemt måde. Begrænsningen skyldes, at det kun er Leica s GSI-format, der er blevet undersøgt, og at observationerne hentes i filen ud fra placering og ikke koden, der definerer observationstypen. Det er kun muligt at indmåle ni punkter på hver flade i rummet. Denne begrænsning skyldes opbygningen af kodetabellen og kan fjernes ved at ændre denne. DANRUM kan kun håndtere indmåling af firkantede rum med seks flader. Den del af programmet, der foretager fladeudjævningen, kan imidlertid sagtens håndtere flere flader. Problemet ligger i identificeringen af fladerne og i kodningen af deres indbyrdes relationer. Derudover har det vist sig, at der kan opstå komplikationer i forbindelse med håndteringen af flader, der er tæt på at være eksakt lodrette. Komplikationerne er forårsaget af den matematik, der ligger til grund for udjævningen, og en mulig løsning ville være at rotere observationerne. Omfanget og betydningen af komplikationerne er dog ikke undersøgt yderligere. Brugergrænsefladen i det endelige program afviger en smule fra den designede brugergrænseflade fra kapitel 9 Systemkonstruktion. Dette skyldes, at der i forbindelse med programmeringen af DANRUM er fundet frem til en bedre og mere hensigtsmæssig brugergrænseflade. Ændringerne består blandt andet i færre knapper og et lidt andet udseende, men selve funktionaliteten er den samme. Der er udarbejdet et appendiks, som indeholder de matematiske forudsætninger for fladeudjævning, jf. Appendiks A. Projektgruppen har selv opstillet de nødvendige matricer for at kunne udjævne fladerne. Dette har været udfordrene, da den hidtidige udjævning ikke direkte har kunnet anvendes. Dette skyldes, at der i observationsligningerne indgår mere end en observation, som ellers har været reglen i den udjævning, der undervises i på landinspektøruddannelsen. På trods af de tidsmæssige afgrænsninger, som projektgruppen har foretaget i forhold til udviklingen af DANRUM, opfylder DANRUM de væsentligste krav fra kravspecifikationen. Der er således udviklet et software, der opfylder de fastsatte målsætninger, og projektgruppen har opnået indblik i fladeudjævning og programmering, som har været nogle af de væsentligste mål med dette projekt. 84

91 På et mere generelt niveau kan det konkluderes, at det er lykkedes at automatisere en manuel proces. Efterbehandlingen af observationer fra en indvendig 3D-opmåling vil, i fald den foregår manuelt, være tidskrævende. Omregning af observationer til 3D-koordinater, udjævning af seks flader, vurdering af residualer og genberegning, beregning af hjørnekoordinater, samt visualisering af det opmålte i 3D kan ved hjælp af DANRUM foretages i løbet af kort tid. Optræder en opgave så hyppigt, at den kan defineres som en rutine, vil opgaven ofte med fordel, alt afhængig af opgavens karakter, kunne automatiseres. Den tid, der bruges på udvikling og optimering, vil som regel i sidste ende ved anvendelse af et program kunne spares mange gange og alt afhængig af brugervenligheden af mange mennesker. Derfor er automatisering af manuelle processer en væsentlig og nyttig kundskab. 85

92 12 Perspektivering Dette kapitel vil først og fremmest være en perspektivering over, hvordan DANRUM kan forbedres og videreudvikles. Indledningsvis tages der udgangspunkt i programmet med de beregninger og funktioner, det på nuværende tidspunkt kan håndtere. Det diskuteres, hvordan disse kan optimeres, udbygges eller gøres mere fleksible. Dernæst perspektiveres der over, hvilke beregninger og funktioner, der yderligere kan tilføjes programmet. Tiden er en afgørende faktor i udviklingen af et program. Eksempelvis har Landmålergårdens 3D-opmålingsprogram været undervejs i cirka 7 år. Inspireret af Landmålergårdens program og emner, der har været diskuteret undervejs i udviklingen af DANRUM, gøres der rede for, hvordan DANRUM med tiden kan videreudvikles Optimering af DANRUM En del af alternativerne til programmeringen af programmet, som det foreligger, er allerede behandlet i afsnittet Programmering af DANRUM i Visual Basic. Herunder følger alternativer, der synes for omfattende at behandle under beskrivelsen af programmeringen Matlab vs. Visual Basic Overordnet kunne programmeringen af DANRUM have været foretaget i Matlab, idet dette programs styrke og virkefelt i modsætning til Visual Basic er matematiske funktioner, de enkle Figur 12.1: Eksempel på brugergrænseflade programmeret i Matlab. 86

93 såvel som de mere komplicerede. Firmaet bag programmet, MathWorks, skriver, at: Matlab fundementalt bygger på sofistiskeret Matrix-software, der kan bruges i forbindelse med analyse af lineære ligningssystemer. Umiddelbart virker programmet i fladeudjævningssammenhæng og den dertilhørende matriceregning som et fornuftigt valg af programmeringssprog, men programmet lader med hensyn til blandt andet design af brugergrænseflade noget tilbage at ønske i forhold til Visual Basic, jf. figur Problemet kunne dog løses ved at anvende en eller flere af de udvidelsesmoduler, der findes til Matlab. Eksempelvis er det ved hjælp af en C++-kompiler muligt at oversætte sit Matlab-script til C++. Brugergrænsefladen, der kan designes med dette programmeringssprog, svarer til den, der kan designes med Visual Basic. En anden mulighed er at investere i en VBMatrix-komponent udviklet af MathWorks. Komponenten gør det i Visual Basic muligt at benytte sig af stort set alle Matlabs funktioner. Komponenten ligger dog i et prisleje, der set i forhold til behovet i denne sammenhæng er urealistisk. Hvilket programmeringssprog, der vælges, er ofte en afvejning af forskellige forhold. Helt grundlæggende ønskede projektgruppen at beskæftige sig med et mere generelt programmeringssprog end Matlab, og ovenstående forhold taget i betragtning blev det besluttet af benytte Visual Basic til programmeringen af DANRUM. [ ] Udjævning og matrixregneoperationer Mere specifikt kunne programmeringen af DANRUM med hensyn til udjævningen være grebet an på en mere raffineret måde, hvad angår lagring af data og antallet af regneoperationer og dermed beregningstid. Problemstillingerne er i første omgang ikke relevante i forhold til DAN- RUM i sin nuværende form, men programmets principper kunne i og for sig føres over og anvendes til modellering af observationer fra en laserscanning. I et sådant tilfælde med flere tusinde observationer ville en optimering af datalagringen og beregningsgangen finde anvendelse. Lagringen af data i matricer optager mere af computerens lagerplads end nødvendigt. N-matricen er symmetrisk omkring diagonalen. Det er derfor i realiteten kun nødvendigt at lagre N som en triangulær matrix, hvilket svarer til kun at lagre værdierne ovenfor eller nedenunder diagonalen, samt værdierne i diagonalen. De færre værdier kan ved hjælp af en matematisk funktion føres fra matricen over i et array. På denne måde spares der alt efter, hvor stor en matrix, der er tale om, en hvis mængde lagringsplads. Den matematiske funktion betyder ekstra beregningstid, men indekseres værdierne ved Array Indeks Array Triangulær matrix Figur 12.2: Matricerne kan lagres som arrays

94 hjælp af et ekstra array forenkles den matematiske funktion og dermed beregningstiden, jf. figur Bag hovedsagelig alle programmer gemmer sig et kompromis mellem beregningstid og lagerplads. Udover den sparede lagringsplads kan N-matricen specielt i tilfælde, hvor observationerne antages at være uafhængige, med fordel opstilles direkte ud fra observationerne. Altså er det ikke nødvendigt at opstille og lagre design-, vægt- eller observationsmatricen og gennemføre en række matrixregneoperationer for at nå frem til N-matricen, hvilket både sparer lagringsplads og beregningstid. Der kan i forbindelse med løsningen af ligningssystemet anvendes en Choleskydekomposition. Metoden benytter sig blandt andet af, at N er et multiplum af to triangulære matricer, hvilket bevirker, at der i løsningen af ligningssystemet ikke skal inverteres. Dette reducerer antallet af regneoperationer. [Wolf, 1997, s ] Rotation af rum I afsnit Test 1, Kontrol af DANRUM bliver det slået fast, at DANRUM ikke er i stand til at håndtere eksakt lodrette flader. Derudover konstateres der i afsnittet, at der som følge af konditionstallene for matricerne i udjævningen kan opstå problemer omkring flader, der er tæt på at være eksakt lodrette. Der defineres dog ikke, hvor tæt på eksakt lodret, de skal være, før problemerne indtræffer, og indmålingen af fire forskellige rum har endnu ikke ført til problemer. Problemet kan i teorien omgås ved at benytte sig af en rotationsmatrix, der i første omgang roterer koordinaterne til de indmålte punkter således, at ingen af rummets 6 flader er tæt på at være lodrette, jf. figur Herpå foretages udjævningen, hvor konditionstallene for matricerne er væsentlig bedre. Umiddelbart efter udjævningen beregnes hjørnekoordinaterne, hvorefter disse roteres tilbage ved omvendt brug af rotationsmatricen Brugervenlighed DANRUM er udviklet indenfor et kort tidsrum og er kun kontrolleret i forhold til programmets væsentligste funktioner. Programmet har indtil videre kun været benyttet af gruppens medlemmer. Programmet kunne ved hjælp af et testpanel eller lignende testes, og der kunne ud fra resultaterne arbejdes med brugervenligheden. I tilfælde af at personer uden forudgående kendskab til programmet skal kunne gøre brug af det, er det vigtigt, at brugeren vejledes og hjælpes på vej af hjælpefunktioner og fejlmeddelelser. Der kunne som et mindre tidskrævende alternativ udarbejdes en brugervejledning, jf. bilag Videreudvikling af DANRUM DANRUM kan i sin nuværende begrænsede form reelt kun anvendes til meget enkle 3Dopmålingsopgaver. Perspektiverne og udviklingsmulighederne for programmet er dog mange. Nogle er allerede realiseret i form af Landmålergårdens 3D-opmålingsprogram. Herunder følger ideer til en videreudvikling og udbygning af DANRUM. 88

95 Antallet af flader En af programmets væsentligste begrænsninger er, at det ikke er fleksibelt i forhold til antallet af indmålte flader. Fleksibiliteten mangler dog kun fra og med beregning af 3D-hjørnekoordinaterne. Programmeringen er som følge af begrænsningen blevet gjort væsentligt lettere og mere overskuelig. DAN- RUM ville med en begrænset mængde ekstra programmering kunne udvides til at omfatte mere end 6 flader. Dog under den forudsætning, at der stadig er tale om én gulvflade og én loftflade, og at disse ikke er forbundet af flere flader, jf. figur I det øjeblik gulvet forbindes med loftet af flere flader, bliver programmeringen mere kompliceret. Landmålergården løser problemet ved at benytte sig af såkaldte prismer, hvor fladernes samhørighedsforhold defineres af brugeren, men beregningen af hjørnerne burde i teorien kunne automatiseres. Filosoferes der over, hvordan en sådan automatisering kunne gribes an, burde det være muligt at bede programmet tage udgangspunkt i opstillingspunktet, og så ellers horisontalt og vertikalt bevæge sig rundt langs rummets flader indtil det møder en flade, som det allerede har identificeret. Altså defineres fladernes samhørighedsforhold automatisk af programmet. Herefter kunne skæringspunkterne mellem fladerne bestemmes. Alt afhængig af, hvor komplicerede rum, programmet skulle kunne beregne, skulle der tages forbehold for det i programmeringen. Loft Gulv Figur 12.3: Loft og gulv forbundet af flere flader Flere opmålingsmuligheder En anden af programmets begrænsninger er, at det kun kan håndtere opmåling af et enkelt rum gennemført med en enkelt opstilling. Programmet kunne udbygges, så det kan koble flere opstillingspunkter sammen. Opstillingspunkterne ville i dette tilfælde yderligere kunne tilknyttes et fikspunktsnet, eksempelvis System 34. Udbygningen ville kræve en del ekstra programmering. Blandt andet skulle programmet være i stand til at foretage en netudjævning. Derudover kunne programmet udbygges, så totalstationsobservationerne kunne suppleres med observationer foretaget med eksempelvis tommestok. Hvis der samtidig med blev oprettet et katalog indeholdende prædefinerede objekter, såsom kuber, cylindre og så videre, ville opmålingens detaljeringsgrad stige til også at omfatte vinduer, skabe med mere. Udbygningerne ville medvirke til, at antallet af relevante og mulige opmålingsopgaver bliver langt større. Udbygningen ville også betyde, at programmet kunne anvendes til udvendig 3D-opmåling. Eksempelvis kunne programmet og den reflektorfri totalstation anvendes til detaljeret opmåling. Kodetabellen ville naturligvis skulle modificeres og udvides. I teorien ville det være muligt at måle til murene på en bygning fra flere opstillinger, og alt efter om det er muligt at måle til taget, kunne programmet efterfølgende udtegne en 3D-model eller et grundrids af bygningen. Bunden af bygningen kunne defineres ved at måle til soklen. Umiddelbart 89

96 defineres programmets begrænsninger udelukkende af den reflektorfrie teknik, mens denne hovedsagelig afhænger af forhold såsom afstand, vejrforhold og definition af objekter On-line løsningen Efterhånden som antallet af flader og opstillingspunkter vokser, skærpes kravene til programmeringen og de forbehold, der skal tages i denne. Samtidig skærpes kravene til kodetabellen og brugeren. Omvendt kunne der slækkes på kravene ved løbende under opmålingen at lade brugeren interagere med programmet. I stedet for et fuldautomatisk avanceret efterprocesseringsprogram kunne programmet være en semiautomatisk online-løsning. Flere faktorer taler for en sådan løsning. Når først problemet omkring kommunikation mellem computer og totalstation er løst, ville programmeringen være nemmere, idet programmet, frem for selv at skulle tage forbeholdene, kan bede brugeren tage dem. Derudover ville opmålingsfejl og misforståelser mellem program og bruger løbende kunne opdages og rettes i marken, frem for at skulle ud at måle igen. Programmet kunne tilmed i forbindelse med opmålingen hjælpe brugeren med at holde styr på anvendelsen af kodetabellen, idet brugeren grafisk kunne udpege den flade, der ønskes at måle til, hvorefter computeren sender den relevante kode til totalstationen. Opmålingen og modelleringen af det opmålte ville med andre ord være mere enkel i forbindelse med en online-løsning Visualisering af konfidensellipsoider Visualiseringen af modellen kunne udvides til også at omfatte konfidensellipsoiderne til hvert af modellens beregnede hjørner. Dette ville give brugeren et visuelt indtryk af, hvor godt hjørnerne er bestemt, og dårligt bestemte hjørner ville kunne opdages, genmåles og genberegnes. En sådan udvidelse af funktionaliteten stiller dog krav til både Visual Basics håndtering af matematiske funktioner og VRML-formatets evne til at gengive ellipsoider Vurdering af udjævning og efterfølgende fejlfinding Uanset om programmet er udviklet som en on- eller off-line løsning ville det være en fordel at kunne kontrollere om de enkelte udjævninger er forløbet som forventet og i tilfælde af fejl, finde dem. Generelt kan resultatet af en udjævning vurderes og eventuelle fejl findes på flere måder. Med hensyn til udjævningerne i DANRUM bevirker én faktor dog, at de generelle vurderingsog fejlfindingsmetoder ikke finder anvendelse. Denne faktor er antallet af observationer. I forbindelse med opmåling måles der som regel ikke til flere punkter end højst nødvendigt. Testene er gennemført ved som regel at måle 5 punkter på hver flade. Programmet kan i øvrigt som følge af kodetabellen højst håndtere 9 punkter på hver flade. Idet antallet af punkter, der er nødvendige for at bestemme en flade er 3, er der derfor i udjævningerne tale om få overbestemmelser; som regel 2 og højst 6. 90

97 Netop antallet af overbestemmelser er essentielt i forhold til ved hjælp af nogle statistiske tests at kunne vurdere forløbet af en udjævning og i tilfælde af fejl finde dem. Blandt andet kan der gennemføres en såkaldt global test. En gennemførsel af testen forudsætter dog et passende antal overbestemmelser. Testen baserer sig blandt andet på chi^2-fordelingen, der ikke er normalfordelt, når der er få overbestemmelser. Det lave antal af overbestemmelser betyder, at resultatet af testen ikke er troværdigt. Testen vurderes først at blive troværdig, når antallet af overbestemmelser nærmer sig Forudsat at antallet af overbestemmelser er passende, opstilles der i forbindelse med testen en hypotese, som accepteres eller forkastes alt afhængig af, om den beregnede testværdi holder sig indenfor nogle opstillede grænser. I tilfælde af, at hypotesen forkastes, kan det enten skyldes fejl i den funktionelle model, grove fejl i observationerne eller forkert tildeling af a priori spredninger til observationerne. Fejl i den funktionelle model Den funktionelle model, der definerer udseendet af koefficientmatricen til observationerne, A, er baseret på, at observationerne ligger på en plan flade. Med mindre der øjensynligt måles til en krum flade, er den plane flade i forbindelse med 3D-opmåling af rum det bedste bud på den funktionelle model. Det vil derfor formodentlig ikke være den funktionelle model, der er udslagsgivende i forbindelse med en forkastelse af hypotesen i den globale test. Grove fejl i observationerne Det andet forhold, der kan gøre sig gældende i forbindelse med en forkastelse af hypotesen i den globale test er tilstedeværelsen af grove fejl. Der findes flere metoder til detektering af grove fejl. I det følgende gøres der kortfattet rede for to. Disse ville i tilfælde af et passende antal overbestemmelser kunne automatiseres og implementeres i DANRUM. Datasnooping I forbindelse med datasnooping undersøges alle residualer ét ad gangen. Der opstilles som ved den globale test, en hypotese. Alt efter om en given testværdi holder sig inden for de opstillede grænser, accepteres eller forkastes hypotesen. Testværdien beregnes blandt andet på grundlag af residualerne og observationernes a priori spredninger. En grov fejl har indflydelse på udjævningen og de andre observationers residualer. Forkastes hypotesen er det derfor ikke sikkert, at det er den undersøgte observation, der er behæftet med en grov fejl. Altså er det i forbindelse med datasnooping nødvendigt på skift at udelukke én observation fra observationssættet og gennemføre en udjævning. Kun på denne måde kan de grove fejl detekteres og slettes. Den danske metode En anden metode til detektering af grove fejl er den såkaldte danske metode, der er en form for 91

98 robust udjævning. Metoden har i modsætning til datasnooping den fordel, at alle observationer på en gang inkluderes i beregningerne. Først tildeles residualerne nye vægte ved hjælp af en speciel vægtfunktion. Funktionen er beregnet ud fra den antagelse, at en stor del af observationerne (10-25%) er behæftet med en grov fejl. Altså tildeles observationerne med de største residualer en mindre vægt, hvorfor disse observationers residualer bliver større i en ny udjævning. Residualerne til observationer uden fejl vil ikke vokse nævneværdigt, mens residualerne til observationer behæftet med grove fejl vil blive væsentlig større. Gentages proceduren et par gange vil forskellen være udtalt. Herpå benyttes en anden vægtfunktion. Denne funktion er beregnet ud fra den antagelse, at kun få af observationerne (0,5-2%) er behæftet med grove fejl. Denne funktion bevirker, at de af observationerne, der ikke er behæftet med grove fejl, igen får tildelt deres oprindelige vægt. De af observationerne, der var behæftet med grove fejl, vil på grund af deres efterhånden store residualer beholde deres lille vægt. Metoden forudsætter et passende antal overbestemmelser. [Juhl, 1984, s. 1-5] Forkert tildeling af a priori spredninger til observationerne Den sidste mulighed, der kan gøre sig gældende, er forkert tildeling af a priori spredninger til observationerne. Hvis antallet af overbestemmelser er tilfredsstillende kan a priori spredningerne også bestemmes ved hjælp af variansestimation. Alt afhængig af a posteriori variansfaktoren ændres a priori spredningen, så a posteriori variansfaktoren kommer til at ligge i nærheden af 1. Er a posteriori variansfaktoren eksempelvis 3 er de tildelte a priori spredninger for små og vice versa Den ultimative løsning Kombineres ovenstående ideer kunne 3D-opmåling i fremtiden stort set udføres automatisk. Alt efter en ønsket detaljeringsgrad kunne et rum scannes automatisk ved hjælp af en motoriseret totalstation. Totalstationen ville på denne måde være et billigt alternativ til en laserscanner. Efter målingen foretager totalstationen ved hjælp af en udvidet totalstationsversion af DANRUM udjævning af fladerne og automatisk frasortering af grove fejl. Herefter udtegnes en model af det opmålte på totalstationens skærm. Fejl kan erkendes allerede i forbindelse med opmålingen og rettes. Dette betyder en effektivisering af målemetoderne og der spares penge, da ommålinger begrænses. De afgørende faktorer i forbindelse med en sådan fremtidig løsning er totalstationens computerkraft og visualiseringsevne. Som nævnt er tiden en afgørende faktor i udviklingen af et program. Optimerings- og udvidelsesmulighederne med hensyn til DANRUM er mange. Desværre rakte tiden ikke til at få implementeret dem alle, men en stor del af principperne for indvendig 3D-opmåling er behandlet og analyseret. 92

99 Litteraturliste Bøger og rapporter [Adolphsen, 1992] Jes Adolphsen Problemer i videnskab Aalborg Universitetsforlag, 1992 [Ames, 1996] Andrea L. Ames, David R. Nadeau, John L. Moreland The VRML Sourcebook John Wiley & sons, Inc., 1996 [Andersen, 1997] Ib Andersen Den skinbarlige virkelighed - om valg af samfundsvidenskabelige metoder. Samfundslitteratur, 1997 [Aunsborg, 2001] Christian Aunsborg Projektarbejdets teori og metode Aalborg Universitet, 2001 [Borre, 1992] Kai Borre Mindste Kvadraters Princip anvendt i landmålingen Aalborg Universitet, 1992 [Brande-Lavridsen,1995] Ole Brande-Lavridsen Terrestrisk fotogrammetri Aalborg Universitet, 1995 [Callidus,2001] Laserscanningsfirmaet Callidus Operating Instructions - 3D Laser Measuring System Callidus Precision Systems GmbH, 2001 [Cederholm, 2000] Peter Cederholm Udjævning Aalborg Universitet, 2000 [Cederholm, 2003] Peter Cederholm Studievejledning for Landinspektøruddannelsens 8. semester Aalborg Universitet, 2003 [Cronberg, 1999] Michell Cronberg Grundlæggende programmering med Visual Basic 6.0 Forlaget Globe, 1999 [Delskov, 1991] Lis Delskov, Therese Lange Struktureret analyse, integreret system analyse Teknisk Forlag, 1991 [Dresling, 2000] Allan Dresling Struktureret og Objektorienteret Systemdesign Forlaget Marko, 2000 [Frederiksen, 2000] Helle Frederiksen Databasedesign med Access 2000 IDG Forlag,

100 [Juhl, 1984] Jens Juhl The Danish method Aalborg Universitet, 1984 [Kommunalteknisk Chefforening, 1999] Kommunalteknisk Chefforening, AUC, DSFL, KMS, KTC, FULS, Kommuner, Amter og de fotogrammertiske firmaer Specifikationer for tekniske kort, 2000 [Kristiansen, 2001] Jakob Kristiansen Start på Visual Basic 6.0 IDG forlag, 2001 [Leica, 1999] Leica geosystems Brugermanual til Leica Leica, 1999 [Mathiassen, 2000] Lars Mathiassen, Andreas Munk-Madsen, Peter Aksel Nielsen og Jan Stage Objekorienteret Analyse & Design Forlaget Marko, 2000 [Mikhail, 1981] Edward M. Mikhail, Ph.D. and Gordon Gracie, Ph.D. Analysis and adjustment af survey measurements Van Nostrand Reinhold Company, 1981 [Nørmølle, 2001] Søren Nørmølle Landinspektøren nummer 5-01 Den danske Landinspektørforening, 2001 [Wolf, 1997] Poul R. Wolf, Charles D. Ghilani Adjustment computations statistics and least squares in surveying and GIS John Wiley & sons, Inc.,1997 Foredrag og besøg [Nørmølle, Foredrag, ] Søren Nørmølle Nyborgmødet Demostration af opmålingsprogram den [Nørmølle, Foredrag, ] Søren Nørmølle Gæsteforelæsning på AAU den [Pomaska, Foredrag, ] Dr. Günter Pomaska Gæsteforelæsning i fotogrammetri den [Vejdirektoratet, besøg, ] Virksomhedsbesøg på vejdirektoratet den Web-sider [ ] Boligministeriet uddelingspulje Besøgt den URL: [ ] Softwarefirmaet Bluebit Besøgt den URL: 94

101 [ ] Programmet Cortzona Besøgt den URL: [ ] ProgrammetCosmoPlayer Besøgt den URL: www. cosmoplayer.com [ ] Konsulentfirmaet COWI Besøgt den URL: [ ] Laserscanningsfirmaet Cyra Besøgt den URL: [ ] Slides fra en forelæsning på AAU Besøgt den URL: WWWII-VRML.pdf [ ] Specifikationer til Leica TCR1105 Besøgt den URL: product/totalstations/tps1100_rl.lhtm Hjemmeside for matematik Besøgt den URL: [ ] Personal Computer Memory Card International Association Besøgt den URL: sdefinition/0,,sid1_gci html [ ] Laserscanningsfirmaet Trimble Besøgt den URL: [ ] Site med Syntaks beskrivelse Besøgt den URL: qa/qa.html [ ] Eksempel på VRML kode Besøgt URL: specifications/iso_iec_14772-all/part1/ examples.html [ ] Specifikationer til Leica TCR1105 Besøgt den product/totalstations/tps1100_dk.pdf [ ] 95

102 A Matematiske forudsætninger Appendiks A Matematik i form af fladeudjævning og beregning af skæringen mellem flader er essentielt i forhold til det program, der udvikles. Der gøres i dette appendiks rede for de væsentligste matematiske forudsætninger. Hovedparten og den centrale del af appendikset vil omhandle fladeudjævning og teorien bag. Først vil der dog blive gjort rede for, hvordan observationerne til udjævningen forberedes. Herefter følger udjævningsdelen, mens der til sidst vil blive gjort rede for, hvordan skæringen mellem de udjævnede flader beregnes og udfra disse koordinaterne til hjørnerne. A.1 Beregning af x-, y- og z-koordinater til punkter Udjævningen af fladerne er lagt an på, at observationerne består af x-, y- og z-koordinater til de indmålte punkter. Det er i dag muligt at sætte totalstationen til at registrere punkter på denne måde, men det synes mere relevant i første omgang at få de originale måledata i form af vinkler og afstande fra totalstationen. Vinklerne, der udgøres af horisontal- og vertikalvinklen og afstanden til det konkrete punkt, der måles ved hjælp af laser, omregnes til koordinater ud fra de generelle trigonometriske ligninger. Forudsat at horisontal- og vertikalaksen skærer hinanden i punktet P 0 ( xp, y, 0 P z 0 P ) og horisontalvinklen nulstilles i en vilkårlig retning beregnes koordinaterne på følgende 0 måde: sin(100 v) = z z s*sin(100 v) z zp z 0 P s = + = P s z v 100-v P 0 s vandret y P 0 hz Figur A.1: Opstilling set fra siden. Figur A.2: Opstilling set fra oven. I nedenstående formel findes højden z udfra den målte vertikalvinkel v og den målte afstand s, jf. figur A.1. Punktets endelige højde z P findes ved at lægge den definerede højde i punktet P 0 til. Bestemmer z P I formlerne til beregning af x- og y-koordinaten indgår horisontalvinklen hz og den vandrette afstand s vandret, jf. figur A.2, som beregnes ved hjælp af vertikalvinklen v. Til de beregnede værdier lægges igen værdierne fra punktet P 0, der definerer opstillingspunktets placering i koordinatsystemet. 1

103 Appendiks A svandret cos(100 v) = svandret = s*cos(100 v) s Bestemmer s vandret Bestemmer x P Bestemmer y P Når først de aktuelle vinkler og afstande er regnet om til x-, y- og z-koordinater til alle indmålte punkter på fladerne kan udjævningen påbegyndes. A.2 Fladeudjævning Behovet for udjævning af flader opstår i forbindelse med, at der under opmåling af et rum indmåles mere end tre punkter på hver flade. Der skal i teorien nemlig ikke mere end tre punkter til at beregne ligningen for en flade. I det øjeblik et fjerde punkt indmåles er fladen overbestemt og alt afhængig af hvilke tre målinger, der benyttes, er der forskellige bud på resultatet. Problematikken omkring flere bud på samme resultat er ikke landinspektører og andre erhverv for den sags skyld fremmed. Løsningen er udjævning, der resulterer i et entydigt resultat. Nærmere bestemt kaldes løsningen for udjævning efter mindste kvadraters princip, idet dette princip fordrer, at summen af de kvadrerede residualer skal være minimum. Residualerne er afvigelsen mellem xy de oprindelige og de korrigerede observationer. Det sin cos hænder, hz = at målingerne xy = s ikke *sin *cos er lige hz nøjagtige, xy + xy = = xy s vandret hvilket metoden også tager forbehold for, idet princippet udvides og ændres til, at summen af de kvadrerede og vægtede residualer skal være minimum. vandret P0 P 0 P P Ovenstående princip gælder for al udjævning indenfor landmålingen. Dog er der alt afhængig af udjævningsproblemet udviklet forskellige beregningsteknikker. Det viser sig imidlertid, at der i forbindelse med udjævning af flader skal benyttes en speciel teknik, der ikke tidligere er stiftet bekendtskab med. Først forklares hvorfor de sædvanlige beregningsteknikker ikke kan bruges. Dernæst gøres der med udgangspunkt i udjævning af en flade rede for en mere generel teknik, der kan løse udjævningsproblemer af den mere komplicerede slags. Dette følges op med en udledning af de formler, der benyttes i forbindelse med den generelle teknik. I sidste del af afsnittet uddybes enkelte af de emner, der behandles undervejs. Det være sig Taylor- rækkeudvikling, beregning af de foreløbige værdier og begrebet vægt. A.2.1 Hvorfor er fladeudjævning specielt? Der er i forbindelse med udjævning udviklet forskellige teknikker, der hver især egner sig til forskellige udjævningsproblemer. Inden for landmåling benyttes især to. Det være sig udjævning af observationer udelukkende og udjævning af indirekte observationer. Teknikkerne har hver deres eksistensberettigelse. Førstnævnte teknik benyttes som navnet også antyder til udjævnings- 2

104 Appendiks A problemer, hvor der udelukkende optræder én eller flere observationer, og konstanter om nødvendigt, i den ligning, der opfylder den funktionelle model. Eksempelvis benyttes teknikken, når vinkelsumsfejlen skal fordeles på de målte vinkler eller når højdeforskelsfejlen skal fordeles ved en fri udjævning af et nivellementsnet, jf. ligninger (A-1). ( b + r) + ( b + r ) + ( b + r ) = 0,000meter (A-1) I ligningerne udgør b erne observationerne og r erne udgør residualerne. Den anden teknik adskiller sig fra den første, idet der udover én og kun én observation også optræder elementer og konstanter om nødvendigt i den ligning, der opfylder den funktionelle model. Et simpelt eksempel på en sådan ligning, hvor det ukendte element er en afstand ˆx, er: (A-2) Det skal i parentes bemærkes, at der i landmåling med den funktionelle model menes den model, der beskriver de geometriske sammenhænge, der forbinder observationerne og de ukendte elementer. Observationer svarer til de foretagne målinger ( b ( 2 + r2og ) elementer xb ˆ 2= + 0r 2) + til ( bde 3+ ukendte r3) + ( b4størrelser, + r4) = 400,000 der gon er nødvendige for at bestemme den funktionelle model. I det efterfølgende kaldes de ligninger, der opfylder den funktionelle model for betingelsesligninger. Det er i øvrigt teknikken til udjævning af indirekte observationer, der undervises i på landinspektørstudiet. [Mikhail, s.59] Ovenstående teknikker er dog til tider ikke dækkende i alle landmålingssituationer, hvilket også viser sig at være tilfældet med hensyn til fladeudjævning. Deres utilstrækkelighed kan i første omgang forklares igennem deres karakteristika. I de ligninger, der opfylder den funktionelle model, indgår der mere end én observation, idet både x-, y- og z-koordinaten indgår som observationer. Dette udjævningsproblem kunne i første omgang løses ved hjælp af teknikken til udjævning af observationer udelukkende, men udover de tre observationer optræder der i ligninger elementer. Disse to forhold tilsammen bevirker, at de sædvanlige teknikker ikke er direkte anvendelige. Der skal derfor til formålet benyttes en mere generel udjævningsteknik. A.2.2 Den generelle udjævningsteknik anvendt på en flade I det følgende anvendes den generelle udjævningsteknik på en flade. Først opstilles betingelsesligningerne. Disse skal, idet de er ulineære, lineariseres ved hjælp af en Taylor-rækkeudvikling. Efter lineariseringen foretages en lineær transformation af ligningssystemet, der i sidste ende gør det muligt at anvende formlerne fra udjævning af indirekte observationer til løsning af ligningssystemet. 3

105 Appendiks A Opstilling af betingelsesligninger I forbindelse med udjævningen af en flade tages der i betingelsesligningerne udgangspunkt i ligningen for en flade. Ligningen for en flade kan blandt andet være givet ved: (A-3) De observationer, der indgår i udjævningen, er de x-, y- og z-koordinater, der er beregnet ud fra de målte afstande og retninger, jf. afsnit A.1. Der skal som før nævnt minimum 3 punkter til for at definere en flade. Det forudsættes, at der er målt til 5 punkter på væggen, hvilket vil sige, at antallet af overbestemmelser er 5-3=2. For hvert af de målte punkter kan der opstilles en betingelsesligning, der opfylder den funktionelle model. De fem betingelsesligninger ser hver især ud som følger: (A-4) hvor, og er de udjævnede observationer. Linearisering af betingelsesligninger De ubekendte i ligning (A-4) er de tre udjævnede observationer og de tre fladeparametre a, b og c. Da nogle af de ubekendte i ligningerne indgår i et produkt med en anden ubekendt er ligningerne ulineære. Førend det er muligt at løse problemet ved udjævning efter mindste kvadraters Fẑ zx ŷ ˆr ˆx ˆF = ax ( zˆ ) + by ˆa( + xˆ) c b( yˆ) c= iar ˆxi = rˆ ˆ 0 br 0xiyi + rzi xi ( a a0) yi ( b b0) ( c c0) = ax 0 i + by 0 i + princip skal betingelsesligningerne lineariseres ved hjælp = a af en Taylor-rækkeudvikling, jf. A.2.4 xˆ Linearisering ved hjælp af Taylor-rækkeudvikling. De partielt afledte for de ubekendte er: F yˆ = b F zˆ = 1 F a = xˆ F b = yˆ F c = 1 Altså er de lineariserede betingelsesligninger givet ved: z a x b y c a ( xˆ x ) b ( yˆ y ) + ( zˆ z ) x ( a a ) y ( b b ) ( c c ) = 0 i 0 i 0 i 0 0 i i 0 i i i i i 0 i 0 0 hvor de første fire led er 0 te ordens leddet og de resterende 1. ordens leddet, jf. A.2.4 Linearisering ved hjælp af Taylor-rækkeudvikling. De foreløbige bud på de udjævnede observationer, x i, y i og z i, svarer til de observationer, der er foretaget i marken, og forskellen på de foreløbige bud og de udjævnede observationer svarer til residualerne. Trækkes 0 te ordens leddet nu fra på begge sider og sættes eksempelvis fås: (A-5) De foreløbige værdier a 0, b 0 og c 0 kan eksempelvis beregnes ud fra de første tre punkter, jf. 4

106 Appendiks A A.2.5 Beregning af foreløbige værdier. Samles residualerne i en vektor, differencen mellem den foreløbige og sande værdi af parametrene i en vektor og kaldes 0 te ordens leddet f kan ligning (A-5) på matrixform skrives som: (A-6) hvor koefficientmatricerne B for residualerne og A for forskellen mellem den sande og foreløbige værdi for fladeparametrene og vektorerne hver især er givet ved: x1 y1 1 x2 y2 1 ax 0 1+ by 0 1+ c0 z1 A= x3 y3 1 f =... x4 y4 1 x a = f ax by c0 z 5 x rˆ x1 0 b y5 1 b r r r r Br fcx 0= 1 + aax Bb a= + 0 dbb+ d r xy= ˆ ry0 b1 b c a0 b Bc z= rcˆ z10 0 c a0 b Af ligning (A-5) kan det ses, at elementerne i 0 te r ordens leddet f har de samme koefficienter = a b som residualerne bare med modsat fortegn. Hvis c... 0 observationerne samles i en vektor kan 0 te x rˆ x0 ordens leddet f derfor skrives som: c y rˆ 5 y5 z r ˆ 5 z5 0 0, hvor = og d er konstantvektoren (A-7) Ligningssystemet, der skal løses, ser efter omskrivningen ud som følger: (A-8) 5

107 Appendiks A Lineær transformation af ligningssystemet Ligning (A-8) adskiller sig fra det ligningssystem, der kendes fra udjævning af indirekte observationer i og med, at der til residual- og observationsvektoren er knyttet en koefficientmatrix B. Koefficientmatricen B indgår netop fordi der i betingelsesligningerne optræder mere end én observation. For at kunne håndtere de ekstra observationer og omskrive ligning (A-8) til ligningssystemet kendt fra udjævning af indirekte observationer foretages en lineær transformation af observationerne: (A-9) Resultatet er en vektor med ækvivalente/jævnbyrdige observationer. Idet residualerne er knyttet til observationerne transformeres disse også: (A-10) hvor og hver især er givet ved: arˆ ˆ ˆ 0 x1 br 0 y1+ rz1 arˆ ˆ ˆ 0 x2 br 0 y2 + r z2 r ˆ ˆ ˆ r br æ = ar 0 x3 br 0 y3+ r z3 æ Br T ˆ ˆ ˆ Σ Bb ar ax0 0 1 x4 br by yz4 + rz4 1 æ = BΣB arˆ ˆ ax by z ˆ x bry r + z5 2 r b æ = a0x3 b0y3+ z 3 Ved hjælp af ligning (A-9) og (A-10) kan ligning (A-8) nu ax 0omskrives 4 by til: z4 ax 0 5 by z 5 r r r + Ax = b + d æ æ (A-11) Ligning (A-11) svarer til det ligningssystem, der opstilles i forbindelse med udjævning af indirekte observationer, hvilket vil sige, at ligning (A-11) kan løses ved hjælp af normalligningen fra udjævning af indirekte observationer, jf. ligning (A-14). Inden da skal kovariansmatricen for observationerne, jf. A.2.6 Begrebet vægt, på grund af den lineære transformation af observationerne også transformeres. Ifølge den generelle lov om fejlforplantning er den ækvivalente kovariansmatrix givet ved: (A-12) hvor, siden observationerne forudsættes at være uafhængige og udgøres af de fem punkters x-, y- og z-koordinater, er givet ved: 6

108 Appendiks A Den ækvivalente kovariansmatrix kan herefter som følge af ligning (A-24) og udfra kendskab til a priori spredningen omskrives til den ækvivalente vægtmatrix : (A-13) A priori spredningen kan estimeres gennem en række forsøg eller beregnes ud fra det pågældende måleudstyrs specifikationer. Løsning af ligningssystemet Herefter sættes de opstillede ækvivalente matricer ind i normalligningen fra udjævning af indi- 2 1 CΣ σ r æ σ ACAx 0 = ) x0 Σ 1 = 0ACb r r T r 1T rekte observationer, jf. ligning (A-23) i afsnittet ( x r r T T T 1T r1 r T T T 1 T 1 a Br +Σ = + a( B0 + A.2.3 æax Σ( Generel ) Ba æσ A = ( B) a Σ 0) AC B Ax ) udledning æ( æ ( Ax b=σ b æ + æ= B+ af db) ( dσb normalligninger: ) ΣB( B) ΣBf ) f 2 0 σ y σ z Σ= σ x σ (A-14) y σ z5 Idet ligningssystemet i forbindelse med udjævning af en flade er ulineært, er udtryk for de korrektioner, der skal tillægges de foreløbige værdier. Der itereres indtil korrektionerne er tilfredsstillende små. Herefter er de ukendte parametre givet ved summen af de foreløbige værdier og korrektionerne fra den sidste iteration. Eksempelvis: (A-15) Observationernes residualer kan med udgangspunkt i ligningerne (A-6) og (A-12) beregnes ud fra følgende formel: r r Br + Ax = f 7

109 Appendiks A (A-16) I princippet skal observationerne mellem iterationerne også korrigeres i forhold til de beregnede residualer, da de optræder som ubekendte i ligningssystemet, men erfaringer viser, at de oprindelige observationer ligger så tæt opad de udjævnede, at korrektionen som regel ikke er af betydning. Udover residualerne beregnes også variansfaktoren, idet denne er et umiddelbart udtryk for, om udjævningen er gået som forventet. Variansfaktoren er givet ved: (A-17) hvor m-n er lig med antallet af overbestemmelser. Værdien af variansfaktoren skal, hvis udjævningen er forløbet tilfredstillende, ligge i nærheden af 1. Er dette ikke tilfældet, kan det enten skyldes: r 2 r T 1 rt T 1 r 1 r σˆ0 T r at den stokastiske model ikke er korrekt, hvilket 2=ΣB Cr ( vil ΣB æσ ) sige, B ) æ at ( ffobservationernes Σ Ax B )( B ΣB ) Ax a priori ˆ0 σ = spredninger ikke er korrekte. I tilfælde af en variansfaktorværdi m n under 1 er a priori spredningerne for store og vice versa. at den funktionelle model ikke er korrekt, hvilket eksempelvis vil sige, at objektet, der indmåles, ikke kan beskrives som en flade. eller at observationerne ikke er normalfordelte. Ovenståede gennemgang af udjævningen af en flade er teorien bag den fladeudjævning, der foretages i programmet, og de resultater programmet leverer. [Mikhail, 1981, s ] [Wolf, 1997, s ] [Cederholm, 2000, s. 40] A.2.3 Generel udledning af normalligninger I forrige afsnit blev der til løsning af ligningssystemet uden yderligere forklaring benyttet en normalligning fra udjævning af indirekte observationer. I dette afsnit udledes denne ligning. Mindste kvadraters princip stiller først og fremmest som kriterie, at summen af de kvadrerede 8

110 Appendiks A og vægtede residualer skal være minimum. Hvis residualerne benævnes observationerne er uafhængige kan kriteriet matematisk skrives ud som:, vægtene c og (A-18) hvor φ benævnes vægtfunktionen og c 1, c 2,..., c m er vægtene svarende til observationerne b 1, b 2,..., b m. Ligning (A-18) kan på matrixform skrives som: hvilket svarer til den noget kortere formel: (A-19) ˆr m Ovenstående formel gælder i øvrigt også i tilfælde, b r hvor Cr r ( r AB cr ˆ observationerne c ˆ 1 rˆ ˆ ˆ r T + T B r ) r r rr CB= T A AC + BC r r T T ) = A ) cr T T T rr r φ = ( xax A b C b Cb) ( Ax C( )( Ax b ) b mr er b) m= korrellerede. ) cr i i min. c 2 i= 1 rˆ 2 φ = [ rˆ ˆ ˆ 1 r2... rm ] I udjævning af indirekte observationer skrives betingelsesligningerne, der kaldes... observationsligninger, når der kun optræder én observation i hver, som: c ˆ.. m rm (A-20) Indsættes fra ligning (A-20) i ligning (A-19) og ved at benytte sig af de tre første af følgende generelle matrixregneregler: fremkommer følgende ligning: ( A+ B) T = A T + B T 9

111 Appendiks A (A-21) Da er en skalar er hvert led i ligning (A-21) en skalar. En skalar transponeret er lig sig selv. Andet og tredie led i ligning (A-21) er derfor lig hinanden, idet: Vægtmatricen C er symmetrisk og er derfor lig sig selv transponeret. Ved at slå andet og tredie led i ligning (A-21) sammen fås: (A-22) Ligning (A-22) er vægtfunktionen. For at opfylde mindste kvadraters princip skal denne funktion minimeres. Funktionen minimeres ved at finde de partielt afledede med hensyn til de ubekendte og sætte dem lig nul. I ligningen er alle matricer og vektorer konstanter på nær, der indeholder de ukendte elementer. Differentieres ligning (A-22) med hensyn til fås: r r T T T r r r r r r r r r r b x r T T T CAx A b T b) T T r ( = ) = x T T CA T T φ = φ r r x ACAx bcax r r T T T Ved at benytte de samme matrixregneregler som før, r = 2 x ( ACA) 2bCA + bcb b = + x T ba T Cb r dividere med 2 og flytte om på leddene fås: x T r r T ( ACAx ) = ACb (A-23) der svarer til normalligningerne i forbindelse med udjævning af indirekte observationer. [Cederholm, 2000, s ] A.2.4 Linearisering ved hjælp af Taylor-rækkeudvikling Betingelsesligningerne i forbindelse med udjævning er som oftest ulineære som følge af, at mange af de problemer, der arbejdes med i landmåling er ulineære. Arbejdes der eksempelvis med vinkler indgår trigonometriske funktioner såsom sinus og cosinus ofte i betingelsesligningerne. Andre gange indgår en variable i et produkt med en anden variable, hvilket også gør ligningerne ulineære. For at kunne benytte udjævning ved mindste kvadraters princip skal betingelsesligningerne lineariseres. Dette gøres ved hjælp af en Taylor-rækkeudvikling. Kort fortalt bestemmes der først en funktionværdi ud fra et foreløbigt bud på det ukendte element. Til denne værdi lægges værdien 10

112 Appendiks A for den partielt afledte funktion med hensyn til det ukendte element udregnet i det foreløbige bud ganget med forskellen mellem det ukendte element og det foreløbige bud. Eksempelvis: Figur A.3: Linearisering af funktion. Y F( x) b= F( x) b F( x0) + ( x x0) x Ulineær Lineariseringen er illustreret på figur A.3. Den krumme kurve er den ulineære funktion, mens den lige linie er den lineariserede funktion. Det foreløbige bud på det ukendte element er x 0 og funktionsværdien for det foreløbige bud, hvilket svarer til 0 te ordens F(x) leddet, er markeret med et O. Hertil skal lægges 1. ordens leddet, der findes ved først at finde værdien af den partielt afledte funktion med hensyn til det ukendte element udregnet i det foreløbige bud. På figuren svarer denne værdi til hældningskvotienten på tangenten til kurven F( x) F( x i punktet O. 1. ordens leddet udgøres af denne værdi ganget forskellen mellem det ukendte element og det foreløbige bud, hvilket 0) + ( x x0) x svarer til funktionstilvæksten for tangenten for stykket (x-x 0 ), der på figuren er den vertikale afstand mellem punkt O og P. Den resterende vertikale afstand op til P svarer til den fejl, Oder F(x begås ved ikke at tage 2. ordens og højere led med. 0 ) Beregningerne gentages indtil forskellene mellem de foreløbige og de søgte værdier ( x x0 ) er x 0 tilpas små. Lineariseringen forudsætter altså, at der på forhånd er genereret et bud på løsningen, hvilket som regel er muligt ud fra en delmængde af observationerne. x-x 0 [Cederholm, 2000, s ] 11

113 Appendiks A A.2.5 Beregning af foreløbige værdier I nogle af matricerne indgår de foreløbige bud på de søgte elementer. De foreløbige bud på elementerne findes ud fra en delmængde af observationerne. Som nævnt kan en flade defineres ud fra minimum tre punkter, hvorfor der med udgangspunkt i de tre første sæt x-, y- og z- koordinater beregnes foreløbige bud på parametrene a, b, c i ligningen for en flade, jf. ligning (A- 3). Parametrene findes på følgende måde: 1. Vektorerne PQ og PR dannes ud fra koordinaterne til de tre punkter på fladen. Vektorerne ligger begge i den søgte flade, jf. figur A Normalvektoren n, der står vinkelret på fladen, er krydsproduktet af PQ og PR, idet krydsproduktet af to vektorer altid resulterer i en vektor, som står vinkelret på dem begge. 3. Hvis koordinaterne til punktet P kaldes (x 0, y 0, z 0 ) og n s komponenter (n 1, n 2, n 3 ) er fladens ligning givet ved:, hvor, og Med udgangspunkt i de tre punkter P(0,2,2), Q(4,2,0) og R(2,6,4) demonstreres det i det nz 1( xax nx x+ by 0) n+ + 2y c følgende, hvordan de foreløbige værdier findes: n 21 nx 1 0 n2+ y ( 0y( nx nz 1y300) 0 + n 2y 3( 0z nz z3 0) 0= ) 0 bc a = Rx Px n 3 n R PR R 3 n = y Py = 63 2 = 4 P 0 Rz P z n Q Figur A.4: Vektorer, der bruges til beregning af foreløbig værdier Vektorerne PQ og PR er givet ved henholdsvis: Qx Px PQ = Qy Py = 2 2 = 0 Qz P z De to vektorers krydsprodukt er normalvektoren n: 12

114 Appendiks A PQ PQ PR 2 2 PR 3 3 0*2 4*( 2) 8 2 PQ3 PR 3 PQ PR = = ( 2)*2 2* PQ1 PR = = 1 4*4 2* PQ1 PR 1 PQ2 PR 2 Fladens ligning er herefter givet ved: n ( x x ) + n ( y y ) + n ( z z ) = 0 2( x 0) 3( y 2) + 4( z 2) = Når først de foreløbige værdier er på plads kan de sættes ind i de relevante matricer. A.2.6 Begrebet vægt I tilfælde af at observationerne ikke er bestemt med samme nøjagtighed indføres begrebet vægt. I forbindelse med landmålingsobservationer arbejdes der sædvanligvis med spredning og varians, der er udtryk for målingernes nøjagtighed. 2 σ En observation af høj 2nøjagtighed 1 3 har 1 en lille varians og vice versa. Da graden af nøjagtighed c2x k 3y+ 4z 2 2= 0 z = σ 0 1 = er omvendt proportionalt x+ y+ k = σ 0 c= 2 2 2med værdien 4 2 af σ 0 σ varians arbejdes der ofte med et andet begreb, hvis værdi mere logisk følger værdien af variansen. Begrebet kaldes observationens vægt og er defineret som: hvor k er en konstant. Derudover hører der til definitionen af begrebet, at en observation med varians σ har vægten 1. Heraf følger at: 2 0 Værdien σ kaldes variansfaktoren. Udover at den enkelte observation som følge af instrument, 2 0 observatør og opmålingsmetode har en spredning kan observationerne indbyrdes afhænge af hinanden. Eksempelvis hvis x- og y-koordinaten til et punkt beregnes ud fra den samme målte vinkel og afstand. Ændres der på x-koordinatens spredning må der nødvendigvis også ændres på y-koordinatens, idet beregningsgrundlaget er det samme. Afhænger observationerne på nogen måde af hinanden siges de at være korrelerede og som følge af den generelle fejlforplantnings- 13

115 Appendiks A lov eksisterer der en kovarians mellem dem. I forbindelse med at observationers nøjagtighed skal indgå i en udjævning opstilles de i en kovariansmatrix, der defineres på følgende måde: Af diagonalen fremgår de enkelte observationers varians, mens værdierne uden for diagonalen repræsenterer kovarianserne i fald observationerne er korrellerede. I tilfælde af ukorrelerede observationer sættes disse værdier til 0. I landmålingen forudsættes det ofte, at observationerne er indbyrdes uafhængige, hvilket vil sige, at kovarianserne sættes til 0, idet der ikke er kendskab til graden af deres indbyrdes afhængighed. Med udgangspunkt i kovariansmatricen og forudsætningen om indbyrdes uafhængighed kan vægtmatricen C opstilles: σ σ... σ σ m σ21 σ2... σ2m σ 1 σ1 Σ b = c c σ C = σm1 σm2... = σm σ σ 2 = σ 0 2 Den inverse af en diagonal matrix er en anden matrix,... hvor... hvert element er den reciprokke værdi af det tilsvarende element i den originale matrix Det 0 vil sige,... at: c m 2 σ σ 2 1 C = σ Σ m 0 b (A-24) Ovenstående ligning er i virkeligheden generel og gælder hvad enten observationerne er uafhængige eller ej. [Mikhail, 1981, s ] [Cederholm, 2000, s. 15] A.3 Beregning af koordinater til hjørner Når først de seks flader, som et lukket firkantet rum består af, er bestemt, er det nødvendigt at beregne skæringen mellem fladerne og udfra dette koordinaterne til rummets hjørner. Udover at være et vigtigt og begribeligt resultat af opmålingen bruges de også til udarbejdelse af 3D-modellen af rummet. 14

116 Appendiks A To flader vil med mindre de er parallelle skære hinanden i en ret linie. De i alt 12 skæringer mellem fladerne mødes i 8 hjørner. De tre linier, der mødes i et hjørne, vil skære hinanden i ét punkt alene. Argumentationen er som følger: Linierne ligger hver især i begge de planer, de udgør skæringen imellem. Derudover skærer linierne hver især hinanden i ét punkt, da de parvis ligger i den samme flade. Disse to lovmæssigheder taget i betragtning må de tre linier nødvendigvis skære hinanden i det samme punkt, jf. figur A.5. Tages der for eksempel udgangspunkt i linien Væg1/Væg2, der udgøres af skæringen mellem væg 1 og væg 2 ligger den både i væg 1 og væg 2. Derudover skærer den linien Væg1/ Loft, da begge linier ligger i fladen Væg1. På samme måde skærer linien Væg1/ Væg1/Loft Væg2 linien Væg2/Loft. Lovmæssighederne opfyldes alle kun i det tilfælde, hvor linien Væg1/ Væg2 skærer linierne Væg1/Loft og Væg2/Loft i det punkt, hvor linierne Væg1/Loft og Væg2/ Loft skærer hinanden. z a= ax 1 + by 1 + c 1 b1 1 1c x z a= ax 2 + by 2 + c 2 b2 1 2c y Da de tre flader, der mødes i et hjørne skærer hinanden z a= ax 3 + by i 3ét punkt + c 3 b3 1 3c 3 alene 0kan 0 der 1 opstilles z tre ligninger med tre ubekendte. Ligningerne er fladeligningen indeholdende fladeparametrene for hver flade og de ubekendte er x-, y- og z- koordinaten til skæringspunktet. Loft Væg2/Loft Væg1/Væg2 Væg2 Figur A.5: De tre linier, der udgør skæringerne mellem fladerne, skærer hinanden i ét punkt. Ligningssystemet kan løses ved at stille ligningerne op i en matrix og rækkereducere denne. På denne måde beregnes de 8 3D-hjørnekoordinater til det indmålte rum. 15

117 Bilag 1 Interview med landinspektør Søren Nørmølle fra Landmålergården i Køge Interviewet fandt sted i rum 114 Fibigerstræde 13 den 17. marts 2003, hvor hele projektgruppen deltog. Formålet med interviewet var at opnå kendskab til de tekniske detaljer i Landmålergårdens 3D-opmålingsprogram. Yderligere var målet at få kendskab til anvendelsesmulighederne for programmet. Hvilke opgaver har du haft og hvad kan du forestille dig programmet og opmålingsmetoden i fremtiden kan bruges til? Vi har arbejdet en del med facaderenovering og byfornyelse. Der har blandt andet været nogle projekter, hvor der skulle påsættes en altan på en eksisterende facade. Der har vi opmålt bygningen til dette formål. Ellers har vi haft nogle større projekter, som har været mest på forsøgsbasis, for at teste programmet. Dette gælder blandt andet opmåling af nogle af forsvaretsbygningstjenestes gamle bygninger på Nyboder. Vi har også opmålt i forbindelse med bestemmelse af etagearealer i bygninger. Anvendes programmet også til andre opgaver, hvor der ikke stilles så høje krav til præcision og detaljeringsgrad? Nej, det har jeg ikke eksempler på. Hvorledes kommunikerer programmet med totalstationen, og er det meget tidskrævende at løse dette problem? Vi har opbygget programmet ved hjælp af moduler. For at få totalstationen til at kommunikere med programmet, har vi fundet et modul på Internettet, der sørger for det. Totalstationen og programmet er forbundet med et kabel fra totalstationens til computerens kommunikationsport. Programmet er udviklet således, at det står og lytter på kommunikationsporten kontant. Når der så foretages en ny måling på totalstationen, opfanger programmet dette og lagrer det indmålte punkt direkte i databasen. Hvorledes er kodetabellen opbygget og hvilke overvejelserne ligger bag udarbejdelsen og struktureringen? Vi har ikke udviklet en kodetabel for totalstationen. Derimod kan vi i programmet navngive og identificere fladerne ved hjælp af nogle koder. Her er det også muligt at tilføje oplysninger om afhængighed mellem fladerne. 1

118 Bilag 1 Hvorledes er databasen opbygget og er der aktuelle planer om at ændre strukturen på den i nær fremtid? Vi anvender en Access-database, hvor observationer, flader og så videre lagres. Databasen er relationsbaseret, hvilket gør det nemt at linke til den. Vi har planer om at udskifte Access-databasen med Oracle spatial i fremtiden, da den kan lagre objekter. Er det overhovedet relevant med en database i forbindelse med det program projektgruppen planlægger at udarbejde? I kan sagtens udvikle jeres program til at lagre data i nogle variable og så i beregningerne trække på nogle inputfiler. Det er ikke noget problem så længe, der er nok RAM (Random Access Memory) i computeren. Hvordan løser programmet fladeudjævningen, udjævnes ligningsparametrene eller udjævnes koordinaterne? Vi udjævner ligningsparametrene og ikke koordinaterne. Hvordan findes massemidtpunktet for hjørnerne i rummet? Er det massemidtpunktet af den udspændte plan eller er det skæringen mellem en linie, dannet af de to tilstødende sider og enten loft- eller gulvfladen? De tre linier, der dannes ved skæring af de tre flader parvis, for eksempel loft, væg 1 og væg 2, vil altid skære hinanden i ét punkt. Dette skyldes at de to horisontale linier, der udspænder loftet skærer hinanden i ét punkt. Den vertikale linie vil så skære fladen for loftet i netop samme punkt på grund af afhængighedsforholdet mellem den vertikale linie parvis med de to linier i loftsfladen. Dette udgør jo fladerne for væg 1 og væg 2. Hvilken type 3D-viewer anvendes til at visualisere resultatet? Vi anvender en Cortzona 3D-viewer, som vi har hentet på Internettet. Førhen brugte vi en ved navn CosmoPlayer. Det har ikke været så afgørende for programmet, hvilken viewer, vi har anvendt. Hvordan fungerer kommunikationen mellem 3D-vieweren og programmet? Er det meget vanskeligt at få denne kommunikation til at fungere? Programmet og 3D-vieweren kommunikerer via VRML-formatet. Det fungerer således at den kalder en pluginfunktion i programmet. Denne funktion er et browservindue, der kan visualisere modellen. Hvilken type programudvikling har I anvendt til at opbygge programmet efter, herunder valg af programmeringssprog? Vi har programmeret programmet i Delphi. Valget af programmeringsprog har ikke været afgø- 2

119 Bilag 1 rende for selve programudviklingen. Vi har valgt et sprog som vi kendte til i forvejen. Vi har ikke fulgt en bestemt programmeringsmetode, vi har selvfølgelig tænkt over hvorledes programmets algoritmer skal regne, men selve brugergrænsefladen har vi bare udviklet efter hvordan vi nu syntes den skulle se ud. Det er vigtigt at 3D-modellen kan kommunikere med databasen, så vi har brugt dele fra UML (Unified Modeling Language) til at udvikle den efter. Hvilke nye funktioner/udvidelser for programmet planlægger I i fremtiden? Vi har planer om at udbygge programmet med et Webcamera. Webcameraet skal indbygges i selve optikken på totalstation, så der kan tages billeder af hver flade. I øjeblikket er der monteret et Webcamera på siden af totalstationen der kan tage billeder af de objekter der indmåles. Disse billeder kan dog kun bruges til visuel dokumentation. Benytter i programmet ved ejerlejlighedsopdelinger? Nej, programmet benyttes endnu ikke, fordi det er alt for dyrt at benytte til så små opgaver. Vi benytter som regel dimensionsmål, men i det indre København bruger vi totalstation for at opnå en bedre nøjagtighed. Årsagen til dette er den høje kvadratmeterpris. 3

120 Bilag 2 Interview med landinspektør Niels Malmskov Interviewet fandt sted i Vordingborg den 8. marts 2003, og blev foretaget af Henrik Plenge Jensen. Interviewet blev foretaget for at undersøge hvor hvidt Niels Malmskov benytter totalstation ved indvendig opmåling. Hvorledes foretager du ejerlejlighedsopdeling, anvender du totalstation? Jeg anvender normalt dimensionsmål ved ejerlejlighedsopdeling og ikke totalstation. Der er tilstrækkeligt med dimensionsmål, og ved at forudsætte at lejlighedens vægge er parallelle, kan en opmåling af lejligheden fuldføres ved dimensionsmål. Kunne du forestille dig et behov for indvendig 3D-opmåling med reflektorfri totalstation? Måske kunne det være en fordel at anvende reflektorfri opmåling ved huslejefastsættelse for lejemål. I Vordingborg er der lige solgt en stor fabrikshal, som skal opdeles med henblik på udlejning. Fabrikshallen skal anvendes til kontorformål, og her vil det være en fordel at opmåle hallen med indvendig 3D-opmåling, da der skal indrettes kontorer i flere etager. Det vil ikke være muligt at anvende dimensionsmål, da det vil være alt for besværligt at opmåle hallen på denne måde. Måske kan indvendig 3D-opmåling også anvendes i forbindelse med godshoteller, hvor de lejede arealer opgøres i kubikmeter, men jeg kan ikke forestille mig at jeg får behov for indvendig 3D-opmåling foreløbig. Har du overvejet at anskaffe en reflektorfri totalstation i fremtiden? Jeg har planer om at anskaffe mig en reflektorfri totalstation, næste gang jeg skal skifte totalstation. Det bliver formodentlig i nær fremtid. Jeg regner med primært at anvende totalstationen til landmåling og matrikulære opmålinger. 1

121 Bilag 3 Beskrivelse af GSI-8 formatet Firmaet Leica, som blandt andet udvikler opmålingsinstrumenter, har udviklet et format til udveksling af data mellem firmaets forskellige instrumenter. Dette dataformat kaldes GSI-formatet (Geo Serial Interface). Der findes to versioner af formatet. Den ene er GSI-8 formatet og den anden er GSI-16 formatet. Formatet består af datablokke, som alt afhængig af hvilken version af formatet der er tale om, kan indeholde en hvis mængde data, men fælles for begge formater er, at en datablok består af en tekststreg. I GSI-8 formatet består en datablok af dataord med hver 16 tegn. Antallet af dataord kan maksimalt være otte i GSI-8 formatet. Et dataord består som sagt af 16 tegn. Halvdelen af disse tegn bruges til information om den observation, der er indeholdt i dataordet. Dette kan være kodeinformation og angivelse af enheden for observationen. De resterende otte tegn er forbeholdt selve observationen, for eksempel en målt vinkel, se figur B3.1. Opmålingssystemet udvikles til at kunne håndtere observationer indsamlet i GSI-8 formatet, da den totalstation, der er til rådighed, benytter dette format. Rækkefølgen i den enkelte datablok spiller også en væsentlig rolle. Opmålingssystemet udvikles til at hente observationerne på nogle specifikke pladser. Rækkefølgen på datablokken er som visualiseret på figur B3.1 [Leica, 1999, s ]. 3 Datablokke Forklaring til de 3 datablokke: 11: Punktnummeret (inklusiv bloknummer) 21: Horisontalretning (hz) 22: Vertikalvinkel (V) 31: Skrå afstand 51: Konstanter (ppm, mm) 87: Prismehøjde 71: Kode Dataord i GSI-8 format: Forklaring til et enkelt dataord: Ordidentifikation: Hz Ekstra info om data Enhed: gon Data 21: Denne værdi betyder, at der er tale om en horisontalretning. : Kan anvendes ved digitalt nivellerinstrument 32: Ekstra information om vinkler 2: Enhed. Her er der tale om gon : Dette er observationen, Hz gon Figur B3.1: Øverst i figuren er der vist et uddrag af en GSI-8 fil, som indeholder 3 datablokke bestående af hver syv dataord. Nedenunder beskrives opbygningen af et enkelt dataord. 1

122 Bilag 4 Beskrivelse af VRML Formålet med dette bilag er at give en kort præsentation af programmeringssproget, VRML. Først beskrives hvad VRML består af og hvilke elementer, der indgår. Slutteligt gennemgås et eksempel på en VRML-fil. VRML står for Virtual Reality Modeling Language, som er en form for 3D-HTML. Ideelt set er VRML et tredimensionalt univers, som der kan interageres med. Det vil sige, at programmøren har mulighed for at fylde den virtuelle verden ud med eksempelvis biler, byer, bjerge eller mennesker. Det er sådan set kun ens fantasi, som sætter begrænsningerne. Når denne verden er blevet konstrueret har brugeren så mulighed for at bevæge sig rundt i den. I 1995 udviklede Mark Pesce og Tony Parisi de første specifikationer for VRML version 1.0. To år efter kom den version, som kendes i dag, VRML version 2.0. Forskellen mellem de to versioner er overordnet tre ting. I VRML 2.0 er det muligt at lægge lyd på filen, at strukturere filen objektorienteret, og det er muligt at lave de programmerede figurerne interaktive, hvilket vil sige, at det er muligt at få figurerne til at bevæge sig rundt i universet. Eksempelvis kunne det være et stempel, som kører op og ned. Med disse forbedringer er det blevet forholdsvis nemt at generere en 3D-model. [ ] For at kunne læse en VRML-fil kræves en viewer, der eventuelt kan downloades fra Internettet. Der findes mange forskellige viewere. To meget anvendte er CosmoPlayer og Cortzona, som begge kan downloades. Viewerne kan åbnes enten selvstændigt, eller i forbindelse med en Internet browser, hvilket de normalt bliver. Grunden til de normalt åbnes i en browser er at programmeringssproget henvender sig til Internettet. Mange hjemmesider gør brug af VRML, når brugeren skal have en fornemmelse af selv at være tilstede, idet brugeren lukkes ind i et 3 dimensionelt univers. [ ] [ ] VRML-sproget er frit tilgængeligt og skrives i ASCII-formatet. Det vil sige, at der kan bruges en almindelig teksteditor til at skrive koden. Programmeringen foregår i et 3D-højrehåndskoordinatsystem, jf. figur B4.1. I dette univers er det muligt at indsætte objekter og give dem forskellige egenskaber. For eksempel kan et objekt bestå af polygoner, cylindre og cirkler. Disse objekter kan endvidere skaleres og roteres. Egenskaberne kan være at fastsætte lysretninger, skygger, materialer eller texture mapping. I texture mapping klistres et billede eller video på en given overflade for, at fladen skal se virkelig ud eller give den liv. [ ] x z Figur B4.1: Et højrehåndskoordinatsystem. y 1

123 Bilag 4 I figur B4.2 gennemgåes et eksempel på hvorledes et VRML fil kan udformes. Fortæller, hvilken version af VRML, der er tale om. #VRML V2.0 utf8 Transform { children [ NavigationInfo { headlight FALSE } DirectionalLight { direction } ] } Beskriver, at der er tale om et objekt. Transform { translation rotation children [ Shape { geometry box{size } appearance Appearance { material Material { diffusecolor } } } ] } Her sættes der en ny værdi for lysvinklen. Eksempelvis kunne den komme fra nordvest. Her transformeres det kommende objekt til koordinaterne (0,0.1,1). Ligeledes roteres objektet omkring y med værdien 1. Beskriver at der er tale om et nyt objekt inde i det andet objekt. Her defineres målene på objektet. I dette tilfælde er der tale om en kasse. Her defineres, at kassen skal være synlig. Her tildeles kassen farven blå. Her afsluttes scriptet Figur B4.2: Et eksempel på hvorledes en kasse konstrueres i VRML. [ ] Hvis det ovenstående eksempel visualiseres i en VRML-viewer fås nedenstående billede, jf. figur B4.3. Det er her muligt at bevæge sig rundt i universet. Kassen er visualiseret i CosmoPlayer som også anvendes i DANRUM. Figur B4.3: Et skærmbillede af det ovenstående script vist i CosmoPlayer. 2

124 Bilag 4 Denne form for visualisering anvendes i mange forskellige sammenhænge. Modellen er forholdsvis let at fremstille, idet der ikke behøves en omfattende mængde kode. Et godt eksempel på, hvad der kan fremstilles, er en forhistorisk by. Her vil det så være muligt at gå inde imellem husene og dermed opleve en form for tilstedeværelse. Ligeledes anvendes VRML-formatet også hos arkitekter, da det er muligt at visualisere bygningerne, inden de forlader tegnebrættet. [Pomaska, Foredrag, ] 3

125 Bilag 5 Procesbeskrivelser Bemærkninger: I kapitel 7 Systemanalyse er der, for hver gruppe af processer udarbejdet niveau 2-diagrammer. Eksempelvis for processerne Ord med kursiv er navne på datastrømme, som kan findes i dataordbogen, jf. bilag 6. Procesnr. 1.1 Procesnavn: Konvertering af GSI-8 fil indlæser Rådata fra GSI-8 fil oversætter Rådata til Observationer Procesnr. 1.2 Procesnavn: Visualisering af observationer visualiserer Observationer på brugergrænsefladen visualiserer yderligere de Redigerede observationer Procesnr. 1.3 Procesnavn: Rediger kode giver mulighed for at kunne redigere i en Kode til et punkt Koden ændres efterfølgende i Proces 1.2 Procesnr. 1.4 Procesnavn: Slet observation giver mulighed for at kunne slette en observation i Proces 1.2 Procesnr. 1.5 Procesnavn: Slet alle observationer giver mulighed for at slette hele filen med Rådata, hvis en forkert er indlæst Procesnr. 2.1 Procesnavn: Beregning af 3D-koordinater først tilføjes de Redigerede observationer i Proces 5.1 derefter beregnes 3D-koordinater udfra de Redigerede observationer til alle punkter 1

126 Bilag 5 Procesnr. 2.2 Procesnavn: Indtast koordinater til opstillingspunkt inden beregning af 3D-koordinater foretages, skal 3D-koordinater til opstillingspunktet indtastes Procesnr. 2.3 Procesnavn: Visualisering af 3D-koordinater viser 3D-koordinater i en tabel på brugergrænsefladen tilføjer 3D-koordinater i Proces 5.1 Procesnr. 3.1 Procesnavn: Beregn foreløbige fladeparametre tager 3D-koordinaterne til de første punkter fra hver flade og beregner Foreløbige parametre Procesnr. 3.2 Procesnavn: Indtast apriori spredning her indtastes apriori spredningen for fladeudjævningen. Procesnr. 3.3 Procesnavn: Udjævning af flader her udjævnes hver flade med det antal punkter, der er målt til fladerne resultatet er en Fladeparametre for hver flade Procesnr. 3.4 Procesnavn: Visualisering af resultater viser Residualerne for hvert punkt i fladen og Spredningen på vægtenheden til hver enkelt flade. Residualer, der overskrider fejlgrænsen, markeres Procesnr. 3.5 Procesnavn: Rediger og genberegn flader giver mulighed for at udelade punkter i fladeberegningen derefter genberegnes den ændrede flade Procesnr. 4.1 Procesnavn: Beregn skæringpunkter mellem flader Fladeparametre tilføjes i Proces 5.1 Fladerne skæres i sæt af tre for at bestemme hjørnepunkterne i rummet. Fladeparametre for de tre flader, der parvis danner hvert hjørnepunkt, skæres for at bestemme Hjørnekoordinaterne til rummets hjørner 2

127 Bilag 5 Procesnr. 5.1 Procesnavn: Dan resultatfil modtager Redigerede observationer, 3D-koordinater, Fladeparametre, Nøjagtighed for flader og Nøjagtighed for hjørnekoordinater, som skrives til en tekstfil Procesnr. 6.1 Procesnavn: Dannelse af VRML-model Hjørnepunkterne indlæses i skabelonen for VRML-filen VRML-filen kan eksporteres til en tekstfil, så denne kan importeres i en vilkårlig 3D-viewer, som kan læse VRML-formatet Procesnr. 6.2 Procesnavn: Indlæsning af VRML-fil i 3D-viewer VRML-filen indlæses i 3D-viewer 3D-model visualiseres i 3D-viewer og det er muligt at bevæge sig rundt i 3D-modellen Procesnr. 7.1 Procesnavn: Dannelse af DXF-fil skriver Hjørnepunkter ind i skabelon til DXF-fil DXF-filen eksporteres, så den kan importeres i et CAD-program 3

128 Dataordbog Bilag 6 Til dataordbogen hører en bestemt symbolik. Dette er f.eks.: = læses som "er" + læses som "og" * Stjernen angiver, at der er tale om et dataelement. Dette betyder, at data ikke kan deles yderligere op. Rådata = GSI-8 fil * GSI-8 fil = en tekstfil med alle observationer til de indmålte punkter i GSI-8 formatet Tekst, længde maksimum 128 tegn pr. linie. Observationer = Kode + Horisontalvinkel + Vertikalvinkel + Afstand * Kode = koden til et punkt kodetabellen Heltal, længde 2 karakterer * Horisontalvinkel = horisontalvinklen til et punkt Reelt tal, længde 8 karakterer * Vertikalvinkel = vertikalvinklen til et punkt Reelt tal, længde 8 karakterer * Afstand = afstanden til et punkt Reelt tal, længde 8 karakterer Bruger input = Rediger kode * Rediger kode = ændrer kode til et valgt punkt Heltal, længde 2 karakterer Redigerede observationer = Kode + Horisontalvinkel + Vertikalvinkel + Afstand 3D-koordinater = x + y + z * x = x-koordinaten til et punkt Reelt tal, længde 8 karakterer * y = y-koordinaten til et punkt Reelt tal, længde 8 karakterer * z = z-koordinaten til et punkt Reelt tal, længde 8 karakterer 1

129 Bilag 6 Foreløbige fladeparametre = a 0 + b 0 + c 0 * a 0 = foreløbig værdi for fladeparameter a Reelt tal, længde 8 karakterer * b 0 = foreløbig værdi for fladeparameter b Reelt tal, længde 8 karakterer * c 0 = foreløbig værdi for fladeparameter c Reelt tal, længde 8 karakterer Fladeparametre = a + b + c * a = værdi for fladeparameter a Reelt tal, længde 8 karakterer * b = værdi for fladeparameter b Reelt tal, længde 8 karakterer * c = værdi for fladeparameter c Reelt tal, længde 8 karakterer Nøjagtighed for flader = Residualer + Kovariansmatrice for flader * Residualer = residualerne til hvert punkt i forhold til den udjævnede flade Reelt tal, længde 8 karakterer Kovariansmatrice for flader = Varians + Kovarians, til fladeparametrene til hver flade * Varians = variansen til et element Reelt tal, længde 8 karakterer * Kovarians = den korrelerede varians til et element Reelt tal, længde 8 karakterer Hjørnepunkter = x + y + z Nøjagtighed for hjørnepunkter = Kovariansmatrice for hjørner Kovariansmatrice for hjørnepunkter = Varians + Kovarians, til hvert hjørnepunkt 3D-model = Hjørnepunkter + VRML-fil * VRML-fil = en tekstfil i VRML-formatet, hvor hjørnepunkterne er variable Tekst, definitionen af VRML-formatet DXF-fil = Hjørnepunkter + DXF-tekst * DXF-tekst = skabelon af DXF-fil, hvor hjørnepunkterne er variable Tekst, definitionen af DXF-formatet 2

130 Bilag 6 Resultatfil = Redigerede observationer + 3D-koordinater + Residualer + Hjørnepunkter +Nøjagtighed for flader + Nøjagtighed for hjørnepunkter 3

131 Bilag 7 Kildekode til DANRUM Dette bilag indeholder kildekoden til DANRUM. Kildekoden er opdelt i tre afsnit Form 1, Matrix og Flade. Form 1 er selve programmet og denne kode danner brugergrænseflader, knapper og så videre. Matrix er klassemodul for matricer, og her er egenskaber og procedurer, for matriceregning defineret. Flade er et klassemodul for objekttypen Flader. Her defineres egenskaber og procedurer for flader. Form 1 Option Explicit Dim AntalObs As Integer Dim obs() As Double, koor() As Double, tempkoor() As Double ' 2D Arrays med obs og koor Dim y As String, x As String, InstHoejde As String ' Værdier til definiton af koor.system Dim GrænseVærdi As Single Dim FladeNr(1 To 6) As New Flade Dim hjørnekoor(1 To 4, 1 To 8) As Double 2d Array med hjørnekoordinater Private Sub Form_Load() ' Sørger for, at en tom CosmoPlayer visualiseres Dim FilNavn As String FilNavn = "C:\opstart.wrl" Open FilNavn For Output As #1 Print #1, "#VRML V2.0 utf8" Print #1, "#VRML-viewer er ikke installeret" Close #1 WebBrowser1.Navigate FilNavn End Sub Private Sub cmdrydfelter_click() ' Rydder alle felter i brugergrænseflade FlexGrid.Clear FlexGrid.Rows = 0 FlexGrid.Cols = 0 ' Alle tabeller ryddes FlxGridKoor.Clear FlxGridKoor.Rows = 0 FlxGridKoor.Cols = 0 UdjGrid.Clear UdjGrid.Rows = 0 UdjGrid.Cols = 0 txtxkoor.text = "" ' Alle tekstbokse ryddes txtykoor.text = "" txtinsthoejde.text = "" txtjournr.text = "" txtadresse.text = "" txtgsifil.text = "" txtvrmlfil.text = "" txtresfil.text = "" txtgrænseværdi.text = "" WebBrowser1.Navigate "C:\opstart.wrl" ' CosmoPlayer ryddes End Sub 1

132 Bilag 7 Private Sub cmdindlaesraa_click() ' Indlæser obs fra GSI-fil On Error GoTo cancelvalgt ' I tilfælde af fejl springes til slutning af procedure Dim DataID As Integer, data1 As Integer, data2 As Double, data3 As Double, _ data4 As Double, Raadata() As String CommonDialog1.ShowOpen ' Bruger bedes udpege GSI-fil til indlæsning Open CommonDialog1.FileName For Input As #1 ' Filen åbnes Do While EOF(1) = False ' Data fra fil hentes over i Raadata-arry DataID = DataID + 1 ReDim Preserve Raadata(DataID) Line Input #1, Raadata(DataID) Loop Close #1 txtgsifil.text = CommonDialog1.FileName 'Filens stinavn skrive ud i tekstboks AntalObs = DataID FlexGrid.Rows = DataID + 1 FlexGrid.Cols = 4 FlexGrid.Clear 'Tabellen dimensioneres FlexGrid.ColHeaderCaption(0, 0) = "Punktnr." ' Kolonneoverskrifter FlexGrid.ColHeaderCaption(0, 1) = "Horisontalvinkel" FlexGrid.ColHeaderCaption(0, 2) = "Vertikalvinkel" FlexGrid.ColHeaderCaption(0, 3) = "Afstand" For DataID = 1 To DataID data1 = Mid(Raadata(DataID), 110, 2) ' Indlæser punktnummer fra gsi8 til obs data2 = Mid(Raadata(DataID), 24, 8) / ' Oversætter Hz fra gsi8 til obs data3 = Mid(Raadata(DataID), 40, 8) / ' Oversætter v fra gsi8 til obs data4 = Mid(Raadata(DataID), 56, 8) / 1000 ' Oversætter s fra gsi8 til obs FlexGrid.Row = DataID ' Angiver hvilken række observationerne skal skrives i FlexGrid.Col = 0 ' Angiver hvilken kolonne den enkelte observation skal skrives i FlexGrid.Text = data1 FlexGrid.Col = 1 FlexGrid.Text = data2 FlexGrid.Col = 2 FlexGrid.Text = data3 FlexGrid.Col = 3 FlexGrid.Text = data4 FlexGrid.ColWidth(DataID) = 1290 ' Kolonnebredden defineres Next DataID cancelvalgt: ' I tilfælde af fejl springes der til dette sted i proceduren End Sub Sub FlexGrid_DblClick() Dim temp As String ' Procedure, der gør det muligt at dobbeltklikke på observation og ' redigere den i Obs-tabel temp = FlexGrid.Text FlexGrid.Text = InputBox("Indtast ny værdi", " Ændringer til observationer", _ FlexGrid.Text) If FlexGrid.Text = "" Then FlexGrid.Text = temp End Sub Private Sub cmdsletrække_click() ' Indledende procedure til sletning af række i obs-tabel FlexGrid.SelectionMode = flexselectionbyrow MsgBox "Markér punkt der skal slettes",, "Redigering" End Sub 2

133 Bilag 7 Private Sub FlexGrid_Click() 'Procedure til sletning af obs Dim i As Integer, valg As Integer If FlexGrid.SelectionMode = flexselectionbyrow Then i = FlexGrid.Row valg = MsgBox("Vil du slette punkt " & FlexGrid.Text & "", vbokcancel, "Redigering") If valg = 1 Then FlexGrid.RemoveItem i - 1 AntalObs = AntalObs - 1 End If FlexGrid.SelectionMode = flexselectionfree End If End Sub Private Sub cmdindlæstestkoor_click() ' Indlæser koor fra koordinatfil On Error GoTo cancelvalgt Dim DataID As Integer Dim data1 As Integer, data2 As Double, data3 As Double, data4 As Double Dim TestKoor() As String DataID = 0 CommonDialog2.ShowOpen ' Bruger bedes specificere test-fil til indlæsning Open CommonDialog2.FileName For Input As #1 'Filen åbnes Do While EOF(1) = False DataID = DataID + 1 ReDim Preserve TestKoor(DataID) Line Input #1, TestKoor(DataID) Loop Close #1 AntalObs = DataID txtgsifil.text = CommonDialog2.FileName 'Filens stinavn skrives ud i tekstboks FlxGridKoor.Rows = DataID + 1 FlxGridKoor.Cols = 4 FlxGridKoor.Clear FlxGridKoor.ColHeaderCaption(0, 0) = "Punktnr." ' Kolonneoverskrifter FlxGridKoor.ColHeaderCaption(0, 1) = "X-koordinat" FlxGridKoor.ColHeaderCaption(0, 2) = "Y-koordinat" FlxGridKoor.ColHeaderCaption(0, 3) = "Z-koordinat" For DataID = 1 To AntalObs data1 = Mid(TestKoor(DataID), 1, 2) ' Indlæser punktnummer fra Test-fil data2 = Mid(TestKoor(DataID), 4, 5) / 1000 ' Indlæser X-koordinat fra Test-fil data3 = Mid(TestKoor(DataID), 10, 5) / 1000 ' Indlæser Y-koordinat fra Test-fil data4 = Mid(TestKoor(DataID), 16, 5) / 1000 ' Indlæser Z-koordinat fra Test-fil FlxGridKoor.Row = DataID ' Angiver hvilken række koordinaterne skal skrives i FlxGridKoor.Col = 0 ' Angiver hvilken kolonne punktnummeret skal skrives i FlxGridKoor.Text = data1 FlxGridKoor.Col = 1 ' Angiver hvilken kolonne X-koordinaten skal skrives i FlxGridKoor.Text = data2 FlxGridKoor.Col = 2 'Angiver hvilken kolonne Y-koordinaten skal skrives i FlxGridKoor.Text = data3 FlxGridKoor.Col = 3 'Angiver hvilken kolonne Z-koordinaten skal skrives i FlxGridKoor.Text = data4 FlxGridKoor.ColWidth(DataID) = 1290 ' Definerer kolonnebredde ReDim Preserve koor(1 To 4, 1 To DataID) ' Udvider arrayet med en enkelt række 3

134 Bilag 7 koor(1, DataID) = data1 koor(2, DataID) = data2 koor(3, DataID) = data3 koor(4, DataID) = data4 Next DataID ' Skriver testkoordinater i Koor array cancelvalgt: End Sub Private Sub cmdberegnkoor_click() 'Omregner observationerne til koordinater On Error GoTo cancelvalgt Dim DataID As Integer Dim VRad As Double, zny As Double, sv As Double, hzrad As Double, xny As Double, yny As Double x = InputBox("Indtast X-koordinat:", " Koordinater til opstillingspunkt", "10") If x = "" Then GoTo cancelvalgt y = InputBox("Indtast Y-Koordinat:", " Koordinater til opstillingspunkt", "10") If y = "" Then GoTo cancelvalgt InstHoejde = InputBox("Indtast Instrumenthøjde:", " Instrumenthøjde til opstillingspunkt", "2") If InstHoejde = "" Then GoTo cancelvalgt txtxkoor.text = x ' Skriver X-koor til opstillingspunkt i tekstboks txtykoor.text = y ' Skriver Y-koor til opstillingspunkt i tekstboks txtinsthoejde.text = InstHoejde ' Skriver Insthøjde til opstillingspunkt i tekstboks FlxGridKoor.Rows = AntalObs + 1 ' Definerer antallet ar rækker i Tabel jf. værdien af DataID FlxGridKoor.Cols = 4 ' Definerer antallet af kolonner i Tabel FlxGridKoor.Clear ' Nulstiller Tabel FlxGridKoor.ColHeaderCaption(0, 0) = "Punktnr." FlxGridKoor.ColHeaderCaption(0, 1) = "X-koordinat" FlxGridKoor.ColHeaderCaption(0, 2) = "Y-koordinat" FlxGridKoor.ColHeaderCaption(0, 3) = "Z-koordinat" FlxGridKoor.ColWidth(0) = 950 ' Definerer kolonnebredde FlxGridKoor.ColWidth(1) = 1290 FlxGridKoor.ColWidth(2) = 1290 FlxGridKoor.ColWidth(3) = 1290 ReDim obs(1 To 4, 1 To AntalObs) For DataID = 1 To AntalObs ' Skriver redigerede observationer fra tabel i Obs array FlexGrid.Col = 0 FlexGrid.Row = DataID obs(1, DataID) = FlexGrid.Text FlexGrid.Col = 1 FlexGrid.Row = DataID obs(2, DataID) = FlexGrid.Text FlexGrid.Col = 2 FlexGrid.Row = DataID obs(3, DataID) = FlexGrid.Text FlexGrid.Col = 3 FlexGrid.Row = DataID obs(4, DataID) = FlexGrid.Text Next ' Beregner x, y og z koordinater udfra en opstilling i kendt punkt For DataID = 1 To AntalObs VRad = (obs(3, DataID)) * ( / 200) ' Omregner V til radianer zny = InstHoejde + (obs(4, DataID)) * Cos(VRad) ' Beregner Z-koordinat til nyt punkt sv = Sin(VRad) * (obs(4, DataID)) ' Beregner den vandrette afstand ud fra skråafstand og ' vertikalvinkel 4

135 Bilag 7 hzrad = (obs(2, DataID)) * ( / 200) ' Omregner Hz til radianer xny = x + Sin(hzRad) * sv ' Beregner X-koordinat til nyt punkt yny = y + Cos(hzRad) * sv ' Beregner Y-koordinat til nyt punkt FlxGridKoor.Row = DataID ' Angiver hvilken række observationerne skal skrives i FlxGridKoor.Col = 0 ' Angiver hvilken kolonne den enkelte observation skal skrives i FlxGridKoor.Text = obs(1, DataID) FlxGridKoor.Col = 1 ' Angiver hvilken kolonne den enkelte observation skal skrives i FlxGridKoor.Text = Round(xNy, 3) FlxGridKoor.Col = 2 'Angiver hvilken kolonne den enkelte observation skal skrives i FlxGridKoor.Text = Round(yNy, 3) FlxGridKoor.Col = 3 'Angiver hvilken kolonne den enkelte observation skal skrives i FlxGridKoor.Text = Round(zny, 3) ReDim Preserve koor(1 To 4, 1 To DataID) koor(1, DataID) = obs(1, DataID) ' Skriver beregnede koordinater i Koor array koor(2, DataID) = xny koor(3, DataID) = yny koor(4, DataID) = zny Next cancelvalgt: End Sub Private Sub cmdberegnflader_click() ' Opstiller fladerne og beregner fladeparametrene On Error GoTo cancelvalgt Dim f As Integer, r As Integer, k As Integer, AntalFlader As Integer, _ maxantalpkt As Integer, pktspredningimm As Double, pktspredningimmtxt As String pktspredningimmtxt = InputBox("Indtast a priori spredning i mm", "A priori spredning", "10") If pktspredningimmtxt = "" Then GoTo cancelvalgt pktspredningimm = CDbl(pktspredningimmTxt) AntalFlader = 6 txtgrænseværdi = "" & GrænseVærdi & " mm" 'Koordinaterne deles ud på fladerne For f = 1 To AntalFlader FladeNr(f).AntalPktPåFlade = 0 ' nulstiller AntalPktPåFlade For r = 1 To UBound(koor, 2) If koor(1, r) > f * 10 And koor(1, r) < (f + 1) * 10 Then FladeNr(f).KoorTilFlade koor(1, r), koor(2, r), koor(3, r), koor(4, r) End If Next r Next f 'Beregning af foreløbige værdier og udjævning af flader For f = 1 To AntalFlader If FladeNr(f).AntalPktPåFlade < 3 Then MsgBox "Der er ikke tre observationer til flade nr. " & f & " ",, "OBS!" Exit Sub End If FladeNr(f).BeregnForeløbigeVærdier f If pktspredningimm <> 0 Then FladeNr(f).UdjævnFlade pktspredningimm End If Next f For r = 1 To AntalFlader If FladeNr(r).AntalPktPåFlade > maxantalpkt Then ' Undersøger den flade med flest punkter maxantalpkt = FladeNr(r).AntalPktPåFlade End If Next r 5

136 Bilag 7 If pktspredningimm <> 0 Then UdjGrid.Rows = AntalFlader + 1 UdjGrid.Cols = maxantalpkt + 2 UdjGrid.Clear ' Danner tabel til udjævende flader UdjGrid.ColHeaderCaption(0, 0) = "Flade nr." ' Kolonneoverskrifter For k = 1 To maxantalpkt UdjGrid.ColHeaderCaption(0, k) = "Pkt. " & k Next k UdjGrid.ColHeaderCaption(0, maxantalpkt + 1) = "SPVE" For r = 1 To 6 UdjGrid.Row = r ' Angiver hvilken række residualet skal skrives i UdjGrid.Col = 0 ' Angiver hvilken kolonne den enkelte residual skal skrives i UdjGrid.ColWidth(0) = 700 ' Definerer kolonnebredde UdjGrid.Text = r For k = 1 To FladeNr(r).AntalPktPåFlade UdjGrid.Col = k UdjGrid.Text = Round(FladeNr(r).Residual(k), 3) If Round(FladeNr(r).Residual(k), 3) > GrænseVærdi / 1000 Then UdjGrid.CellBackColor = vbyellow ' tilskriver farven gul til alle værdier der ' er forskellig fra 0 UdjGrid.CellFontBold = True End If UdjGrid.ColWidth(k) = 700 Next k UdjGrid.Col = maxantalpkt + 1 UdjGrid.ColWidth(maxantalpkt + 1) = 800 UdjGrid.Text = Round(FladeNr(r).SprdnPåVægtEnh, 5) Next r End If cancelvalgt: End Sub Private Sub cmdundladpkt_click() 'Punkt dækkes med sort eller bliver igen synligt On Error GoTo cancelvalgt If UdjGrid.CellBackColor <> 1 Then UdjGrid.CellBackColor = 1 ElseIf UdjGrid.CellFontBold = True Then UdjGrid.CellBackColor = vbyellow Else UdjGrid.CellBackColor = ' tilskriver farven gennemsigtig End If cancelvalgt: End Sub Private Sub cmdgenberegnflader_click() ' Genberegner udjævningen ud fra nogle nye kriterier On Error GoTo cancelvalgt Dim f As Integer, AntalFlader As Integer, r As Integer, k As Integer, _ j As Integer, x As Integer, maxantalpkt As Integer, pktspredningimm As Double Dim pktspredningimmtxt As String pktspredningimmtxt = InputBox("Indtast a priori spredning i mm", "A priori spredning", "3") If pktspredningimmtxt = "" Then GoTo cancelvalgt pktspredningimm = CDbl(pktspredningimmTxt) AntalFlader = 6 maxantalpkt = UBound(koor, 2) / AntalFlader txtgrænseværdi = "" & GrænseVærdi & " mm" 6

137 Bilag 7 'Oprettelse af tempkoor For r = 1 To 6 For k = 1 To UdjGrid.Cols - 2 UdjGrid.Col = k UdjGrid.Row = r If UdjGrid.CellBackColor <> 1 And UdjGrid.Text <> "" Then x = x + 1 ReDim Preserve tempkoor(1 To 4, 1 To x) For j = 1 To 4 tempkoor(j, x) = FladeNr(r).KoorFraFlade(k, j) Next j End If Next k Next r 'Opdeling af koordinater i flader For f = 1 To AntalFlader FladeNr(f).AntalPktPåFlade = 0 For r = 1 To UBound(tempkoor, 2) If tempkoor(1, r) <> 0 Then If tempkoor(1, r) > f * 10 And tempkoor(1, r) < (f + 1) * 10 Then FladeNr(f).KoorTilFlade tempkoor(1, r), tempkoor(2, r), tempkoor(3, r), tempkoor(4, r) End If End If Next r Next f 'Beregning af foreløbige værdier og udjævning af flader For f = 1 To AntalFlader If FladeNr(f).AntalPktPåFlade < 3 Then MsgBox "Der er ikke tre observationer til flade nr. " & f & " ",, "OBS!" Exit Sub End If FladeNr(f).BeregnForeløbigeVærdier f If pktspredningimm <> 0 Then FladeNr(f).UdjævnFlade pktspredningimm End If Next f For r = 1 To AntalFlader If FladeNr(r).AntalPktPåFlade > maxantalpkt Then maxantalpkt = FladeNr(r).AntalPktPåFlade End If Next r If pktspredningimm <> 0 Then UdjGrid.Rows = AntalFlader + 1 UdjGrid.Cols = maxantalpkt + 2 UdjGrid.Clear UdjGrid.ColHeaderCaption(0, 0) = "Flade nr." For k = 1 To maxantalpkt UdjGrid.ColHeaderCaption(0, k) = "Pkt. " & k Next k UdjGrid.ColHeaderCaption(0, maxantalpkt + 1) = "SPVE" For r = 1 To 6 UdjGrid.Row = r ' Angiver hvilken række residualerne skal skrives i UdjGrid.Col = 0 ' Angiver hvilken kolonne det enkelte residual skal skrives i UdjGrid.ColWidth(0) = 700 ' Definerer kolonnebredde UdjGrid.Text = r For k = 1 To FladeNr(r).AntalPktPåFlade 7

138 Bilag 7 UdjGrid.Col = k UdjGrid.Text = Round(FladeNr(r).Residual(k), 3) If Round(FladeNr(r).Residual(k), 3) > GrænseVærdi / 1000 Then UdjGrid.CellBackColor = vbyellow UdjGrid.CellFontBold = True End If UdjGrid.ColWidth(k) = 700 Next k UdjGrid.Col = maxantalpkt + 1 UdjGrid.ColWidth(maxantalpkt + 1) = 800 UdjGrid.Text = Round(FladeNr(r).SprdnPåVægtEnh, 5) Next r End If cancelvalgt: End Sub Private Sub txtgrænseværdi_change() 'Mulighed for at indsætte en grænseværdi i udjævningen GrænseVærdi = CSng(Val(txtGrænseVærdi.Text)) ' Konverter til string End Sub Private Sub txtbemærk_click() ' Mulighed for at lave en bemærkning til resultatfilen If txtbemærk.text = "Eventuelle bemærkninger" Then txtbemærk.text = "" End If End Sub Private Sub cmdmakeresfil_click() ' Opretter resultatfil Dim Linie As Integer, DataID As Integer, i As Integer CommonDialog2.ShowSave Open CommonDialog2.FileName For Output As #2 ' Åbner resultatfil Print #2, "RESULTATFIL FOR OPMÅLING AF RUM Dato: " & Now Print #2, "" Print #2, "Journalnummer: "; txtjournr.text 'Tilskriver værdien fra Jounalnr. boksen Print #2, "" Print #2, "Adresse: "; txtadresse.text 'Tilskriver værdien fra adresse boksen Print #2, "" If txtbemærk.text = "Eventuelle bemærkninger" Then txtbemærk.text = "" End If Print #2, "Eventuelle bemærkninger: "; txtbemærk.text Print #2, "" If FlexGrid.Rows <> 0 Then Print #2, "Punktnr Hz V s" Print #2, " gon gon m" For Linie = 1 To AntalObs ' Skriver observationer i resultatfil Print #2, obs(1, Linie), obs(2, Linie), obs(3, Linie), obs(4, Linie) 'Skriver til fil Next Linie End If Print #2, "" If FlxGridKoor.Rows <> 0 Then Print #2, "Koordinater til Opstillingspunkt: " Print #2, "" Print #2, "X-koordinat til opstillingspunkt = " & x Print #2, "Y-koordinat til opstillingspunkt = " & y Print #2, "Instrumenthøjde til opstillingspunkt = " & InstHoejde Print #2, "" 8

139 Bilag 7 Print #2, "Beregnede koordinater til indmålte punkter: " Print #2, "" Print #2, "Punktnr X-koor Y-koor Z-koor" Print #2, " m m m" For Linie = 1 To AntalObs ' Skriver koordinater i resultatfil Print #2, koor(1, Linie), koor(2, Linie), koor(3, Linie), koor(4, Linie) 'Skriver til fil Next Linie End If Print #2, "" Print #2, "" If FladeNr(1).AntalPktPåFlade <> 0 Then Print #2, "Fladeligninger" Print #2, "" For i = 1 To 6 Print #2, "Flade " & i & ": " & FladeNr(i).SkrivUd Next i Print #2, "" Print #2, "" Print #2, "Residualer" Print #2, "" For i = 1 To 6 Print #2, "Flade " & i & ": " Print #2, "" & FladeNr(i).SkrivResidualer & " " Next i Print #2, "" Print #2, "" Print #2, "A Posteriori Kovariansmatricer (apostvarifaktor*n^-1)" Print #2, "" For i = 1 To 6 Print #2, FladeNr(i).AposterioriKovariansMatrix.SkrivUd Next i End If Print #2, "" Print #2, "" Print #2, "Hjørnekoordinater" Print #2, "" For i = 1 To 8 Print #2, "Hjørne " & i & ": " & hjørnekoor(2, i) & " " & hjørnekoor(3, i) & " " & hjørnekoor(4, i) Next Close #2 ' Luk fil cancelvalgt: End Sub txtresfil.text = CommonDialog2.FileName ' Viser hvor brugeren har gemt resultatfilen Private Sub Vis_VRML_model_Click() ' Beregner først hjørnekoordinaterne. Dernæst skrives en ' VRML fil, som tilsidst visualiseres On Error GoTo cancelvalgt ' 3D-hjørnekoordinaterne beregnes Dim hjørne(1 To 8) As New Matrix Dim i As Integer, k As Integer, j As Integer For i = 1 To 8 hjørne(i).sætstr 3, 4 hjørne(i).sætværdi 1, 1, FladeNr(i \ 5 + 1).Parameter(1) hjørne(i).sætværdi 1, 2, FladeNr(i \ 5 + 1).Parameter(2) hjørne(i).sætværdi 1, 3, -1 9

140 Bilag 7 hjørne(i).sætværdi 1, 4, -1 * FladeNr(i \ 5 + 1).Parameter(3) If i <> 4 And i <> 8 Then For k = 1 To 2 hjørne(i).sætværdi k + 1, 1, FladeNr((i + 2) Mod 3 + k + 2).Parameter(1) hjørne(i).sætværdi k + 1, 2, FladeNr((i + 2) Mod 3 + k + 2).Parameter(2) hjørne(i).sætværdi k + 1, 3, -1 hjørne(i).sætværdi k + 1, 4, -1 * FladeNr((i + 2) Mod 3 + k + 2).Parameter(3) Next k Else For k = 1 To 2 hjørne(i).sætværdi k + 1, 1, FladeNr(k * 3).Parameter(1) hjørne(i).sætværdi k + 1, 2, FladeNr(k * 3).Parameter(2) hjørne(i).sætværdi k + 1, 3, -1 hjørne(i).sætværdi k + 1, 4, -1 * FladeNr(k * 3).Parameter(3) Next k End If hjørne(i).rækkereducer hjørnekoor(1, i) = i For k = 1 To 3 hjørnekoor(k + 1, i) = hjørne(i).matrixværdi(k, 4) Next k Next i '3D-hjørnekoordinaterne sættes ind i VRML-filen og modellen visualiseres Dim FilNavn As String Dim hjørneasstring(2 To 4, 1 To 8) As String For i = 1 To 8 For k = 2 To 4 hjørneasstring(k, i) = Str(hjørnekoor(k, i)) Next k Next i CommonDialog3.ShowSave txtvrmlfil.text = CommonDialog3.FileName Open CommonDialog3.FileName For Output As #1 ' Åbner VRML-fil for Input Print #1, "#VRML V2.0 utf8" Print #1, "Transform {" Print #1, " children [" Print #1, " Transform {" Print #1, " translation " Print #1, " children ["; Print #1, "Shape {" Print #1, "appearance Appearance {" Print #1, " material Material { diffusecolor }" Print #1, " }" Print #1, " geometry IndexedFaceSet {" Print #1, " coordindex [ 0, 1, 2, 3, -1, 4, 7, 6, 5, -1, 0, 4, 5, 1, -1, 2, 6, 7, 3, -1, 3, 7, 4, 0, - 1, 1, 5, 6, 2 ] #bestemmer hvilke punkter der høre til hvad." Print #1, " coord Coordinate {" ' Indsætter hjørnepunkts koordinaterne i VRML-filen Print #1, "point [ "; hjørneasstring(2, 6); " "; hjørneasstring(3, 6); " "; hjørneasstring(4, 6); ", " _ ; hjørneasstring(2, 5); " "; hjørneasstring(3, 5); " "; hjørneasstring(4, 5); ", " _ ; hjørneasstring(2, 7); " "; hjørneasstring(3, 7); " "; hjørneasstring(4, 7); ", " _ ; hjørneasstring(2, 8); " "; hjørneasstring(3, 8); " "; hjørneasstring(4, 8); ", " _ ; hjørneasstring(2, 3); " "; hjørneasstring(3, 3); " "; hjørneasstring(4, 3); ", " _ ; hjørneasstring(2, 2); " "; hjørneasstring(3, 2); " "; hjørneasstring(4, 2); ", " _ ; hjørneasstring(2, 1); " "; hjørneasstring(3, 1); " "; hjørneasstring(4, 1); ", " _ ; hjørneasstring(2, 4); " "; hjørneasstring(3, 4); " "; hjørneasstring(4, 4); " ]" Print #1, " }" Print #1, " texcoord TextureCoordinate {" Print #1, " point [ 0 0, 1 0, 1 0.4, 1 1 ]" 10

141 Bilag 7 Print #1, " }" Print #1, " }" Print #1, "}" Print #1, "]" Print #1, "}" Print #1, "]" Print #1, "}" Close #1 WebBrowser1.Navigate CommonDialog3.FileName cancelvalgt: End Sub Matrix Option Explicit Dim MatrixArray As Variant Dim SFF() As Double Public Property Get AsArray() As Variant 'Laver Array om til Matrix If IsObject(MatrixArray) Then Set AsArray = MatrixArray Else AsArray = MatrixArray End If End Property Public Property Let AsArray(ByVal InputArray As Variant) 'Laver Matrix om til Array MatrixArray = InputArray End Property Public Property Set AsArray(ByVal InputArray As Variant) 'Laver Matrix om til Array Set MatrixArray = InputArray End Property Public Sub SætStr(Rækker As Integer, Kolonner As Integer) 'Størrelsen på matricen defineres ReDim MatrixArray(1 To Kolonner, 1 To Rækker) End Sub Function SkrivUd() 'Procedure, der returnerer værdier i Matrix som tekststreng Dim s As String Dim r As Integer, k As Integer For r = 1 To UBound(MatrixArray, 2) For k = 1 To UBound(MatrixArray, 1) s = "" & s & " " & MatrixArray(k, r) & "" Next k s = "" & s & vbcrlf & "" Next r SkrivUd = s End Function 11

142 Bilag 7 Function ErKvadratisk() 'Procedurer, der returnerer TRUE, hvis Matrix er kvadratisk If UBound(MatrixArray, 1) = UBound(MatrixArray, 2) Then ErKvadratisk = True End If End Function Function Transponeret() As Matrix 'Procedure, der returnerer den transponerede Matrix Dim i As Integer, j As Integer ReDim TransponeretMatrix(1 To UBound(MatrixArray, 2), 1 To UBound(MatrixArray, 1)) As Double Dim m As New Matrix For i = 1 To UBound(MatrixArray, 1) For j = 1 To UBound(MatrixArray, 2) TransponeretMatrix(j, i) = MatrixArray(i, j) Next j Next i m.asarray = TransponeretMatrix Set Transponeret = m End Function Public Sub SætVærdi(Række As Integer, Kolonne As Integer, værdi As Double) 'Procedurer til ind- 'sættelse af værdier i Matrix MatrixArray(Kolonne, Række) = værdi End Sub Function Inverse() As Matrix 'Procedure, der inverterer en Matrix On Error GoTo ErrorHandler: Dim dof2 As Integer dof2 = UBound(MatrixArray, 1) Dim temp As Double, tempa() As Double ReDim Preserve tempa(1 To dof2, 1 To (2 * dof2)) Dim crow As Integer, First As Integer Dim x As Integer, y As Integer, r As Integer, k As Integer ReDim SFF(1 To UBound(MatrixArray, 1), 1 To UBound(MatrixArray, 1) * 2) For r = 1 To UBound(MatrixArray, 1) For k = 1 To UBound(MatrixArray, 1) SFF(r, k) = MatrixArray(k, r) Next k Next r For crow = (dof2 + 1) To (2 * dof2) SFF(x + 1, crow) = 1 x = x + 1 Next For crow = 1 To dof2 'Første pivotindgang må ikke være nul If (SFF(cRow, crow) = 0) Then Call NonZero(cRow, crow, dof2) ' Returnerer den første række uden 0 i pivotindgangen First = NonZero(cRow, crow, dof2) Call ShuffleRow(cRow, First, dof2) 'Bytter om på rækkerne End If 12

143 Bilag 7 'Rækkeoperation for reduceret Echelon Form påbegyndes 'Hele rækken divideres med værdien af pivotindgangen temp = SFF(cRow, crow) For x = crow To (dof2 * 2) SFF(cRow, x) = ((SFF(cRow, x) / temp)) Next 'Regner alle indgange over og under om til nul 'Hvis rækken er den første: If crow = 1 Then For y = 2 To dof2 For x = 1 To (2 * dof2) tempa(y, x) = SFF(1, x) * SFF(y, 1) Next Next For y = 2 To dof2 For x = 1 To (dof2 * 2) SFF(y, x) = SFF(y, x) - tempa(y, x) Next Next Else 'Hvis rækken er den sidste: If crow = dof2 Then For y = 1 To (dof2-1) For x = 1 To (2 * dof2) tempa(y, x) = SFF(dof2, x) * SFF(y, dof2) Next Next For y = 1 To (dof2-1) For x = 1 To dof2 * 2 SFF(y, x) = SFF(y, x) - tempa(y, x) Next Next Else 'Hvis det er en af de midterste rækker 'Regner alle kolonneværdier under den pågældende række om til nul For y = (crow + 1) To dof2 For x = 1 To (2 * dof2) tempa(y, x) = (SFF(cRow, x) * SFF(y, crow)) Next Next For y = crow + 1 To dof2 For x = 1 To dof2 * 2 SFF(y, x) = SFF(y, x) - tempa(y, x) Next Next 'Regner alle kolonneværdier over den pågældende række om til nul For y = 1 To (crow - 1) For x = 1 To (2 * dof2) tempa(y, x) = (SFF(cRow, x) * SFF(y, crow)) Next Next For y = 1 To (crow - 1) For x = 1 To (dof2 * 2) 13

144 Bilag 7 SFF(y, x) = SFF(y, x) - tempa(y, x) Next Next End If End If Next crow 'Hele proceduren gentages for den næste række ReDim InversMatrixArray(1 To UBound(MatrixArray, 1), 1 To UBound(MatrixArray, 1)) As Double x = 0 For r = 1 To dof2 For k = 1 To dof2 x = k + dof2 InversMatrixArray(r, k) = SFF(r, x) Next k Next r Dim m As New Matrix m.asarray = InversMatrixArray Set Inverse = m Exit Function ErrorHandler: If Err.Number = 13 Then MsgBox ("Strukturen er ustabil. Tjek venligst input-data.") ElseIf Err.Number <> 0 Then MsgBox ("Strukturen er ustabil. Tjek venligst input-data.") End If End Function Private Function NonZero(Row As Integer, Col As Integer, dof2 As Integer) As Integer ' Procedure, der returnerer rækkenummeret for den første række, hvor pivotindgangen ikke er 0 Dim x As Integer For x = Row To dof2 If SFF(x, Col) <> 0 Then NonZero = x Exit Function End If Next End Function Private Function ShuffleRow(Række As Integer, IkkeNulRække As Integer, dof2 As Integer) ' Procedure, der bytter om på rækkerne ReDim TempRække(1 To dof2 * 2) As Double Dim x As Integer For x = 1 To dof2 * 2 TempRække(x) = SFF(Række, x) SFF(Række, x) = SFF(IkkeNulRække, x) SFF(IkkeNulRække, x) = TempRække(x) Next End Function Function Times(B As Matrix) As Matrix ' Procedure, der ganger nx1 Matricer sammen 'Kontrol af matricer If UBound(MatrixArray, 1) = B.AntalRækker Then 'UBound(B2, 2) Then Dim x As Double, AK As Integer, r As Integer, k As Integer ReDim AgangeB(1 To B.AntalKolonner, 1 To UBound(MatrixArray, 2)) As Double 14

145 Bilag 7 For r = 1 To UBound(AgangeB, 2) For k = 1 To UBound(AgangeB, 1) For AK = 1 To UBound(MatrixArray, 1) x = x + MatrixArray(AK, r) * B.MatrixVærdi(AK, k) Next AK AgangeB(k, r) = x x = 0 Next k Next r Dim m As New Matrix m.asarray = AgangeB Set Times = m Exit Function End If End Function Function AntalRækker() ' Procedure, der returnerer antallet af rækker i en Matrix AntalRækker = UBound(MatrixArray, 2) End Function Function AntalKolonner() ' Procedure, der returnerer antallet af kolonner i en Matrix AntalKolonner = UBound(MatrixArray, 1) End Function Function MatrixVærdi(r As Integer, k As Integer) ' Procedure, der returnerer en Matrixværdi MatrixVærdi = MatrixArray(k, r) End Function Public Sub OpstilBMatricen(FladeParametre() As Double) ' B-Matricen opstilles Dim r As Integer, k As Integer, x As Integer For r = 1 To UBound(MatrixArray, 2) For k = 1 To UBound(MatrixArray, 1) MatrixArray(k, r) = 0 Next k Next r x = 1 For r = 1 To UBound(MatrixArray, 2) MatrixArray(x, r) = -FladeParametre(1) x = x + 3 Next r x = 2 For r = 1 To UBound(MatrixArray, 2) MatrixArray(x, r) = -FladeParametre(2) x = x + 3 Next r x = 3 For r = 1 To UBound(MatrixArray, 2) MatrixArray(x, r) = 1 x = x + 3 Next r End Sub 15

146 Bilag 7 Public Sub OpstilAMatricen(koor() As Double) ' A-Matricen opstilles Dim r As Integer, k As Integer For r = 1 To UBound(MatrixArray, 2) For k = 1 To 2 MatrixArray(k, r) = -1 * koor(k + 1, r) Next k Next r For r = 1 To UBound(MatrixArray, 2) MatrixArray(3, r) = -1 Next r End Sub Public Sub OpstilObservationsVektoren(koor() As Double) ' Observationsvektoren opstilles Dim r As Integer For r = 1 To UBound(koor, 2) MatrixArray(1, r * 3-2) = koor(2, r) MatrixArray(1, r * 3-1) = koor(3, r) MatrixArray(1, r * 3) = koor(4, r) Next r End Sub Public Sub OpstilKovariansMatrice(pktspredningimm As Double) 'Kovarians-Matricen opstilles Dim r As Integer, k As Integer For r = 1 To UBound(MatrixArray, 1) For k = 1 To UBound(MatrixArray, 1) MatrixArray(r, k) = 0 Next k Next r For r = 1 To UBound(MatrixArray, 1) MatrixArray(r, r) = (pktspredningimm / 1000) ^ 2 Next r End Sub Public Function Plus(konstantled As Double) ' Procedure, der lægger en skalar til en Matrix Dim r As Integer ReDim ResultatMatrix(1 To UBound(MatrixArray, 1), 1 To UBound(MatrixArray, 2)) As Double For r = 1 To UBound(MatrixArray, 2) ResultatMatrix(1, r) = MatrixArray(1, r) + konstantled Next r Dim m As New Matrix m.asarray = ResultatMatrix Set Plus = m End Function Public Function Negativ() 'Procedure, der ganger en vektor med -1 Dim r As Integer ReDim ResultatMatrix(1 To UBound(MatrixArray, 1), 1 To UBound(MatrixArray, 2)) As Double For r = 1 To UBound(MatrixArray, 2) ResultatMatrix(1, r) = MatrixArray(1, r) * -1 Next r 16

147 Bilag 7 Dim m As New Matrix m.asarray = ResultatMatrix Set Negativ = m End Function Public Function Minus(Ax As Matrix) ' Procedure, der trækker to vektorer fra hinanden Dim r As Integer ReDim ResultatMatrix(1 To UBound(MatrixArray, 1), 1 To UBound(MatrixArray, 2)) As Double For r = 1 To UBound(MatrixArray, 2) ResultatMatrix(1, r) = MatrixArray(1, r) - Ax.MatrixVærdi(r, 1) Next r Dim m As New Matrix m.asarray = ResultatMatrix Set Minus = m End Function Function GangeKonst(konst As Double) As Matrix ' Procedure, der ganger en Matrix med en skalar Dim r As Integer, k As Integer ReDim temp(1 To UBound(MatrixArray, 1), 1 To UBound(MatrixArray, 2)) As Double For r = 1 To UBound(MatrixArray, 2) For k = 1 To UBound(MatrixArray, 1) temp(k, r) = MatrixArray(k, r) * konst Next k Next r Dim m As New Matrix m.asarray = temp Set GangeKonst = m End Function Public Sub RækkeReducer() 'Procedure, der rækkereducerer en Matrix Dim AntalRækker As Integer AntalRækker = UBound(MatrixArray, 2) Dim AntalKolonner As Integer AntalKolonner = UBound(MatrixArray, 1) Dim dof2 As Integer dof2 = AntalRækker Dim First As Integer Dim temp As Double Dim tempa() As Double ReDim Preserve tempa(1 To AntalRækker, 1 To AntalKolonner) Dim crow As Integer 'Nummer række, vi befinder os i Dim x As Integer, y As Integer ReDim SFF(1 To AntalRækker, 1 To AntalKolonner) Dim r As Integer, k As Integer For r = 1 To UBound(MatrixArray, 1) For k = 1 To UBound(MatrixArray, 2) SFF(k, r) = MatrixArray(r, k) Next k Next r For crow = 1 To dof2 17

148 Bilag 7 'Første pivotindgang må ikke være nul If (SFF(cRow, crow) = 0) Then Call NonZero(cRow, crow, dof2) ' Returnerer den første række uden 0 i indgangen First = NonZero(cRow, crow, dof2) Call ShuffleRow(cRow, First, dof2 / 2) 'Bytter om på rækkerne End If 'Rækkeoperation for reduceret Echelon Form påbegyndes 'Hele rækken divideres med værdien af pivotindgangen temp = SFF(cRow, crow) For x = crow To dof2 + 1 SFF(cRow, x) = ((SFF(cRow, x) / temp)) Next x 'Regner alle indgange over og under om til nul 'Hvis rækken er den første: If crow = 1 Then For y = 2 To dof2 For x = 1 To dof2 + 1 tempa(y, x) = SFF(1, x) * SFF(y, 1) Next Next For y = 2 To dof2 For x = 1 To dof2 + 1 SFF(y, x) = SFF(y, x) - tempa(y, x) Next Next Else 'Hvis rækken er den sidste: If crow = dof2 Then For y = 1 To (dof2-1) For x = 1 To (dof2) + 1 tempa(y, x) = SFF(dof2, x) * SFF(y, dof2) Next Next For y = 1 To (dof2-1) For x = 1 To dof2 + 1 SFF(y, x) = SFF(y, x) - tempa(y, x) Next Next Else 'Hvis det er en af de midterste rækker 'Regner alle kolonneværdier under den pågældende række om til nul For y = (crow + 1) To dof2 For x = 1 To dof2 + 1 tempa(y, x) = (SFF(cRow, x) * SFF(y, crow)) Next Next For y = crow + 1 To dof2 For x = 1 To dof2 + 1 SFF(y, x) = SFF(y, x) - tempa(y, x) Next Next 18

149 Bilag 7 'Regner alle kolonneværdier over den pågældende række om til nul For y = 1 To (crow - 1) For x = 1 To (dof2) + 1 tempa(y, x) = (SFF(cRow, x) * SFF(y, crow)) Next Next For y = 1 To (crow - 1) For x = 1 To (dof2) + 1 SFF(y, x) = SFF(y, x) - tempa(y, x) Next Next End If End If Next crow 'Hele proceduren gentages for den næste række For r = 1 To UBound(MatrixArray, 1) For k = 1 To UBound(MatrixArray, 2) MatrixArray(r, k) = SFF(k, r) Next k Next r End Sub Flade Dim FladeParametre(3) As Double Dim FladeKoor() As Double Dim Residualer() As Double Public SprdnPåVægtEnh As Double Public Variansfaktor As Double Public AntalPktPåFlade As Integer Dim KofaktorMatrix As New Matrix Public AprioriKovariansMatrix As New Matrix Public AposterioriKovariansMatrix As New Matrix Public Sub KoorTilFlade(ByVal kode As Integer, ByVal xkoor As Double, ByVal ykoor As Double, ByVal zkoor As Double) 'Tilskriver punktkoordinater til en flade AntalPktPåFlade = AntalPktPåFlade + 1 ReDim Preserve FladeKoor(1 To 4, 1 To AntalPktPåFlade) FladeKoor(1, AntalPktPåFlade) = kode FladeKoor(2, AntalPktPåFlade) = xkoor FladeKoor(3, AntalPktPåFlade) = ykoor FladeKoor(4, AntalPktPåFlade) = zkoor End Sub Public Function KoorFraFlade(pktnr As Integer, Kolonne As Integer) ' Henter koordinatværdier fra ' fladerne KoorFraFlade = FladeKoor(Kolonne, pktnr) End Function Public Sub BeregnForeløbigeVærdier(f As Integer) 'Beregner foreløbige fladeparametre ud fra de 'første tre punkter. Dim PQ(3) As Double, PR(3) As Double, N(3) As Double Dim A As Double, B As Double, C As Double, D As Double 19

150 Bilag 7 Dim a0 As Double, b0 As Double, c0 As Double PQ(1) = FladeKoor(2, 2) - FladeKoor(2, 1) PQ(2) = FladeKoor(3, 2) - FladeKoor(3, 1) PQ(3) = FladeKoor(4, 2) - FladeKoor(4, 1) PR(1) = FladeKoor(2, 3) - FladeKoor(2, 1) PR(2) = FladeKoor(3, 3) - FladeKoor(3, 1) PR(3) = FladeKoor(4, 3) - FladeKoor(4, 1) N(1) = PQ(2) * PR(3) - PR(2) * PQ(3) N(2) = PQ(3) * PR(1) - PR(3) * PQ(1) N(3) = PQ(1) * PR(2) - PR(1) * PQ(2) A = N(1) B = N(2) C = N(3) D = N(1) * (-FladeKoor(2, 1)) + N(2) * (-FladeKoor(3, 1)) + N(3) * (-FladeKoor(4, 1)) a0 = -A / C b0 = -B / C c0 = -D / C FladeParametre(1) = a0 FladeParametre(2) = b0 FladeParametre(3) = c0 End Sub Public Sub UdjævnFlade(pktspredningimm As Double) ' Procedure, der udjævner flader On Error GoTo cancelvalgt 'Opstilling af B-matricen Dim antalpkt As Integer Dim B As New Matrix antalpkt = UBound(FladeKoor, 2) AntalPktPåFlade = antalpkt B.SætStr antalpkt, antalpkt * 3 B.OpstilBMatricen FladeParametre() 'Opstilling af A-matricen Dim A As New Matrix A.SætStr antalpkt, 3 A.OpstilAMatricen FladeKoor() 'Opstilling af observations-vektoren Dim obs As New Matrix obs.sætstr antalpkt * 3, 1 obs.opstilobservationsvektoren FladeKoor 'Udregning af den ækvivalente observationsvektor Dim obsæ As New Matrix Set obsæ = B.Times(obs) 'Opstilling af kovariansmatrix Dim Sigma As New Matrix Sigma.SætStr antalpkt * 3, antalpkt * 3 Sigma.OpstilKovariansMatrice pktspredningimm 20

151 Bilag 7 'Opstilling af vægtmatrix Dim C As New Matrix Set C = Sigma.Inverse 'Opstilling af ækvivalent kovariansmatrix Dim Sigmaæ As New Matrix Dim bt As New Matrix Set Sigmaæ = B.Times(Sigma) Set bt = B.Transponeret Set Sigmaæ = Sigmaæ.Times(bt) 'Opstilling af ækvivalent vægtmatrix Dim Cæ As New Matrix Set Cæ = Sigmaæ.Inverse 'Løsning af ligningssystemet Dim XVektor As New Matrix Dim at As New Matrix Dim N As Matrix Dim Niminusførste As Matrix Dim Andetled As Matrix Dim f As New Matrix Set at = A.Transponeret f.sætstr antalpkt, 1 Do B.OpstilBMatricen FladeParametre Set obsæ = B.Times(obs) Set Sigmaæ = B.Times(Sigma) Set bt = B.Transponeret Set Sigmaæ = Sigmaæ.Times(bt) Set Cæ = Sigmaæ.Inverse Set N = at.times(cæ) Set N = N.Times(A) Set Niminusførste = N.Inverse Set f = obsæ.negativ Set f = f.plus(fladeparametre(3)) Set Andetled = at.times(cæ) Set Andetled = Andetled.Times(f) Set XVektor = Niminusførste.Times(Andetled) FladeParametre(1) = FladeParametre(1) + XVektor.MatrixVærdi(1, 1) FladeParametre(2) = FladeParametre(2) + XVektor.MatrixVærdi(2, 1) FladeParametre(3) = FladeParametre(3) + XVektor.MatrixVærdi(3, 1) Loop Until XVektor.MatrixVærdi(1, 1) < And XVektor.MatrixVærdi(2, 1) < And XVektor.MatrixVærdi(3, 1) < 'Udregning af residualer Dim ræ As New Matrix ræ.sætstr 5, 1 21

152 Bilag 7 Dim Ax As New Matrix Set Ax = A.Times(XVektor) Set ræ = f.minus(ax) Dim r As New Matrix Set r = Sigma.Times(bt) Set r = r.times(cæ) Set r = r.times(ræ) Dim i As Integer ReDim Residualer(1 To antalpkt) For i = 1 To antalpkt * 3 Step 3 Residualer((i \ 3) + 1) = Sqr(r.MatrixVærdi(i, 1) ^ 2 + r.matrixværdi(i + 1, 1) ^ 2 + r.matrixværdi_ (i + 2, 1) ^ 2) Next i 'Udregning af variansfaktor Dim tæller As Double Dim ræt As New Matrix Set ræt = ræ.transponeret Set ræt = ræt.times(cæ) Set ræt = ræt.times(ræ) tæller = ræt.matrixværdi(1, 1) If antalpkt = 3 Then Variansfaktor = 1 SprdnPåVægtEnh = Sqr(Variansfaktor) Else Variansfaktor = tæller / (antalpkt - 3) SprdnPåVægtEnh = Sqr(Variansfaktor) End If 'KofaktorMatrix Set KofaktorMatrix = Niminusførste 'KovariansMatrix Set AprioriKovariansMatrix = Niminusførste.GangeKonst(pktspredningimm ^ 2) Set AposterioriKovariansMatrix = Niminusførste.GangeKonst(Variansfaktor) cancelvalgt: End Sub Function Residual(i As Integer) 'Procedure, der tilskriver punkterne på fladen deres residualer. Residual = Residualer(i) End Function Public Function SkrivUd() 'Procedure, der returnerer alle tre fladeparametre som tekststreng Dim s As String s = "z = " & FladeParametre(1) & "x + " & FladeParametre(2) & "y + " & FladeParametre(3) & "" SkrivUd = s End Function Public Property Get Parameter(x As Integer) As Double 'procedure, der returnerer en bestemt flade ' parameter Parameter = FladeParametre(x) 22

153 Bilag 7 End Property Public Property Let Parameter(x As Integer, værdi As Double) ' Procedure, der tilskriver en bestemt ' fladeparameter FladeParametre(x) = værdi End Property Public Function FladeVærdi(x As Integer) 'Procedure, der henter en bestemt fladeparametre FladeVærdi = FladeParametre(x) End Function00 Public Function SkrivResidualer() Dim s As String, x As Integer For x = 1 To AntalPktPåFlade s = "" & s & " " & CStr(Residualer(x)) & "" Next x SkrivResidualer = s End Function 23

154 Bilag 8 Matlabscript [Flask3dk.m] function [fuldkov,x,y,z,kov] = flask3dk(koef,kov) % % [fuldkov,x,y,z,kov] = flask3dk(koef,kov) % % Skæring af tre flader i 3D (fladerne defineres af koefficienter til deres ligninger) % Typisk kald "[fuldkov,x,y,z,kov] = flask3dk([ e ; ; ],[ E E E E E E- 04; E E E E E E-03; E E E E E ])" % % Input: % koef: 3x3 matrix med koefficienter til fladeligningerne % % koef = a1 b1 c1 % a2 b2 c2 % a3 b3 c3, hvor % % a1, b1 og c1 er koefficienter til den første fladeligning % a2, b2 og c2 er koefficienter til den anden fladeligning % a3, b3 og c3 er koefficienter til den trejde faldeligning % % Fladeligningen er givet ved: % % z = a*x + b*y +c % % kov: 3x3 matrix med kovarianserne til fladeligningerne % % kov = var,a1 var,a1b1 var,a1c1 var,b1 var,b1c1 var,c1 % var,a2 var,a2b2 var,a2c2 var,b2 var,b2c2 var,c2 % var,a3 var,a3b3 var,a3c3 var,b3 var,b3c3 var,c3 % % var,a1 var,a1b1 var,a1c1 var,b1 var,b1c1 var,c1 er kovarianserne til den første fladeligning % var,a2 var,a2b2 var,a2c2 var,b2 var,b2c2 var,c2 er kovarianserne til den anden fladeligning % var,a3 var,a3b3 var,a3c3 var,b3 var,b3c3 var,c3 er kovarianserne til den tredje fladeligning 1

155 Bilag 8 % % Output: % % fuldkov: 9x9 kovariansmatrix som indeholder kovarianserne til de tre flader. Udfra kov opstil- % les fuldkov. Scriptet fylder automatisk de tomme pladser ud med nuller. For at det er muligt at % kontrollere om fuldkov er opstillet korrekt skrives denne også ud som output fra scriptet. % % % var,a1 var,a1b1 var,a1c % fuldkov = var,b1a1 var,b1 var,b1c % var,c1a1 var,c1b1 var,c % var,a2 var,a2b2 var,a2c % var,b2a2 var,b2 var,b2c % var,c2a2 var,c2b2 var,c % var,a3 var,a3b3 var,a3c3 % var,b3a3 var,b3 var,b3c3 % var,c3a3 var,c3b3 var,c3 % % % x,y,z: x-, y- og z-koordinat til hjørnepunktet % kov: 3x3 kovariansmatrix for hjørnepunktet % % kov = var,x var,xy var,xz % var,xy var,y var,yz % var,zx var,zy var,z % % % Reference: Peter Cederholms script Linsk2dk.m % % Gruppe tm % % % Koefficienter a1 = koef(1,1); b1 = koef(1,2); c1 = koef(1,3); a2 = koef(2,1); b2 = koef(2,2); c2 = koef(2,3); 2

156 Bilag 8 a3 = koef(3,1); b3 = koef(3,2); c3 = koef(3,3); % fuldkov fuldkov(1,1) = kov(1,1); fuldkov(1,2) = kov(1,2); fuldkov(1,3) = kov(1,3); fuldkov(1,4) = 0; fuldkov(1,5) = 0; fuldkov(1,6) = 0; fuldkov(1,7) = 0; fuldkov(1,8) = 0; fuldkov(1,9) = 0; fuldkov(2,1) = kov(1,2); fuldkov(2,2) = kov(1,4); fuldkov(2,3) = kov(1,5); fuldkov(2,4) = 0; fuldkov(2,5) = 0; fuldkov(2,6) = 0; fuldkov(2,7) = 0; fuldkov(2,8) = 0; fuldkov(2,9) = 0; fuldkov(3,1) = kov(1,3); fuldkov(3,2) = kov(1,5); fuldkov(3,3) = kov(1,6); fuldkov(3,4) = 0; fuldkov(3,5) = 0; fuldkov(3,6) = 0; fuldkov(3,7) = 0; fuldkov(3,8) = 0; fuldkov(3,9) = 0; fuldkov(4,1) = 0; fuldkov(4,2) = 0; fuldkov(4,3) = 0; fuldkov(4,4) = kov(2,1); 3

157 Bilag 8 fuldkov(4,5) = kov(2,2); fuldkov(4,6) = kov(2,3); fuldkov(4,7) = 0; fuldkov(4,8) = 0; fuldkov(4,9) = 0; fuldkov(5,1) = 0; fuldkov(5,2) = 0; fuldkov(5,3) = 0; fuldkov(5,4) = kov(2,2); fuldkov(5,5) = kov(2,4); fuldkov(5,6) = kov(2,5); fuldkov(5,7) = 0; fuldkov(5,8) = 0; fuldkov(5,9) = 0; fuldkov(6,1) = 0; fuldkov(6,2) = 0; fuldkov(6,3) = 0; fuldkov(6,4) = kov(2,3); fuldkov(6,5) = kov(2,5); fuldkov(6,6) = kov(2,6); fuldkov(6,7) = 0; fuldkov(6,8) = 0; fuldkov(6,9) = 0; fuldkov(7,1) = 0; fuldkov(7,2) = 0; fuldkov(7,3) = 0; fuldkov(7,4) = 0; fuldkov(7,5) = 0; fuldkov(7,6) = 0; fuldkov(7,7) = kov(3,1); fuldkov(7,8) = kov(3,2); fuldkov(7,9) = kov(3,3); fuldkov(8,1) = 0; fuldkov(8,2) = 0; fuldkov(8,3) = 0; 4

158 Bilag 8 fuldkov(8,4) = 0; fuldkov(8,5) = 0; fuldkov(8,6) = 0; fuldkov(8,7) = kov(3,2); fuldkov(8,8) = kov(3,4); fuldkov(8,9) = kov(3,5); fuldkov(9,1) = 0; fuldkov(9,2) = 0; fuldkov(9,3) = 0; fuldkov(9,4) = 0; fuldkov(9,5) = 0; fuldkov(9,6) = 0; fuldkov(9,7) = kov(3,3); fuldkov(9,8) = kov(3,5); fuldkov(9,9) = kov(3,6); %Udtryk for x,y,z koordinat y = (a1*(((c2-c1)/(a1-a2)))-a3*(((c2-c1)/(a1-a2)))+c1-c3)/(a3*(((b2-b1)/(a1-a2)))+b3-a1*(((b2- b1)/(a1-a2)))-b1); x = (b2*y-b1*y-c1+c2)/(a1-a2); z = a1*x+b1*y+c1; % Afledte af x mht a1 b1 c1 a2 b2 c2 a3 b3 c3 dx_da1 = (b2*((c2-c1)/(a1-a2)-a1*(c2-c1)/(a1-a2)^2+a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1- a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/ (a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(-a3*(b2-b1)/(a1-a2)^2-(b2-b1)/(a1-a2)+a1*(b2-b1)/(a1- a2)^2)-b1*((c2-c1)/(a1-a2)-a1*(c2-c1)/(a1-a2)^2+a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1-a2)+b3- a1*(b2-b1)/(a1-a2)-b1)+b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1- a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(-a3*(b2-b1)/(a1-a2)^2-(b2-b1)/(a1-a2)+a1*(b2-b1)/(a1- a2)^2))/(a1-a2)-(b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3- a1*(b2-b1)/(a1-a2)-b1)-b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1- a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-c1+c2)/(a1-a2)^2; dx_db1 = (-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2- b1)/(a1-a2)-b1)^2*(-a3/(a1-a2)+a1/(a1-a2)-1)-(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/ (a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1- c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(-a3/(a1-a2)+a1/(a1-a2)-1))/(a1-a2); 5

159 Bilag 8 dx_dc1 = (b2*(-a1/(a1-a2)+a3/(a1-a2)+1)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b1*(- a1/(a1-a2)+a3/(a1-a2)+1)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-1)/(a1-a2); dx_da2 = (b2*(a1*(c2-c1)/(a1-a2)^2-a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/ (a1-a2)-b1)-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2- b1)/(a1-a2)-b1)^2*(a3*(b2-b1)/(a1-a2)^2-a1*(b2-b1)/(a1-a2)^2)-b1*(a1*(c2-c1)/(a1-a2)^2- a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+b1*(a1*(c2-c1)/(a1-a2)- a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(a3*(b2-b1)/(a1- a2)^2-a1*(b2-b1)/(a1-a2)^2))/(a1-a2)+(b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/ (a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1- c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-c1+c2)/(a1-a2)^2; dx_db2 = ((a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/ (a1-a2)-b1)-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2- b1)/(a1-a2)-b1)^2*(a3/(a1-a2)-a1/(a1-a2))+b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/ (a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(a3/(a1-a2)-a1/(a1-a2)))/(a1-a2); dx_dc2 = (b2*(a1/(a1-a2)-a3/(a1-a2))/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b1*(a1/ (a1-a2)-a3/(a1-a2))/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+1)/(a1-a2); dx_da3 = (-b2*(c2-c1)/(a1-a2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b2*(a1*(c2-c1)/ (a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(b2-b1)/(a1- a2)+b1*(c2-c1)/(a1-a2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+b1*(a1*(c2-c1)/(a1-a2)- a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(b2-b1)/(a1-a2))/ (a1-a2); dx_db3 = (-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2- b1)/(a1-a2)-b1)^2+b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3- a1*(b2-b1)/(a1-a2)-b1)^2)/(a1-a2); dx_dc3 = (-b2/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+b1/(a3*(b2-b1)/(a1-a2)+b3- a1*(b2-b1)/(a1-a2)-b1))/(a1-a2); % Afledte af y mht a1 b1 c1 a2 b2 c2 a3 b3 c3 dy_da1 = ((c2-c1)/(a1-a2)-a1*(c2-c1)/(a1-a2)^2+a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1-a2)+b3- a1*(b2-b1)/(a1-a2)-b1)-(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3- a1*(b2-b1)/(a1-a2)-b1)^2*(-a3*(b2-b1)/(a1-a2)^2-(b2-b1)/(a1-a2)+a1*(b2-b1)/(a1-a2)^2); dy_db1 = -(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/ (a1-a2)-b1)^2*(-a3/(a1-a2)+a1/(a1-a2)-1); dy_dc1 = (-a1/(a1-a2)+a3/(a1-a2)+1)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1); dy_da2 = (a1*(c2-c1)/(a1-a2)^2-a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1- a2)-b1)-(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1- a2)-b1)^2*(a3*(b2-b1)/(a1-a2)^2-a1*(b2-b1)/(a1-a2)^2); 6

160 Bilag 8 dy_db2 = -(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/ (a1-a2)-b1)^2*(a3/(a1-a2)-a1/(a1-a2)); dy_dc2 = (a1/(a1-a2)-a3/(a1-a2))/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1); dy_da3 = -(c2-c1)/(a1-a2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-(a1*(c2-c1)/(a1-a2)- a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(b2-b1)/(a1-a2); dy_db3 = -(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/ (a1-a2)-b1)^2; dy_dc3 = -1/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1); % Afledte af z mht a1 b1 c1 a2 b2 c2 a3 b3 c3 dz_da1 = (b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/ (a1-a2)-b1)-b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2- b1)/(a1-a2)-b1)-c1+c2)/(a1-a2)+a1*(b2*((c2-c1)/(a1-a2)-a1*(c2-c1)/(a1-a2)^2+a3*(c2-c1)/(a1- a2)^2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1- a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(-a3*(b2-b1)/(a1-a2)^2-(b2-b1)/ (a1-a2)+a1*(b2-b1)/(a1-a2)^2)-b1*((c2-c1)/(a1-a2)-a1*(c2-c1)/(a1-a2)^2+a3*(c2-c1)/(a1-a2)^2)/ (a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1- c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(-a3*(b2-b1)/(a1-a2)^2-(b2-b1)/(a1- a2)+a1*(b2-b1)/(a1-a2)^2))/(a1-a2)-a1*(b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/ (a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1- c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-c1+c2)/(a1-a2)^2+b1*((c2-c1)/(a1-a2)- a1*(c2-c1)/(a1-a2)^2+a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)- b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)- b1)^2*(-a3*(b2-b1)/(a1-a2)^2-(b2-b1)/(a1-a2)+a1*(b2-b1)/(a1-a2)^2); dz_db1 = a1*(-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2- b1)/(a1-a2)-b1)^2*(-a3/(a1-a2)+a1/(a1-a2)-1)-(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/ (a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1- c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(-a3/(a1-a2)+a1/(a1-a2)-1))/(a1- a2)+(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)- b1)-b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1- a2)-b1)^2*(-a3/(a1-a2)+a1/(a1-a2)-1); dz_dc1 = a1*(b2*(-a1/(a1-a2)+a3/(a1-a2)+1)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)- b1*(-a1/(a1-a2)+a3/(a1-a2)+1)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-1)/(a1-a2)+b1*(- a1/(a1-a2)+a3/(a1-a2)+1)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+1; dz_da2 = a1*(b2*(a1*(c2-c1)/(a1-a2)^2-a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2- b1)/(a1-a2)-b1)-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3- a1*(b2-b1)/(a1-a2)-b1)^2*(a3*(b2-b1)/(a1-a2)^2-a1*(b2-b1)/(a1-a2)^2)-b1*(a1*(c2-c1)/(a1- a2)^2-a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+b1*(a1*(c2-c1)/(a1- a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(a3*(b2-b1)/ 7

161 Bilag 8 (a1-a2)^2-a1*(b2-b1)/(a1-a2)^2))/(a1-a2)+a1*(b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1- c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1- a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-c1+c2)/(a1-a2)^2+b1*(a1*(c2-c1)/(a1- a2)^2-a3*(c2-c1)/(a1-a2)^2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b1*(a1*(c2-c1)/(a1- a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(a3*(b2-b1)/ (a1-a2)^2-a1*(b2-b1)/(a1-a2)^2); dz_db2 = a1*((a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/ (a1-a2)-b1)-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2- b1)/(a1-a2)-b1)^2*(a3/(a1-a2)-a1/(a1-a2))+b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/ (a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(a3/(a1-a2)-a1/(a1-a2)))/(a1-a2)-b1*(a1*(c2- c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(a3/(a1- a2)-a1/(a1-a2)); dz_dc2 = a1*(b2*(a1/(a1-a2)-a3/(a1-a2))/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b1*(a1/ (a1-a2)-a3/(a1-a2))/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+1)/(a1-a2)+b1*(a1/(a1-a2)- a3/(a1-a2))/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1); dz_da3 = a1*(-b2*(c2-c1)/(a1-a2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b2*(a1*(c2- c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(b2-b1)/ (a1-a2)+b1*(c2-c1)/(a1-a2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+b1*(a1*(c2-c1)/(a1- a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(b2-b1)/(a1- a2))/(a1-a2)-b1*(c2-c1)/(a1-a2)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)-b1*(a1*(c2-c1)/ (a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2*(b2-b1)/(a1- a2); dz_db3 = a1*(-b2*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2- b1)/(a1-a2)-b1)^2+b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/(a1-a2)+b3- a1*(b2-b1)/(a1-a2)-b1)^2)/(a1-a2)-b1*(a1*(c2-c1)/(a1-a2)-a3*(c2-c1)/(a1-a2)+c1-c3)/(a3*(b2-b1)/ (a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)^2; dz_dc3 = a1*(-b2/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1)+b1/(a3*(b2-b1)/(a1-a2)+b3- a1*(b2-b1)/(a1-a2)-b1))/(a1-a2)-b1/(a3*(b2-b1)/(a1-a2)+b3-a1*(b2-b1)/(a1-a2)-b1); % Jacobian matrix J = [dx_da1 dx_db1 dx_dc1 dx_da2 dx_db2 dx_dc2 dx_da3 dx_db3 dx_dc3; dy_da1 dy_db1 dy_dc1 dy_da2 dy_db2 dy_dc2 dy_da3 dy_db3 dy_dc3; dz_da1 dz_db1 dz_dc1 dz_da2 dz_db2 dz_dc2 dz_da3 dz_db3 dz_dc3]; % Fejlforplantning kov = J*fuldkov*J'; 8

162 Bilag 9 Konfidensellipsoider til test 2 Lille rum 134 Store rum 134 Figur B9.1: Konfidensellipsoider for hjørnepunkt 134. Til venstre er ellipsoiderne for det lille rum og til højre er ellipsoiderne for det store rum. 1

163 Bilag 9 Lille rum 256 Store rum 256 Figur B9.2: Konfidensellipsoider for hjørnepunkt 256. Til venstre er ellipsoiderne for det lille rum og til højre er ellipsoiderne for det store rum. 2

164 Bilag 10 Brugervejledning Formålet med dette afsnit er at give et indblik i, hvorledes DANRUM installeres og benyttes. Brugervejledningen er inddelt således, at der indledningsvis kommer en detaljeret forklaring af hvorledes programmet installeres og hvilke krav, der er til computeren. Endelig er de specifikke funktioner i programmet gennemgået en efter en, ved hjælp af et eksempel. Som afslutning på eksemplet er de anvendte kommandoer listet op. Dette vil forhåbentligt være en hjælp til at få et hurtigt overblik over flowet i DANRUM. Installation af DANRUM For at kunne benytte DANRUM, skal der på computeren være installeret et Windowsstyresystem og der skal ligeledes være installeret et software, der kan visualisere VRML-filer. Grunden til dette er, at programmet ellers ikke vil kunne visualisere det indmålte objekt. Der findes en VRMLviewer vedlagt i bilag 11, :\D_CosmoPlayer. DANRUM findes ligeledes i bilag 11. Måden programmet installeres på er ved at finde mappen med filen :\C_DANRUM\setup.exe og trykke på den. Derefter vil brugeren blive ført igennem installationsprocessen, som var det et andet Windows program, der bliver installeret. Dog skal brugeren være opmærksom på, at der under installationen godt kan opstå en fejl. Fejlen omhandler en fil som ikke kan findes. Denne fejl skal blot ignoreres og får ikke nogen indflydelse for DANRUM i sidste ende. Gennemgang af eksempel DANRUM er opbygget ved hjælp af en enkel og overskuelig brugergrænseflade, se figur B10.1 Brugergrænsefladen består af en række funktionsknapper, tabeller, samt en 3D-viewer. Udover disse befinder der sig nogle ekstra funktioner, som viser, hvor på computeren, brugeren gemmer/ henter sine filer. 1

165 Bilag 10 Figur B10.1: Et skærmbillede af brugergrænsefladen i DANRUM. DANRUM er endvidere opbygget således, at venstre side fungerer som beregningsdelen i programmet, mens det indmålte rum visualiseres i højreside. Når brugeren åbner DANRUM, ser startbilledet ud som på figur B10.1. For at åbne DAN- RUM klikkes på startmenuen. I startmenuen vælges programmer, hvor i blandt DANRUM befinder sig. Brugeren har nu mulighed for at anvende DANRUM. Efterfølgende gennemgås et eksempel som findes på bilag 11, :\G_Brugervejledning. Ved at trykke på Indlæs observationer kommer en dialogboks til syne, som gør det muligt for brugeren, at udpege hvor GSI-filen er placeret, se figur B10.2. Det skal her bemærkes at det kun er filer med efternavnet GSI, der kommer til syne. Figur B10.2: Trin 1 i DANRUM, Indlæs observationer. 2

166 Bilag 10 Efter at brugeren har valgt stien til sin GSI-fil, visualiseres den i tabellen. Stien til filen visualiseres ligeledes i højre side således at brugeren altid ved hvilken fil der arbejdes med. I tabellen kan observationerne ændres eller redigeres, hvis brugeren har nogle rettelser fra målebogen, se figur B10.3. Brugeren kan foretage ændringer i den enkelte observation ved at dobbeltklikke i et felt direkte i tabellen. Brugeren har også mulighed for at slette en hel observation ved et tryk på Slet observation og følge vejledningerne. Med hel observation menes ét punkt. Denne funktion kan være gavnlig hvis brugeren under opmålingen har målt et forkert punkt. Næste trin i DANRUM er at beregne koordinaterne til de indmålte punkter. Trykkes der på knappen Beregn koordinater skal brugeren angive X, Y, Z koordinaterne for opstillingspunktet, se figur B10.4. Det er muligt at indtaste vilkårlige koordinater men brugeren rådes til at indtaste koordinaterne i forhold til det indmålte rums dimensioner. Derved bliver koordinaterne til hjørnepunkterne i sidste ende positive. Koordinaterne til opstillingspunktet visualiseres i et felt ved siden af observationerne. De beregnede koordinater visualiseres i en ny tabel. Det er x koordinat Kode Figur B10.3: Trin 2 i DANRUM. Redigering af observationer. y koordinat z koordinat Figur B10.4: Trin i DANRUM Beregning af koordinater ikke muligt at redigere i koordinater, så hvis der opdages fejl i tabellen, skal denne fejl rettes i... observationerne, og koordinatberegningen foretages på ny. Brugeren har mulighed for direkte at indlæse en koordinatfil og derved hoppe det første led over i programmet. Ved at trykke på Indlæs koordinatfil kan brugeren udpege en koordinatfil. Koordinatfilen skal opstilles på følgende måde for at DAN- RUM indlæser denne korrekt, se figur B10.5. Som det ses benyttes der ikke kommaer i koordinaterne. Ligeledes skal brugeren være opmærksom på, at koordinaterne maksimalt må bestå af 5 karakterer. Efter at have benyttet sig af funktionen Beregn ko- Figur B10.5: Eksempel på hvorledes en koordinatfil skal opstilles. 3

167 Bilag 10 ordinater eller Indlæs koordinatfil, er næste skridt at beregne fladerne. Ved at trykke på Beregn flader bliver brugeren bedt om at indtaste apriori spredningen for koordinaterne. Denne værdi er sat til 3 mm som default. Derefter udjævnes fladerne og residualerne samt spredningen på vægtenheden (SPVE) visualiseres, se figur B10.6. Det er muligt at undlade punkter på fladerne hvis disse er fejlbehæftet. Der skal som minimum være 3 punkter på hver flade for at kunne beregne disse. Punktet undlades ved at trykke på det punkt i tabellen, som brugeren ønsker at undlade. Derefter trykkes på Undlad punkt. Feltet bliver nu sort og punktet undlades når der trykkes på Genberegn flader, se figur B10.7. Hvis brugeren har trykket på et forkert felt er det muligt inden der trykkes på Figur B10.6: Trin 5 i DANRUM. Beregn flader. Figur B10.7: I DANRUM er det muligt for at vælge punkter fra, og til i udjævningen. Genberegn flader at slette den sorte markering igen. Dette gøres ved at trykke på Undlad punkt en gang til. Det anbefales, at brugeren noterer de punkter, som undlades i udjævningen. Grunden til dette er, at hvis der undlades et forkert punkt, er brugeren nødt til at starte forfra med Beregn flade, idet punktet slettes fra tabellen. Når udjævningen eksekveres, bliver alle residualer der overskrider grænseværdien vist med en gul baggrund, se figur B10.7. Det er muligt at ændre denne grænseværdi. Dette gøres ved at stille sig i feltet Grænseværdi, hvorpå der kan indtastes en ny værdi. Udjævningen gentages ved tryk på Beregn flader. Som det ses i figur B10.8, bliver alle de værdier, som ligger over 5 mm nu gule. Figur B10.8: Punkter med residualer over 5 mm markeres med gult. Efter brugeren har accepteret udjævningen, vil det nu være muligt at få visualiseret det indmålte rum. Ved at trykke på Vis VRML model visualiseres det indmåle rum i 3D-vieweren, se figur B10.9. Inden programmet visualiserer modellen, skal brugeren angive, hvor VRML-filen skal gemmes. Den valgte sti til VRML-filen visualiseres ligeledes. Brugeren kan til hver en tid gå ind og hente VRML-filen igen og således få den visualiseret i en 3D-viewer. 4

168 Bilag 10 Figur B10.9: Det indmålte rum vises i 3D-vieweren. Den sidste funktion i DANRUM er, oprettelse af en dokumentationsfil. Trykkes der på Opret resultatfil bedes brugeren angive, hvor filen ønskes gemt. Resultatfilen vil derefter kunne åbnes i en hvilken som helst teksteditor. Resultatfilen indeholder observationerne, koordinaterne, fladeligningerne, a posteriori kovariansmatricerne til fladerne og hjørnekoordinaterne. Det er ligeledes muligt for brugeren at indtaste et journalnummer, adresse og eventuelle bemærkninger. De tre sidst nævnte kan brugeren indtaste efter behov på brugergrænsefladen, se figur B Figur B Diverse oplysninger vedrørende det indmålte rum. 5

169 Bilag 10 Efter endt beregning har brugeren følgende muligheder. Enten kan DANRUM lukkes, som gøres oppe i højre hjørne eller også kan knappen Ryd alle felter benyttes. Ryd alle felter har den funktion, at nulstille programmet. Det vil sige at den rydder alle felter, så brugeren har mulighed for at starte på et nyt projekt. Ryd felter kan også benyttes som en fortrydelsesknap, hvis der ønskes at starte for fra. Hurtig i gang med DANRUM Herunder vil de forskellige kommandoer blive listet op. Dette sker i den rækkefølge som de eksekveres i. Hvis brugeren sidder fast i programmet kan dette flow måske hjælpe på vej, idet det giver et hurtigt overblik af programmets flow. 1. Tryk på knappen Indlæs observationer. Observationerne visualiseres 2. Ret eventuelle fejl. 3. Tryk på Beregn koordinater Koordinaterne visualiseres 4. Tryk på Beregn flader Residualerne visualiseres Accepter udjævning 5. Tryk på Vis VRML model Modellen visualiseres 6. Der indtastes eventuelt tekst i journalnummer, adresse og eventuelle bemærkninger 7. Tryk på Opret resultatfil 8. Afslut med et tryk i højre hjørne eller tryk på Ryd alle felter 6

170 Bilag 11 CD A_Rapport: Mappen indeholder en digital kopi af Indvendig 3D-opmåling B_Visual Basic programmering: Mappen indeholder Visual Basic-filerne til DANRUM C_DANRUM: en undermappe som indeholder programmet DANRUM D_CosmoPlayer: Mappen indeholder programmet CosmoPlayer E_Testdata: fire undermapper med data til de forskellige tests F_Matlabfiler: Indeholder de anvendte matlabscripts G_Brugervejledning: Mappen indeholder en brugervejledning 1

Laserscanning - nøjagtighed ved sammenknytning

Laserscanning - nøjagtighed ved sammenknytning Laserscanning - nøjagtighed ved sammenknytning Landinspektøruddannelsen Afgangsprojekt 2005 Aalborg Universitet Aalborg Universitet Landinspektøruddannelsen 10. semester Titel: Laserscanning nøjagtighed

Læs mere

3D-LASERSCANNING - FREMTIDENS OPMÅLING

3D-LASERSCANNING - FREMTIDENS OPMÅLING 3D-LASERSCANNING - FREMTIDENS OPMÅLING Velegnet til: Komplet målfast 3D model til brug for projektering As-built dokumentation Opmåling til facade- og bygningsrenovering Opmåling af broer m.m. i trafikerede

Læs mere

Appendiks Hovedrapport Bilag. English summary. Kapitel 0 Introduktion. Kapitel 1 Initierende problem. Kapitel 2 Beskrivelse af byggeprocessen

Appendiks Hovedrapport Bilag. English summary. Kapitel 0 Introduktion. Kapitel 1 Initierende problem. Kapitel 2 Beskrivelse af byggeprocessen Introduktion Denne introduktion til rapporten har til formål at introducere rapportens struktur, med en kort angivelse af indholdet af hvert kapitel. I introduktion gives der også en læsevejledning til

Læs mere

Deformationsanalyse med laserscanning

Deformationsanalyse med laserscanning Deformationsanalyse med laserscanning Landinspektøruddannelsen, Measurement Science 7. semester, Gruppe 1 Aalborg Universitet 2007-2008 0 Forord Aalborg Universitet Institut for Samfundsudvikling og Planlægning

Læs mere

KØBENHAVNS UNIVERSITET

KØBENHAVNS UNIVERSITET KØBENHAVNS UNIVERSITET BILAG F IKT-TEKNISK SPECIFIKATION FOR OPMÅLING OG MODELLERING AF EKSISTERENDE BYGNINGER PROJEKT ID: KU_xx_xx_xx_xxxx (se bilag G, pkt. 0.0) PROJEKTNAVN: xxx DATO: xx.xx.xxxx VERSION:

Læs mere

Aalborg Universitet. Synopsis: Institut for samfundsudvikling og planlægning Landinspektøruddannelsens 10. semester Fibigerstræde 11, 9220 Aalborg Ø

Aalborg Universitet. Synopsis: Institut for samfundsudvikling og planlægning Landinspektøruddannelsens 10. semester Fibigerstræde 11, 9220 Aalborg Ø Aalborg Universitet Institut for samfundsudvikling og planlægning Landinspektøruddannelsens 10. semester Fibigerstræde 11, 9220 Aalborg Ø Titel: Automatisk Opdatering af BIM Synopsis: Dette afgangsprojekt

Læs mere

Terrestrisk laserscanning

Terrestrisk laserscanning Terrestrisk laserscanning Indvendig 3D-opmåling Lysehøj og Nielsen Aalborg Universitet TERRESTRISK LASERSCANNING - INDVENDIG 3D-OPMÅLING AFGANGSPROJEKT AF GITTE LYSEHØJ ESKIL KJÆRSHØJ NIELSEN LANDINSPEKTØRUDDANNELSEN

Læs mere

Afgangsprojekt Humanøkologi 2002

Afgangsprojekt Humanøkologi 2002 Afgangsprojekt Humanøkologi 2002 Medarbejderdeltagelsen betydning i forhold til virksomhedens forebyggende miljøindsats M iljøkortlægning Gennem førelse og erfaringsopsamling Vurdering M iljøhandlingsprogram

Læs mere

DIO. Faglige mål for Studieområdet DIO (Det internationale område)

DIO. Faglige mål for Studieområdet DIO (Det internationale område) DIO Det internationale område Faglige mål for Studieområdet DIO (Det internationale område) Eleven skal kunne: anvende teori og metode fra studieområdets fag analysere en problemstilling ved at kombinere

Læs mere

Metoder og struktur ved skriftligt arbejde i idræt.

Metoder og struktur ved skriftligt arbejde i idræt. Metoder og struktur ved skriftligt arbejde i idræt. Kort gennemgang omkring opgaver: Som udgangspunkt skal du når du skriver opgaver i idræt bygge den op med udgangspunkt i de taksonomiske niveauer. Dvs.

Læs mere

Eksamensprojekt

Eksamensprojekt Eksamensprojekt 2017 1 Eksamensprojekt 2016-2017 Om eksamensprojektet Som en del af en fuld HF-eksamen skal du udarbejde et eksamensprojekt. Eksamensprojektet er en del af den samlede eksamen, og karakteren

Læs mere

Vejledning til Projektopgave. Akademiuddannelsen i projektstyring

Vejledning til Projektopgave. Akademiuddannelsen i projektstyring Vejledning til Projektopgave Akademiuddannelsen i projektstyring Indholdsfortegnelse: Layout af projektopgave!... 3 Opbygning af projektopgave!... 3 Ad 1: Forside!... 4 Ad 2: Indholdsfortegnelse inkl.

Læs mere

Access version 1.5 Totalstation Opstilling Opmåling Afsætning

Access version 1.5 Totalstation Opstilling Opmåling Afsætning Access version 1.5 Totalstation Opstilling Opmåling Afsætning Juli 2010 Per Dahl Johansen GEOTEAM A/S [email protected] Opstilling Opstilling af selve instrumentet Instrumentet opstilles på stativet og stilles

Læs mere

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Hassansalem.dk/delpin User: admin Pass: admin BACKEND Hassansalem.dk/delpin User: admin Pass: admin BACKEND 1/10 Indledning Dette projekt er den afsluttende del af web udvikling studiet på Erhvervs Lillebælt 1. semester. Projektet er udarbejdet med Del-pin

Læs mere

Tips og vejledning vedrørende den tredelte prøve i AT, Nakskov Gymnasium og HF

Tips og vejledning vedrørende den tredelte prøve i AT, Nakskov Gymnasium og HF Tips og vejledning vedrørende den tredelte prøve i AT, Nakskov Gymnasium og HF Den afsluttende prøve i AT består af tre dele, synopsen, det mundtlige elevoplæg og dialogen med eksaminator og censor. De

Læs mere

Niels Koefoed Nielsen Landinspektør +45 7733 2270 [email protected]

Niels Koefoed Nielsen Landinspektør +45 7733 2270 nkn@le34.dk For yderligere oplysninger venligst kontakt: Partner, BIM - Lokalplaner og 3D laserscanning Lokalplaner LE34 har i mange år deltaget i lokalplaners tilblivelse og i virkeliggørelsen af lokalplaner LE34

Læs mere

Anvendelse af matematik til konkrete beregninger

Anvendelse af matematik til konkrete beregninger Anvendelse af matematik til konkrete beregninger ved J.B. Sand, Datalogisk Institut, KU Praktisk/teoretisk PROBLEM BEREGNINGSPROBLEM og INDDATA LØSNINGSMETODE EVT. LØSNING REGNEMASKINE Når man vil regne

Læs mere

ANALOG vs DIGITAL. figur 1: fotografi af en blyantsstreg. figur 2: en linje beskrevet som formel er omsat til pixels

ANALOG vs DIGITAL. figur 1: fotografi af en blyantsstreg. figur 2: en linje beskrevet som formel er omsat til pixels ANALOG vs DIGITAL Ordet digitalt bliver brugt ofte indenfor skitsering. Definitionen af digitalt er en elektronisk teknologi der genererer, gemmer, og processerer data ved at benytte to tilstande: positiv

Læs mere

Titel: Enmandsbetjent totalstation - Bonus eller byrde? Tema: Faglig og professionel udvikling Projektperiode: 1. sep. - 12. jan.

Titel: Enmandsbetjent totalstation - Bonus eller byrde? Tema: Faglig og professionel udvikling Projektperiode: 1. sep. - 12. jan. Titel: Enmandsbetjent totalstation - Bonus eller byrde? Institut for Samfundsudvikling og Planlægning Aalborg Universitet Fibigerstræde 11-13 9220 Aalborg Øst Danmark Tlf: 9635 8080 Landinspektøruddannelsens

Læs mere

Detaljering af BIM-objekter

Detaljering af BIM-objekter Detaljering af BIM-objekter BIM-objektet skal ikke være en fotorealistisk visualisering af byggematerialet - kvaliteten af de tilknyttede produktdata er vigtigere (og ofte overset). Hvilke krav stiller

Læs mere

Større skriftlige opgaver i Microsoft Word 2007 Indhold

Større skriftlige opgaver i Microsoft Word 2007 Indhold Større skriftlige opgaver i Microsoft Word 2007 Indhold Større skriftlige opgaver i Microsoft Word 2007... 1 Inddeling i afsnit... 2 Sideskift... 2 Sidetal og Sektionsskift... 3 Indholdsfortegnelse...

Læs mere

Eksamensprojektet - hf-enkeltfag Vejledning August 2010

Eksamensprojektet - hf-enkeltfag Vejledning August 2010 Eksamensprojektet - hf-enkeltfag Vejledning August 2010 Alle bestemmelser, der er bindende for undervisningen og prøverne i de gymnasiale uddannelser, findes i uddannelseslovene og de tilhørende bekendtgørelser,

Læs mere

AkademiMerkonom VEJLEDNING I PROJEKTARBEJDE. Nordjyllands Erhvervsakademi

AkademiMerkonom VEJLEDNING I PROJEKTARBEJDE. Nordjyllands Erhvervsakademi AkademiMerkonom VEJLEDNING I PROJEKTARBEJDE Forord For at kunne indstille sig til eksamen i de enkelte fagmoduler på 1. del og det obligatoriske fagmodul på 2. del på AkademiMerkonom skal den studerende

Læs mere

Forberedelse. Forberedelse. Forberedelse

Forberedelse. Forberedelse. Forberedelse Formidlingsopgave AT er i høj grad en formidlingsopgave. I mange tilfælde vil du vide mere om emnet end din lærer og din censor. Det betyder at du skal formidle den viden som du er kommet i besiddelse

Læs mere

Forberedelse. Forberedelse. Forberedelse

Forberedelse. Forberedelse. Forberedelse Formidlingsopgave AT er i høj grad en formidlingsopgave. I mange tilfælde vil du vide mere om emnet end din lærer og din censor. Dæng dem til med fakta! Det betyder at du skal formidle den viden som du

Læs mere

Gruppebaseret projekteksamen på SUND

Gruppebaseret projekteksamen på SUND Det Sundhedsvidenskabelige Fakultet Niels Jernes Vej 10 9220 Aalborg Øst Tlf. 9940 9940 Fax 9815 9757 www.sundhedsvidenskab.aau.dk Gruppebaseret projekteksamen på SUND Vejledning til studerende, projektvejledere,

Læs mere

DTU Campus Service DTU - BYGHERRERÅDGIVNING IKT Beskrivelse af DTU LOK koordinatsystemet. Den oprindelige definition af DTU-LOK er desværre gået tabt.

DTU Campus Service DTU - BYGHERRERÅDGIVNING IKT Beskrivelse af DTU LOK koordinatsystemet. Den oprindelige definition af DTU-LOK er desværre gået tabt. Notat DTU Campus Service DTU - BYGHERRERÅDGIVNING IKT Beskrivelse af DTU LOK koordinatsystemet 17. februar 2015 Projekt nr. 210914 Dokument nr. 1212704515 Version 5 Udarbejdet af MMKS 1 INDLEDNING Da DTU

Læs mere

Synopsisvejledning til Almen Studieforberedelse

Synopsisvejledning til Almen Studieforberedelse 1 Synopsisvejledning til Almen Studieforberedelse Dette papir er en vejledning i at lave synopsis i Almen Studieforberedelse. Det beskriver videre, hvordan synopsen kan danne grundlag for det talepapir,

Læs mere

Formål & Mål. Ingeniør- og naturvidenskabelig. Metodelære. Kursusgang 1 Målsætning. Kursusindhold. Introduktion til Metodelære. Indhold Kursusgang 1

Formål & Mål. Ingeniør- og naturvidenskabelig. Metodelære. Kursusgang 1 Målsætning. Kursusindhold. Introduktion til Metodelære. Indhold Kursusgang 1 Ingeniør- og naturvidenskabelig metodelære Dette kursusmateriale er udviklet af: Jesper H. Larsen Institut for Produktion Aalborg Universitet Kursusholder: Lars Peter Jensen Formål & Mål Formål: At støtte

Læs mere

Notat. DTU CAS DTU FIKSPUNKTER Beskrivelse af fikspunkter INDHOLD. 1 Baggrund Etablering af de fysiske fikspunkter... 4

Notat. DTU CAS DTU FIKSPUNKTER Beskrivelse af fikspunkter INDHOLD. 1 Baggrund Etablering af de fysiske fikspunkter... 4 Notat DTU CAS DTU FIKSPUNKTER Beskrivelse af fikspunkter April 2017 Udarbejdet af MMKS Kontrolleret af MHFR og LRLA Godkendt af MMKS INDHOLD 1 Baggrund... 2 1.1 Resultater... 3 2 Etablering af de fysiske

Læs mere

Sygeplejefaglige projekter

Sygeplejefaglige projekter Hæmatologisk afdeling X Sygeplejefaglige projekter - En vejledning Hæmatologisk afdeling X Sygeplejefaglige projekter Hæmatologisk afd. X Det er afdelingens ønske at skabe rammer for, at sygeplejersker

Læs mere

TIL OPGAVESKRIVEREN. Før selve opgaveugen. Formål med opgaven.

TIL OPGAVESKRIVEREN. Før selve opgaveugen. Formål med opgaven. TIL OPGAVESKRIVEREN Formål med opgaven. Den større skriftlige opgave i biologi er en eksamensopgave, hvor der gives en selvstændig karakter, som tæller med på eksamensbeviset på lige fod med de øvrige

Læs mere

Korsør Sygehus Møllebjergvej 11, 4225 Korsør (Matr.nr. 92x Korsør Markjorder)

Korsør Sygehus Møllebjergvej 11, 4225 Korsør (Matr.nr. 92x Korsør Markjorder) Korsør Sygehus Møllebjergvej 11, 4225 Korsør (Matr.nr. 92x Korsør Markjorder) Bygningsarealer (på bygningsniveau med angivelse af Trappe- og /adgangsarealer) Opmålt september 2015 Rapport Udarbejdet: 22.09.2015

Læs mere

Projektarbejde vejledningspapir

Projektarbejde vejledningspapir Den pædagogiske Assistentuddannelse 1 Projektarbejde vejledningspapir Indhold: Formål med projektet 2 Problemstilling 3 Hvad er et problem? 3 Indhold i problemstilling 4 Samarbejdsaftale 6 Videns indsamling

Læs mere

Klare MÅL. Matematik D/C

Klare MÅL. Matematik D/C Klare MÅL Matematik D/C 2 Matematik F/E Mål for undervisningen - Niveau D 1. Eleven kan anvende matematisk modellering til løsning af opgaver og undersøgelse af spørgsmål fra erhverv, hverdag eller samfund,

Læs mere

Netbaseret spørgeskemaundersøgelse

Netbaseret spørgeskemaundersøgelse E-læringsmodul til samfundsfag i folkeskolen Netbaseret spørgeskemaundersøgelse It-færdighedsniveau: 1 2 3 4 5 Udarbejdet af: Hasse Francker Christensen Indhold af modulet Indholdsfortegnelse 1 - Hvorfor

Læs mere

VEJLEDNING I REGISTRERING MED BORINGSFIKS- OG PEJLEPUNKTER

VEJLEDNING I REGISTRERING MED BORINGSFIKS- OG PEJLEPUNKTER VEJLEDNING I REGISTRERING MED BORINGSFIKS- OG PEJLEPUNKTER Formål Denne vejledning har til formål at beskrive, hvordan boringsfikspunkter, terrænkoter, pejlepunkter og andre afledede højdedata registreres

Læs mere

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4 Læringsprogram Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4 R o s k i l d e T e k n i s k e G y m n a s i u m Indholdsfortegnelse FORMÅL...

Læs mere

Skrivning af fagprøve. Det er ikke en disputats!

Skrivning af fagprøve. Det er ikke en disputats! Skrivning af fagprøve Det er ikke en disputats! Formål med fagprøven Fagprøven har til formål at evaluere elevens opnåede faglige, generelle og personlige kvalifikationer inden for kontor- og handelsuddannelsen.

Læs mere

Skrevet af stud. geom. Martin Hedegaard, Aalborg Universitet, virksomhedspraktikant

Skrevet af stud. geom. Martin Hedegaard, Aalborg Universitet, virksomhedspraktikant Laserscanning af Boy Skrevet af stud. geom. Martin Hedegaard, Aalborg Universitet, virksomhedspraktikant hos AAKJAER Landinspektører. Kunstværket Boy blev skabt af den australske kunstner Ron Muecks i

Læs mere

AT og Synopsisprøve Nørre Gymnasium

AT og Synopsisprøve Nørre Gymnasium AT og Synopsisprøve Nørre Gymnasium Indhold af en synopsis (jvf. læreplanen)... 2 Synopsis med innovativt løsingsforslag... 3 Indhold af synopsis med innovativt løsningsforslag... 3 Lidt om synopsen...

Læs mere

Leica DISTO S910 Mål punktdata og dan flader

Leica DISTO S910 Mål punktdata og dan flader Leica DISTO S910 Mål punktdata og dan flader Verdens første Mål alt fra ethvert punkt med P2P Technology Det er over tyve år siden Leica Geosystems opfandt og lancerede den første håndholdte laser-afstandsmåler

Læs mere

Almen studieforberedelse. - Synopsiseksamen 2015

Almen studieforberedelse. - Synopsiseksamen 2015 Almen studieforberedelse - Synopsiseksamen 2015 - En vejledning Thisted Gymnasium - stx og hf Ringvej 32, 7700 Thisted www.thisted-gymnasium.dk [email protected] tlf. 97923488 - fax 97911352 REGLERNE

Læs mere

side 1 side 2 side 3 side 3 side 3 side 4 side 5 side 6 side 7 side 7 side 7 side 7 side 7 side 8 side 8-17 side 18-21

side 1 side 2 side 3 side 3 side 3 side 4 side 5 side 6 side 7 side 7 side 7 side 7 side 7 side 8 side 8-17 side 18-21 side 1 side 2 side 3 side 3 side 3 side 4 side 5 side 6 side 7 side 7 side 7 side 7 side 7 side 8 side 8-17 side 18-21 Indholdsfortegnelse Geometrimodulet Start geometrimodulet Udfyldning af talfelter

Læs mere

P2 Projektet. P2-vejlederne Redigeret af Kurt Nørmark. Datalogi og Software Første Studieår Aalborg Universitet

P2 Projektet. P2-vejlederne Redigeret af Kurt Nørmark. Datalogi og Software Første Studieår Aalborg Universitet P2 Projektet P2-vejlederne Redigeret af Kurt Nørmark Datalogi og Software Første Studieår Aalborg Universitet Forårssemestret 2015 Introduktion til P2 projektforløbet Til dette P2 projektforløb vil der

Læs mere

Aktivitet: Du kan skrive et specialeoplæg ud fra punkterne nedenfor. Skriv så meget du kan (10)

Aktivitet: Du kan skrive et specialeoplæg ud fra punkterne nedenfor. Skriv så meget du kan (10) Aktivitet: Du kan skrive et specialeoplæg ud fra punkterne nedenfor. Skriv så meget du kan (10) 1. Det er et problem at... (udgangspunktet, igangsætteren ). 2. Det er især et problem for... (hvem angår

Læs mere

Eksamensprojekt

Eksamensprojekt Eksamensprojekt 2019 1 Eksamensprojekt 2018-2019 Om eksamensprojektet Som en del af en fuld HF-eksamen skal du udarbejde et eksamensprojekt. Eksamensprojektet er en del af den samlede eksamen, og karakteren

Læs mere

TAGISOLERING BRUGERVEJLEDNING (VERSION 0.9.2)

TAGISOLERING BRUGERVEJLEDNING (VERSION 0.9.2) TAGISOLERING BRUGERVEJLEDNING (VERSION 0.9.2) Denne brugervejledning beskriver kort hvorledes Tagisolering -programmet benyttes. Indledningsvis gennemgås de forskellige menuer, knap panelet, input, beregningsvinduer

Læs mere

Fag: Projekt E1PRJ1 Emne: Kravspecifikation Softdrink-Automat Gruppe: 6 Dato: 10. april 2003 Medlemmer: Benjamin Sørensen, Joanna Christensen, Jacob

Fag: Projekt E1PRJ1 Emne: Kravspecifikation Softdrink-Automat Gruppe: 6 Dato: 10. april 2003 Medlemmer: Benjamin Sørensen, Joanna Christensen, Jacob Fag: Projekt E1PRJ1 Emne: Kravspecifikation Softdrink-Automat Gruppe: 6 Dato: 10. april 2003 Medlemmer: Benjamin Sørensen, Joanna Christensen, Jacob Nielsen, Jesper Kock, Klaus Eriksen, Mikkel Larsen og

Læs mere

Bilag 6. Referat M I L J Ø M I N I S T E R I E T. Hans Jacobsen, Kortkontoret, Esbjerg Kommune Mogens Lang Nielsen, Landinspektørerne Syd I/S

Bilag 6. Referat M I L J Ø M I N I S T E R I E T. Hans Jacobsen, Kortkontoret, Esbjerg Kommune Mogens Lang Nielsen, Landinspektørerne Syd I/S Bilag 6 Referat M I L J Ø M I N I S T E R I E T Hans Jacobsen, Kortkontoret, Esbjerg Kommune Mogens Lang Nielsen, Landinspektørerne Syd I/S Mette Kjærsgaard, Matrikel- og Juraområdet, KMS KORT & MATRIKELSTYRELSEN

Læs mere

Elevvejledning HF Større skriftlige opgaver Århus Akademi 2006

Elevvejledning HF Større skriftlige opgaver Århus Akademi 2006 NAVN: KLASSE: Elevvejledning HF Større skriftlige opgaver Århus Akademi 2006 Indholdsfortegnelse: 1. Placering af opgaverne s.1 2. Den større skriftlige opgave s.1 3. Generel vejledning til den større

Læs mere

Danmarks byer fra nye vinkler

Danmarks byer fra nye vinkler Danmarks byer fra nye vinkler DDSby Danmarks Digitale Skråfoto Danmarks byer fra nye vinkler Behovet for visuel dokumentation er stigende. Detaljeret dokumentation af både land- og byområder er efterspurgt

Læs mere

BONUSINFORMATIONER i forbindelse med emnet Billeder og grafik

BONUSINFORMATIONER i forbindelse med emnet Billeder og grafik BONUSINFORMATIONER i forbindelse med emnet Billeder og grafik Dette dokument indeholder yderligere informationer, tips og råd angående: Tabelfunktionen SmartArtfunktionen Billedfunktionen Samt en ekstra

Læs mere

Store skriftlige opgaver

Store skriftlige opgaver Store skriftlige opgaver Gymnasiet Dansk/ historieopgaven i løbet af efteråret i 2.g Studieretningsprojektet mellem 1. november og 1. marts i 3.g ( årsprøve i januar-februar i 2.g) Almen Studieforberedelse

Læs mere

Vejledning til kompetencemålsprøve. - For studerende

Vejledning til kompetencemålsprøve. - For studerende Vejledning til kompetencemålsprøve - For studerende Kompetencemålsprøven Hvert praktikniveau afsluttes med en kompetencemålsprøve. På praktikniveau 1 og 3 er kompetencemålsprøven ekstern og på praktikniveau

Læs mere

Formalia KS på Svendborg Gymnasium og HF

Formalia KS på Svendborg Gymnasium og HF Formalia KS på Svendborg Gymnasium og HF Til mundtlig eksamen i KS skal kursisterne udarbejde et eksamensprojekt i form af en synopsis. En synopsis er et skriftligt oplæg, der bruges i forbindelse med

Læs mere

Nordkystens Fremtid. Forundersøgelser. Topografisk survey GRIBSKOV KOMMUNE

Nordkystens Fremtid. Forundersøgelser. Topografisk survey GRIBSKOV KOMMUNE Nordkystens Fremtid Forundersøgelser Topografisk survey GRIBSKOV KOMMUNE 12. FEBRUAR 2018 Gribskov Kommune 12. februar 2018 www.niras.dk Indhold 1 Indledning 3 2 Dataindsamling og databehandling 3 2.1

Læs mere

AT-eksamen på SSG. Projektarbejde, synopsis, talepapir og eksamen

AT-eksamen på SSG. Projektarbejde, synopsis, talepapir og eksamen AT-eksamen på SSG Projektarbejde, synopsis, talepapir og eksamen Litteratur Inspirationsmateriale fra UVM (USB) Primus - grundbog og håndbog i almen studieforberedelse AT-eksamen på EMU Skolens egen folder

Læs mere

Studenterportalen. Registrering og upload af bacheloropgaver og andre afgangsprojekter. Professionshøjskolen Metropol, marts 2011

Studenterportalen. Registrering og upload af bacheloropgaver og andre afgangsprojekter. Professionshøjskolen Metropol, marts 2011 Studenterportalen Registrering og upload af bacheloropgaver og andre afgangsprojekter Professionshøjskolen Metropol, marts 2011 Forord Dette materiale har til formål at beskrive hvordan du registrerer

Læs mere

3. semester, bacheloruddannelsen i Samfundsfag som centralt fag ved Aalborg Universitet

3. semester, bacheloruddannelsen i Samfundsfag som centralt fag ved Aalborg Universitet , bacheloruddannelsen i Samfundsfag som centralt fag ved Aalborg Universitet Semesterbeskrivelse Oplysninger om semesteret Skole: Skolen for Statskundskab Studienævn: Studienævnet for Politik & Administration

Læs mere

Kom-i-gang vejledning opmålingsprogram

Kom-i-gang vejledning opmålingsprogram Kom-i-gang vejledning opmålingsprogram Billedprislisten Udarbejdet af EG Byg & Installation den 12. marts 2010 Opdateret den 18. februar 2011 Indholdsfortegnelse 1 Gulve... 3 1.1 Opmåling af gulvflade...

Læs mere

Brugermanual. Byggeweb Capture Entreprenør 7.38

Brugermanual. Byggeweb Capture Entreprenør 7.38 Brugermanual Byggeweb Capture Entreprenør 7.38 Indholdsfortegnelse Byggeweb Capture... 5 Indledning... 5 Hvad er Byggeweb Capture... 5 Principper... 6 Opbygning... 7 Projektinfo - Entreprenør... 7 Opsummering

Læs mere

Studieretningsopgave (SRO) i 2g Elevmanual til studieretningsopgaven

Studieretningsopgave (SRO) i 2g Elevmanual til studieretningsopgaven Elevmanual til studieretningsopgaven 2g, 2014 Indholdsfortegnelse: I. Studieretningsopgaven - Hvad og hvorfor? s. 3 II. Opgaveprocessen s. 3 III. Oversigt over fag til studieretningsopgaven s. 4 IV. Studieretningsopgavens

Læs mere

Eksempler på temaopgaver i matematik indenfor geometri

Eksempler på temaopgaver i matematik indenfor geometri Eksempler på temaopgaver i matematik indenfor geometri Med udgangspunkt i begrebsafklaringen fra dokumentet Matematik og den ny skriftlighed gives her fem eksempler på, hvordan de forskellige opgavetyper,

Læs mere

I dag: Digital projektering -formål. Give jer et indblik i, hvad det betyder at projektere digitalt, og hvad det kræver især med hensyn til data.

I dag: Digital projektering -formål. Give jer et indblik i, hvad det betyder at projektere digitalt, og hvad det kræver især med hensyn til data. I dag: Digital projektering -formål Give jer et indblik i, hvad det betyder at projektere digitalt, og hvad det kræver især med hensyn til data. Dagens emner Hvad er et digitalt kort? Digitale grunddata

Læs mere

Opgavekriterier. O p g a v e k r i t e r i e r. Eksempel på forside

Opgavekriterier. O p g a v e k r i t e r i e r. Eksempel på forside Eksempel på forside Bilag 1 Opgavekriterier - for afsluttende skriftlig opgave ved Specialuddannelse for sygeplejersker i intensiv sygepleje......... O p g a v e k r i t e r i e r Udarbejdet af censorformandskabet

Læs mere

ROSKILDE TEKNISKE GYMNASIUM. Læringsprogram. Lommeregner

ROSKILDE TEKNISKE GYMNASIUM. Læringsprogram. Lommeregner ROSKILDE TEKNISKE GYMNASIUM Læringsprogram Lommeregner Programmering Malte Fibiger, Rasmus Ketelsen, Nicojal Jensen og Leon Bøgelund, Klasse 3.36 04-12-2012 Indholdsfortegnelse Indledende afsnit... 3 Problemformulering...

Læs mere

Landmaling. en introduktion. Landmåling en introduktion. Landmåling en introduktion. Nyt Teknisk Forlag. Jørgen Ullvit og Lars Fredensborg Matthiesen

Landmaling. en introduktion. Landmåling en introduktion. Landmåling en introduktion. Nyt Teknisk Forlag. Jørgen Ullvit og Lars Fredensborg Matthiesen Er en indføring i landmåling, og er primært tiltænkt studerende på uddannelserne til bygningskonstruktør, byggetekniker og kort- og landmålingstekniker. Den vil uden tvivl også kunne finde anvendelse på

Læs mere

Københavns åbne Gymnasium

Københavns åbne Gymnasium Københavns åbne Gymnasium Info om AT -Almen studieforberedelse Redaktion Nina Jensen Almen studieforberedelse Generel og overordnet beskrivelse. AT er et tværfagligt fag, hvor man undersøger en bestemt

Læs mere

1. KATEGORIER AF BYGNINGSDELE OG KORTLÆGNING AF OMFANG

1. KATEGORIER AF BYGNINGSDELE OG KORTLÆGNING AF OMFANG Titel Undertitel Udgave - Vejledning i Ramme- og Miniudbud: Bygherrekrav til opnåelse af bedre, hurtigere og billigere 1. udgave Udgivelsesår 2012 Redigering Forfattere Illustrationer og Layout Forside

Læs mere

Vejledning SC 12.20. Per Dahl Johansen GEOTEAM A/S. [email protected]

Vejledning SC 12.20. Per Dahl Johansen GEOTEAM A/S. pdj@geoteam.dk Vejledning SC 12.20. Per Dahl Johansen GEOTEAM A/S [email protected] Indhold: OPRET NYT JOB...4 JOBNAVN OG STIFINDER...4 DK SYSTEM2000 - UTM OG KP2000...5 DK SYSTEM 34...5 ØVRIGE JOB EGENSKABER...6 KOPIER

Læs mere

Ekspertgruppen for afklaring af tekniske problemstillinger ved at etablere og implementere en ny kortprojektion.

Ekspertgruppen for afklaring af tekniske problemstillinger ved at etablere og implementere en ny kortprojektion. Ekspertgruppen for afklaring af tekniske problemstillinger ved at etablere og implementere en ny kortprojektion. Erik Wirring, LE34 Peter Cederholm, AAU Henrik Vad Jensen, Vejdirektoratet Per Knudsen,

Læs mere

Januar a 102. anvisning aftale og kommunikation. IKT-specifikationer

Januar a 102. anvisning aftale og kommunikation. IKT-specifikationer Januar 2016 a 102 anvisning aftale og kommunikation IKT-specifikationer Kolofon 2016-01- 08

Læs mere

Københavns åbne Gymnasium

Københavns åbne Gymnasium Københavns åbne Gymnasium Generel information om AT Almen studieforberedelse - 2016 Redaktion Nina Jensen Almen studieforberedelse Hvad er AT? AT er en arbejdsmetode, hvor man undersøger en bestemt sag,

Læs mere

Modulbeskrivelse. Modul 14. Bachelorprojekt. Sygeplejeprofessionen kundskabsgrundlag og metoder. Professionsbachelor i sygepleje

Modulbeskrivelse. Modul 14. Bachelorprojekt. Sygeplejeprofessionen kundskabsgrundlag og metoder. Professionsbachelor i sygepleje Modulbeskrivelse Modul 14 Bachelorprojekt Sygeplejeprofessionen kundskabsgrundlag og metoder Professionsbachelor i sygepleje 1 Indholdsfortegnelse Introduktion til modul 14 beskrivelsen... 3 Modul 14 -

Læs mere

TIPS OG TRICKS I PROJEKTSKRIVNING

TIPS OG TRICKS I PROJEKTSKRIVNING TIPS OG TRICKS I PROJEKTSKRIVNING FORMELLE KRAV TIL RAPPORTEN Længde: Bilag: 5-10 sider (med font str. svarende til Times New Roman 12) Hvis det ønskes kan evt. ekstra figurer, specifikke udregninger,

Læs mere

Tips og vejledning vedrørende den tredelte prøve i AT, Nakskov Gymnasium og HF

Tips og vejledning vedrørende den tredelte prøve i AT, Nakskov Gymnasium og HF Tips og vejledning vedrørende den tredelte prøve i AT, Nakskov Gymnasium og HF Den afsluttende prøve i AT består af tre dele, synopsen, det mundtlige elevoplæg og dialogen med eksaminator og censor. De

Læs mere

Elevforudsætninger I forløbet indgår aktiviteter, der forudsætter, at eleverne kan læse enkle ord og kan samarbejde i grupper om en fælles opgave.

Elevforudsætninger I forløbet indgår aktiviteter, der forudsætter, at eleverne kan læse enkle ord og kan samarbejde i grupper om en fælles opgave. Undersøgelse af de voksnes job Uddannelse og job; eksemplarisk forløb 0-3.klasse Faktaboks Kompetenceområde: Fra uddannelse til job Kompetencemål: Eleven kan beskrive forskellige uddannelser og job Færdigheds-

Læs mere

Modulbeskrivelse. Modul 14. Bachelorprojekt. Professionsbachelor i sygepleje

Modulbeskrivelse. Modul 14. Bachelorprojekt. Professionsbachelor i sygepleje Sygeplejerskeuddannelsen UCSJ Modulbeskrivelse Modul 14 Bachelorprojekt Professionsbachelor i sygepleje Indholdsfortegnelse Introduktion til modul 14 beskrivelsen... 3 Modul 14 - Bachelorprojekt... 3 Studieaktivitetsmodel

Læs mere

Kort- og landmålingsteknikeruddannelsens

Kort- og landmålingsteknikeruddannelsens Semesterorientering Kort- og landmålingsteknikeruddannelsens 4. semester December 2014 2 Indholdsfortegnelse 1. GENERELT... 3 2. VEJLEDENDE SKEMATISK OVERSIGT OVER FJERDE SEMESTER.... 5 3. VALGDELEN...

Læs mere

OM AT SKRIVE PROGRAM. OM AT SKRIVE PROGRAM - Studio Transformation & Architectural herritage - 6. oktober 2015 - Maj Bjerre Dalsgaard

OM AT SKRIVE PROGRAM. OM AT SKRIVE PROGRAM - Studio Transformation & Architectural herritage - 6. oktober 2015 - Maj Bjerre Dalsgaard Programarbejdet er et analytisk udfoldet undersøgelsesarbejde, der har til formål at udvikle et kvalificeret grundlag for projektarbejdet Fra studieordningen Projektforløb Arbejdsproces Arbejdsmetode PROCES

Læs mere

Eksamensprojekt, hf-enkeltfag

Eksamensprojekt, hf-enkeltfag Eksamensprojekt, hf-enkeltfag Vejledning Undervisningsministeriet Styrelsen for Undervisning og Kvalitet Gymnasie- og Tilsynskontoret, august 2017 Vejledningen præciserer, kommenterer, uddyber og giver

Læs mere

Rasmus Rønlev, ph.d.-stipendiat og cand.mag. i retorik Institut for Medier, Erkendelse og Formidling

Rasmus Rønlev, ph.d.-stipendiat og cand.mag. i retorik Institut for Medier, Erkendelse og Formidling Rasmus Rønlev, ph.d.-stipendiat og cand.mag. i retorik Institut for Medier, Erkendelse og Formidling Rasmus Rønlev CV i uddrag 2008: Cand.mag. i retorik fra Københavns Universitet 2008-2009: Skrivekonsulent

Læs mere

Kort gennemgang af Samfundsfaglig-, Naturvidenskabeligog

Kort gennemgang af Samfundsfaglig-, Naturvidenskabeligog Kort gennemgang af Samfundsfaglig-, Naturvidenskabeligog Humanistisk metode Vejledning på Kalundborg Gymnasium & HF Samfundsfaglig metode Indenfor det samfundsvidenskabelige område arbejdes der med mange

Læs mere

Elevvejledning HF Større skriftlige opgaver Århus Akademi 2007 2. udgave

Elevvejledning HF Større skriftlige opgaver Århus Akademi 2007 2. udgave Vejledning, HF 1 NAVN: KLASSE: Elevvejledning HF Større skriftlige opgaver Århus Akademi 2007 2. udgave Indholdsfortegnelse: 1. Placering af opgaverne s.1 2. Den større skriftlige opgave s.1 3. Generel

Læs mere

Introduktion til deljordstykker

Introduktion til deljordstykker Vejledning Introduktion til deljordstykker Introduktion til, hvad et deljordstykke er, hvordan bestemmelser bliver nedbrudt til deljordstykker og hvad årsagerne til manuel kontrol i kommunen betyder. Udarbejdet

Læs mere

VUC Nordjylland, Aalborg

VUC Nordjylland, Aalborg Eksamensprojektet er en tværfaglig eksamensopgave, og karakteren for den indgår som en selvstændig karakter på eksamensbeviset. Formålet med projektet er, at du skal have lejlighed til at arbejde tværfagligt

Læs mere

Kom i gang med Course Tool 1.2

Kom i gang med Course Tool 1.2 Kom i gang med Course Tool 1.2 Indhold Indledning...2 Pris beregning...2 Anvendelse...2 Open Source...2 Anbefalinger...2 Installation...3 USB-Pen...3 Download Libre Office (Draw)...3 Indstil makrosikkerhed...4

Læs mere

Michael Jokil 11-05-2012

Michael Jokil 11-05-2012 HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...

Læs mere

Visualiseringsprogram

Visualiseringsprogram Visualiseringsprogram Programmering C - eksamensopgave Rami Kaddoura og Martin Schmidt Klasse: 3.4 Vejleder: Karl Bjarnason Roskilde Tekniske Gymnasium Udleveringsdato: 02-03-2012 Afleveringsdato: 11-05-12

Læs mere