• Nenhum resultado encontrado

Implementação do gerador de contactos de superfície

CAPÍTULO 6. SIMULADOR MODELOS

6.3 SIMULAÇÃO: GERADOR

6.3.1 Implementação do gerador de contactos de superfície

A partir dos dados do cenário, define momentos de nascimento, atividades e momentos de morte de contactos. Como dados requeridos: a percentagem de terroristas; o time-step; a duração da operação; limites geográficos das áreas de nascimento, trabalho e morte; densidade de nascimentos por área, com indicação de destinos; comportamento selecionado para terroristas; tipologia de embarcações e suas características e obstáculos à navegação, por calado. O resultado final é um

data_mart (matriz ponto, tabela em que cada linha corresponde a um evento e em que cada coluna

corresponde a um atributo desse evento), descrito em pormenor no apêndice A. Na figura 70 é representado o interface do SecurePort, sendo assinalado o local de carregamento de dados essenciais para o gerador de contactos superfície.

Figura 70. Opções associadas ao gerador de contactos

Processo de geração

 Local de origem e tipologia. Por área de nascimento a, ler linha a linha as áreas de destino d, para uma tipologia t, sejam elas de atividade at ou morte m;

 Local de destino, local de trabalho e momento de nascimento. Por hora h obter número pseudo- aleatório n de distribuição normal, desvio padrão 1 e média indicada na densidade de nascimentos (apenas serão aceites valores superiores ou iguais a zero). Temos assim n contactos do tipo t que durante a hora h largarão da área a com destino à área at ou m, para trânsito (caso de área m) ou prática de atividade (caso de área at). O instante preciso da largada, dentro da hora de saída, é obtido com recurso a número pseudo-aleatório de distribuição uniforme, em unidade time_step;

 Associação a atividade terrorista. Caso o contacto seja uma pequena embarcação, é considerado terrorista recorrendo à percentagem definida pelo utilizador usando uma distribuição uniforme; caso o contacto seja do tipo mercante, pode originar um contacto terrorista, seguindo na sua sombra, até que a distância ao centro da área crítica alvo comece a diminuir;

 Rumo inicial. Para obtenção do rumo inicial recorre-se a uma função “próximo_curso” desenvolvida para o efeito, a qual será posteriormente usada pelo motor de simulação. Como parâmetros de entrada necessita de: posição de nascimento do contacto; destino do contacto, polígono da margem desenhado no sentido anti-horário; polígonos de obstáculos no interior do espelho líquido, desenhados no sentido horário. Como parâmetro de saída, fornece o rumo de saída da área inicial.

Cálculo do próximo curso. Algoritmo usado para definição do rumo inicial na geração de contactos e

rumo instantâneo, durante a simulação. Como parâmetros de entrada necessita de: posição de nascimento do contacto; destino do contacto; polígono da margem desenhado no sentido anti- horário; polígonos de obstáculos no interior do espelho líquido, desenhados no sentido horário. Como parâmetro de saída, fornece o rumo de saída da área inicial. Ao contrário de outros algoritmos, mencionados anteriormente no capítulo 1, o destino do contacto ou alvo, pode estar em movimento sem previsão de rumos e velocidades futuros. Por esse motivo, o algoritmo de navegação preocupa- se apenas com o próximo obstáculo em cada instante, repetindo todos os cálculos no instante seguinte, para o obstáculo que entretanto surgir.

Arranque. Verifica se o rumo direto, entre a posição atual e o destino, interseta algum dos obstáculos, fornecidos pelos polígonos das margens e outros traçados pelo utilizador. Caso intersete, guarda a posição de interseção e calcula a distância à posição atual do contacto. Utiliza uma função “procurar_caminho” para cálculo do rumo que permita contornar apenas o obstáculo mais próximo. Caso não intersete, calcula o rumo inicial utilizando o arco da tangente:

Se x>0, rumo=arctg(y/x); (6.20)

Se x≤0, rumo=180+arctg(y/x); (6.21)

onde x e y são as variações em x e y entre a posição de destino e a posição atual, e rumo é dado em graus. A função termina fornecendo como rumo inicial o valor de rumo.

Procurar_caminho. Com base na figura 71, a função “procurar caminho” recebe a posição inicial, a posição final, o polígono do obstáculo 1 e o segmento de reta deste obstáculo sobre o qual se situa o ponto de interseção nº1 (entre v13 e v1). O algoritmo ignora qualquer outro obstáculo, para além daquele que provocou a interseção, procurando um vértice que possibilite o traçado de um segmento de reta até ao destino, não intercetando o obstáculo fornecido (no caso do exemplo, o obstáculo 1). A busca do caminho é agora iniciada pesquisando os vértices do obstáculo 1, no sentido ascendente e descendente, a partir dos extremos do segmento de reta que contém o ponto de interseção 1, ou seja, os vértices 1 e 13. Seguindo o fluxo da figura 72, o algoritmo termina quando se verificam em simultâneo:

 Um dos sentidos encontra um vértice livre, sendo ds a distância entre o ponto inicial-vértices pesquisados-destino;

 O outro sentido ainda não encontrou um vértice livre e a distância entre ponto inicial-vértices pesquisados é superior a ds (de notar que a distância entre o último vértice e o destino não é contabilizado).

