• No results found

Den militære politimyndigheten

4. Hvem kan håndheve forbudet?

4.3. Den militære politimyndigheten

Nesta seção são apresentadas as té ni as utilizadaspara a implementação dainter-

fa egrá a.Oobjetivodainterfa egrá anestetrabalhoéaexibiçãodalo alização

doveí ulo durante o trajeto dentro doCampus daUFMG. Para isso, um mapa do

Campus UFMGfoiobtidojuntoaoDepartamentode PlanejamentoFísi oe Obras.

Ainterfa egrá afoi onstruídanoambienteVisualC++utilizandoaAPIOpenGL

eté ni as de geometria omputa ionalimplementadas nabibliote aCGAL. Os de-

talhesda implementaçãoserão apresentados a seguir.

5.2.1 Ferramentas Utilizadas

Emrobóti amóvelé omumquesedesejeutilizarevisualizarinformaçõesdemapas

da região onde o rob se lo omove. Porém, a visualização da lo alização do rob

nomapa setornadifí ilsea regiãoexibida forarepresentação de umagrandeárea.

utilizadaspara a implementação de um algoritmoque armazena as informações do

mapaemuma estrutura dedados esele ionaossegmentosque estãodentrode uma

área emtorno dalo alizaçãodo veí ulo.

O mapa utilizado neste trabalho onsiste em uma planta baixa das ruas e

prédiosdoCampusdaUFMGreferen iadoem oordenadasUTM.Oarmazenamento

do mapa no omputador foi feito por meio dos segmentos de reta presentes nesse

mapa,queformamasruaseprédiosdoCampus. Omapafoioriginalmenteobtidono

formato.dwg, extensão de um arquivo produzidopeloprograma AutoCad. Nesse

programaépossíveldesenharsegmentos, ír ulos,ar os,retângulos,ouseja,diversas

formas geométri as. Para a onfe ção da interfa e, um requisito era que todo o

mapa fosse representado apenas por segmentos. Assim, foi ne essário en ontrar

uma ferramentaque zesse essa onversão.

A onversão do arquivo .dwg em segmentos foi feita utilizando o software

FEMM 4.0, que permite importar arquivos do tipo .dxf (outra extensão padrão

do AutoCad) e onverter as formas em segmentos. Esse software é geralmente

utilizadoparase onstruirmalhasdeelementosnitoseumaetapaintermediáriada

onstruçãodessas malhaséa riaçãode um arquivo.poly,que ontém ades rição

de todos os segmentos que ompõem o desenho. A vantagem desse método é que

o formato de dados do arquivo .poly 1

é de simples ompreensão e extração da

informação. Além disso, o software FEMM é apaz de onverter todas as formas

geométri asdoarquivoDXFemsegmentosdereta(os ír ulosear os,porexemplos,

são de ompostos empequenos segmentos). A desvantagem dessa ferramentaé que

elanão suportaarquivosDXFmuito grandes, om muitainformação, omoéo aso

dos mapas, e, porisso, foi ne essário dividiro mapa em vários arquivos e reuní-los

apenas naetapa daleitura dos arquivos.

Apósa deniçãodo formatodainformação,foi ne essáriodeterminar osseg-

mentos queestão dentro ouinter eptam uma sub-janela aoredor da lo alizaçãodo

veí ulonomapa(Figura5.2). Umaalternativaparaaseleçãodessessegmentosseria

per orrertodosossegmentosque ompõemomapaebus ar,dentreeles,aquelesque

obede erem à ondição. Porém, esse método seria ine iente, pois gastaria muito

tempoparaser exe utado. Dessaforma,foine essário utilizarumaestruturade da-

dosquepudessearmazenarossegmentosdeformaafa ilitarabus a. Existemalguns