Novamente se reitera que o obstáculo 2 não está a ser considerado. Apenas em instantes seguintes, caso o obstáculo 1 deixe de constituir uma obstrução é que os vértices do obstáculo 2 passarão a ser considerados. Não se pretende traçar aqui todo o caminho futuro mas apenas o rumo a assumir no instante.

Figura 71. Algoritmo para contorno de obstáculos

Procura de ponto intermédio, a partir do qual se consiga governar rumo ao destino final, ignorando outros obstáculos

No quadro 47 representam-se os passos dados pelo algoritmo da figura 72, exemplificado na figura 71.

Quadro 47. Análise de vértices dos obstáculos apresentados ao rumo direto

Ascendente Descendente Vértices do caminho Destino visível (ignorando outros obstáculos)? Distância percorrida Vértices do caminho Destino visível (ignorando outros obstáculos)? Distância percorrida v13 não 1,4 v1 não 1,7 v13,v12 não 5,0 v1,v2 não 2,8 v13,v12,v11 sim 37 v1,v2,v3 não 3,9 v1,v2,v3,v4 não 6,4 v1,v2,v3,v4,v5 sim 19

Pela observação do quadro 47 verifica-se que o caminho ascendente chegou primeiro a uma solução admissível. No entanto, o algoritmo continuou porque a distância percorrida entre vértices na busca descendente era inferior à distância total da busca ascendente. O algoritmo finalmente para quando ambas as buscas conseguem um caminho livre. Terminado o algoritmo, verifica-se que a busca descendente consegue um caminho mais curto, passando pelos vértices v1, v2, v3, v4, v5. No

entanto, é visível que a envolvente convexa permitiria eliminar a necessidade de visitar os vértices v1, v2, e v3. Para se obter o caminho mais curto utilizando apenas estes vértices, é desenhado um polígono convexo usando apenas os vértices externos. O resultado deste polígono é visível a tracejado na figura 71. Obtém-se assim que o ponto intermédio para o qual a embarcação se deve dirigir é o vértice v4. O desvio do rumo direto, para evitar a colisão com o obstáculo, deve ser para bombordo (superior ao rumo direto, por se estar a usar um sistema de contagem de ângulos anti- horário). O obstáculo 2 apenas será considerado quando a embarcação atingir o vértice v5, repetindo-se o processo.

Figura 72. Fluxograma da busca pelo vértice que possibilita caminho livre.

Posição inicial: pi, destino: pf. As distâncias registadas nos passos intermédios contemplam percorrer todos os vértices já pesquisados na respetiva busca mas não incluem o destino.

Iteração final de “próximo_curso”. Utilizando a posição intermédia e o resguardo:

Se x>0, rumo=arctg(y/x) + resguardo*10; (6.22)

Se x≤0, rumo=180+arctg(y/x)+resguardo*10; (6.23)

Onde x e y são as variações em x e y entre a posição de destino e a posição intermédia, resguardo {-1,1}, cujo valor varia conforme o obstáculo está traçado no sentido horário ou anti-horário, permitindo que os pontos de costa sejam ultrapassados sem os tocar, à semelhança do sucedido no mundo real. Na realidade, as embarcações contornam os obstáculos sem os tocar, ou seja, não existem tangentes, já que estas obrigariam a colisões. As embarcações navegam assim entre pontos intermédios, até ao instante em que nenhum se cruza entre elas e o seu destino.

Considerações. Não se calcula o percurso completo da embarcação entre a posição inicial e o destino devido à dinâmica envolvida. Em cada ts, a embarcação sofre desvios devido a erros de rumo, variações de velocidade e possível corrente local. Por outro lado, o alvo pode encontrar-se em movimento, contínuo ou não, podendo inclusive vir a tornar-se visível não sendo necessário

contornar nenhum obstáculo. Face a estes desvios, optou-se por calcular novo rumo em cada ts, o qual servirá para atualizar a posição da embarcação no final do time-step atual. Esta opção tomada encarece temporalmente a simulação, devido à lentidão da função “polyxpoly” quando em presença de polígonos de grande dimensão mas permite uma melhor simulação da realidade, onde a navegação reage quase instantaneamente a alterações do destino.

Documentos relacionados