métodose ientes paralidar omojanelamentodesegmentos[de Berg etal.,2000℄.

Esses métodos são apresentados noApêndi e C, onde pode-se en ontrar, também,

detalhes sobre o algoritmosele ionado para este trabalho - a Árvore de Segmentos

(Segment Tree).

Figura5.2: Exemplodabus ade segmentos queestão ontidosouinter eptamuma

janela.

5.2.2 Construção da Interfa e de Exibição do Mapa

Conformemen ionadonaseçãoanterior,oalgoritmodaSegmentTreefoisele ionado

para o armazenamento e bus a dos segmentos do mapa. Com esse algoritmo é

possível onstruiruma árvorebinária om oslimitesdos segmentosdomapa eobter

umabus a dos segmentosque estão ontidos emuma janelaretangular a um baixo

usto omputa ional (ver Apêndi e C).

Asfunçõesne essáriaspara setrabalhar omuma Segment Tree estão imple-

mentadas emuma lasse nabibliote aCGAL(Computational Geometry Algorithms

Library), uma bibliote a de lasses para uso das té ni as de geometria ompu-

ta ional em C++. A lasse Segment_tree_map_traits_2 2

possibilita armazenar

os segmentos que são forne idos pelo mapa em intervalos e os intervalos em uma

árvore de segmentos. A árvore é onstruída através do omando Segment_tree

_2.make_tree(InputList.begin(),InputList.end()),ondeInputListéumalistade in-

tervalos (ossegmentos domapa).

A implementação da CGAL para a Segment Tree apresenta algumas restri-

ções. Para quesepossa inserirumsegmentonaárvore,eledeveser res enteem

x

e em

y

. Emummapa nãoépossíveldeterminaraposiçãoeorientaçãodos segmentos -issodepende,obviamente, doterrenomapeado. Dessaforma,algumasadaptações

no ódigo foram ne essárias. Considerando que (

x

1

,

y

1

) e (

x

2

,

y

2

) são as oordena- das das extremidades(endpoints)de um segmento,existem três situaçõesemque o

segmentonão seria a eito pela lasse:

• x

1

>

x

2

e

y

1

>

y

2

;

• x

1

<

x

2

e

y

1

>

y

2

;

• x

1

>

x

2

e

y

1

<

y

2

.

A primeira situação é simples de ser resolvida, pois tanto a oordenada

x

quanto a

y

de res em, então, basta inverter os pontos

x

1

om

x

2

e

y

1

om

y

2

para queo intervaloseja res ente. A segunda e ater eira situações são um pou o mais

ompli adas,poisenquanto emum dos eixosa oordenada res e,nooutro eixoela

de res e.

Para solu ionar esse problema, os segmentos identi ados em uma dessas

duassituaçõesforamarmazenados emuma listaseparadade segmentosde entrada,

tendosuas oordenadasemxespelhadasemtornode

x = 0

. Essalistade segmentos invertidos foi armazenada emuma árvore separada.

A operação de bus a dos segmentos que estão dentro ou in-

ter eptam uma determinada janela é feita utilizando o omando Seg-

ment_tree_2.window_query(a,std::ba k_inserter(OutputList)), onde a re-

presenta o intervalo que ontém a janela de bus a e OutputList é a lista dos

segmentosque estão dentrodajanela ouinter eptam seus limites.

Para ossegmentosque foramespelhados,a janelade bus atambémpre isou

ontidos na janela. A Figura 5.3 ilustra a utilização do espelho do segmento e da

janelapara torná-loválido para a lasse.

Figura5.3: Segmentos originaiseespelhados -aoperação de espelhamentopossibi-

litaouso daCGAL.

Outro problema o orre quando há segmentos horizontais ou verti ais. Para

fazer om queesses segmentossejam válidos,uma pequena perturbação emum dos

pontos da oordenada inválida foi introduzida, de forma que eles  assem ligeira-

mente res entes, eliminando o problema.

A segunda etapa da implementação onsistiuda es olha daforma mais ade-

quada de se onverter as informações do mapa em segmentos que pudessem ser

trabalhados no programa desenvolvido. Como des rito na seção anterior, a meto-

dologia adotada foi a onversão do arquivo DXF em arquivo .poly, por meio do

programa FEMM 4.0.

Oprogramadesenvolvidoéresponsávelporleroarquivodeentrada, onstruir

aárvore de segmentos, bus ar os segmentos dentrode uma janelade tamanhopré-

denidoe om entronopontoemqueselo alizaoveí uloeexibiressasinformações

gra amente emuma janela. A árvore de segmentos é onstruída apenas uma vez,

no iní io da exe ução do programa. A bus a é realizada sempre que o programa

responsável pela exibição da interfa e re ebe um valor de lo alizaçãodo programa