Professional Documents
Culture Documents
Braslia, DF
2014
Gabriel Augusto Barbosa
Braslia, DF
2014
Gabriel Augusto Barbosa
SIMULADOR DE AMBIENTES ACSTICOS ORIENTADO A UMA
ABORDAGEM MULTIAGENTES/ Gabriel Augusto Barbosa. Braslia, DF,
2014-
83 p. : il. (algumas color.) ; 30 cm.
CDU 02:141:005.6
Gabriel Augusto Barbosa
Dr Milene Serrano
Coorientadora
Braslia, DF
2014
Este trabalho dedicado s crianas adultas que,
quando pequenas, sonharam em se tornar cientistas.
Agradecimentos
Agradeo primeiramente a Deus, que plantou em mim um sonho que hoje se ma-
terializa, e pelos dons a mim proporcionados para que eu atinja meus objetivos nessa
caminhada.
Agradeo aos meus pais, Arnaldo Pereira Barbosa e Giselma Augusto de Oliveira,
pela ateno e amor, pelo exemplo de garra e perseverana e principalmente, pelos esforos
a mim dedicados. Vocs so minha maior inspirao.
Agradeo tambm pelo imensurvel apoio da minha irm e amiga Ana Lusa Au-
gusto Barbosa, que por mais difceis que fossem as circunstncias, sempre esteve ao meu
lado.
Agradeo ao grupo de professores de Engenharia de Software da Faculdade UnB
Gama por dedicarem seu tempo e sua sabedoria para minha formao acadmica. Em
especial, sou grato a alguns professores que citarei devido a importantes contribuies
pessoais e profissionais.
Agradeo ao Prof. Ricardo Matos Chaim pelas oportunidades e projetos desenvol-
vidos durante o curso.
Agradeo ao orientador Prof. Maurcio Serrano pela orientao ao longo deste
trabalho e por todas as experincias acadmicas e profissionais compartilhadas; por todos
os ensinamentos fornecidos que so fundamentais para minha formao profissional, seus
ensinamentos abriram horizontes que eu no havia explorado ainda, estendendo ainda
mais minha aprendizagem em diferentes aspectos da Engenharia de Software.
Agradeo Prof. Milene Serrano, coorientadora deste trabalho, agradeo por suas
orientaes, ateno e generosidade em seus ensinamentos. Suas contribuies foram muito
valorosas para o meu desenvolvimento como engenheiro de software;
Agradeo Karolliny Braz de Arajo pelo apoio, amor e pacincia ao longo da
minha formao; por me ajudar a construir um grande futuro e por compartilhar meus
sonhos;
Agradeo aos meus companheiros de graduao, em especial aos meus colegas
Jeann Feitosa Figueiredo, Ewerson Jackson Oliveira Feitosa Carvalho e Luan Guimares
Lacerda, pelo incentivo e apoio constantes alm dos conhecimentos compartilhados ao
longo dessa formao. Vocs continuaro presentes em minha vida com certeza.
Agradeo a equipe da SEPLAN do Tribunal de Contas da Unio, em especial
a Patrcia Jussara Mendes e a Renata Miranda Passos Camargo, pela oportunidade do
convvio que me proporcionou vrios desafios e experincias fundamentais para meu ama-
durecimento e formao durante meu perodo de estgio.
Agradeo aos demais amigos e familiares pelo apoio, amizade e por participarem
ativamente da minha vida pessoal.
Por fim, a todos que direta ou indiretamente fizeram parte da minha formao, o
meu muito obrigado.
Que os vossos esforos desafiem as impossibilidades,
lembrai-vos de que as grandes coisas do homem foram
conquistadas do que parecia impossvel.
(Charles Chaplin)
Resumo
Um projeto acstico deve ser cuidadosamente estudado. Trata-se do projeto acstico de
um ambiente onde o controle da acstica realizado atravs de aplicao de materiais que
influenciam no som. O emprego desses materiais deve ser cuidadosamente estudado a fim
de aplicar materiais que contribuam com um bom projeto acstico e evitar o emprego de
materiais suprfluos.
O uso de simulaes computacionais vem sendo cada vez mais frequente no dia a dia do
projetista acstico, a fim de atingir projetos mais eficientes e que atendam as necessidades
acsticas esperadas pelo cliente.
Neste trabalho, descrevemos a proposta de um simulador que permita a simulao do
comportamento do som dentro de um ambiente fechado para que o projetista e/ou o
especialista em acstica possam acompanhar e avaliar se os parmetros da sala esto
realmente adequados. Trata-se de uma ferramenta de software livre baseada no para-
digma multiagentes, recorrendo a alguns recursos da orientao a objetos. Neste trabalho,
tambm descrita a implementao de uma prova de conceito utilizada para avaliar a
viabilidade do projeto assim como refinar a proposta inicial do projeto.
Hz Hertz
T Perodo
f Frequncia
S Superfcie, medida em 2
Coeficiente de reflexo.
Coeficiente de transmisso.
1 INTRODUO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.1 Contextualizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.2 Questo de pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.3 Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.4 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.4.1 Objetivo geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.4.2 Objetivos especficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5 Organizao do documento . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2 REFERENCIAL TERICO . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1 Acstica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.1 Conceito do som . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.2 Frequncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.3 Intensidade sonora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.1.4 Reflexo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.1.5 Absoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2 Simulao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2.1 Simulao acstica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.3 Sistemas Multiagentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4 Consideraes finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3 SUPORTE TECNOLGICO . . . . . . . . . . . . . . . . . . . . . . . . 37
3.1 Ferramentas de desenvolvimento . . . . . . . . . . . . . . . . . . . . . . 37
3.1.1 JADE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.1.2 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.1.3 JUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.4 Ubuntu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.5 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.6 GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.7 LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2 Simuladores acsticos similares . . . . . . . . . . . . . . . . . . . . . . . 39
3.2.1 Odeon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2.2 AcMus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3 Consideraes finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1 Classificao da pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Planejamento da pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3 Cronograma da pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.4 Modelagem da metodologia . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5 Prova de conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5.1 Especificaes tcnicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.5.2 Descrio da prova de conceito . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.5.3 Refinamento da proposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.6 Consideraes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5 PROPOSTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
APNDICES 55
1 Introduo
Segundo Silva (1971, pg. 17), uma boa acstica em um ambiente consequncia
da aplicao, pelo arquiteto, dos princpios da Acstica Arquitetnica.
Um projeto acstico deve ser cuidadosamente estudado. Deve ser funcional, isto ,
todos os detalhes devero ter uma razo de ser, a fim de se evitar o emprego de materiais
suprfluos, tornando o uso de simulaes computacionais cada vez mais frequentes no dia
a dia do projetista acstico, a fim de atingir projetos mais eficientes e que atendam as
necessidades acsticas esperadas pelo cliente. (SILVA, 1971).
1.1 Contextualizao
Projetos de estdios de gravao, salas de concerto, teatros, salas de aula ou locais
que necessitem de qualidade acstica para realizar suas atividades requerem estudos sobre
suas dimenses, volumetria, forma e composio de suas superfcies. papel do projetista
acstico definir esses parmetros a fim de garantir os requisitos acsticos do projeto.
(RAMIRES, 2011).
Em alguns casos, o volume e a forma desses ambientes j se encontram definidos,
restando, portanto, ao projetista, definir quais materiais iro compor as superfcies desta
sala, a fim de se obter um ambiente que cumpra com sua funo acstica (RAMIRES,
2011).
Segundo Santos (2011, pg. 6), a adaptao do ambiente, de acordo com o uso em
questo, realizada a partir do direcionamento da energia sonora dentro do mesmo. Esta
redistribuio pode ser tratada de diferentes maneiras, de acordo com o projeto ou com
sua finalidade, seja ela msica, fala ou mesmo palestras.
O estudo do comportamento acstico do campo sonoro em ambientes fechados foi
desenvolvido na tentativa de explicar objetivamente como se d o comportamento acstico
de ambientes, bem como os vrios parmetros necessrios para descrever o comportamento
do som dentro de tais ambientes. (TORRES, 2008).
O estudo da acstica de salas data do incio do sculo XX, porm, com a evolu-
o da tecnologia, a simulao acstica de salas sofreu um grande avano, sendo possvel
realizar simulaes que requerem cada vez menos tempo e gastos. Devido a esse avano,
atualmente possvel prever, por exemplo, o comportamento sonoro de salas ainda no
construdas, simular a acstica de construes antigas no mais existentes e ainda melho-
rar a acstica de salas j existentes (TORRES, 2008).
26 Captulo 1. Introduo
Segundo Torres (2008, pg. 1), as possibilidades trazidas pela simulao acstica
so muitas. Com o uso dessa tcnica, por exemplo, possvel projetar/simular uma sala
construda de tijolo e concreto com detalhes e com uma rica qualidade sonora, o qual seria
relativamente complexo sem o uso da simulao acstica.
Neste Trabalho de Concluso de Curso, ser tratado um sistema de simulao
acstica, sendo este uma ferramenta de software livre baseada em uma abordagem mul-
tiagentes. At o momento, no foi possvel encontrar na literatura investigada uma ferra-
menta que rene simulao acstica e uma abordagem multiagentes dentro do contexto
de software livre.
1.3 Justificativa
A construo de salas, estdios musicais, auditrios e ambientes, cuja propagao
sonora um fator importante, nem sempre realizada de maneira adequada. A qualidade
de som, a forma como este se propaga ao longo de uma sala e o isolamento acstico,
so alguns dos fatores determinantes para um bom projeto. Adicionalmente, esses fatores
podem influenciar diretamente na qualidade, nos custos e at mesmo no prprio comrcio
envolvido (SANTOS, 2011).
Em salas de aula, por exemplo, importante saber se nas fileiras mais afastadas do
professor possvel escutar com clareza as explicaes. Alm disso, importante verificar
se o projeto da sala foi eficiente o bastante para garantir que rudos externos no interfiram
na aula.
J em estdios musicais, muito importante medir a qualidade do som, uma vez
que esse fator est diretamente relacionado sua atividade comercial. Alm disso, verificar
se o projeto atende ao requisito de isolamento sonoro do estdio tambm requer especial
ateno (RAMIRES, 2011).
Tendo em vista as dimenses do auditrio, importante verificar qual o melhor
posicionamento dos alto-falantes, para que todos dentro do auditrio possam ouvir o som
com a mesma qualidade.
Atualmente, uma das dificuldades dos desenvolvedores de projetos de construo
civil predizer se o som se comporta adequadamente dentro das especificaes e necessida-
1.4. Objetivos 27
des deste projeto bem como verificar possveis melhorias de projeto, incluindo dimenses,
disposies, materiais, os quais atendam aos requisitos de qualidade do projeto (SANTOS,
2011). Neste sentido, proposto neste trabalho um software que apie visualizao do
comportamento dos elementos sonoros envolvidos em projetos de construo civil, auxili-
ando aqueles interessados na otimizao acstica dentro de determinados ambientes.
1.4 Objetivos
Referencial terico - apresenta uma viso breve sobre os principais conceitos abor-
dados neste trabalho, baseado na literatura disponvel;
28 Captulo 1. Introduo
2 Referencial Terico
2.1 Acstica
Nesta seo sero apresentados alguns conceitos importantes sobre acstica que
sero abordados neste projeto.
2.1.2 Frequncia
Segundo Silva (1971, pg. 34), chama-se de frequncia o nmero de oscilaes
completas por segundo, ou seja, o nmero de idas e voltas completas da partcula vibrante.
A Frequncia medida em ciclos por segundo (c.p.s) ou em Hertz (Hz).
Se representarmos o diagrama das presses para um ponto qualquer de um recinto,
onde se propague o som, em funo do tempo, encontraremos o grfico da figura 1, onde
as presses foram registradas em ordenadas e o tempo em abcissas. As suas unidades so,
respectivamente, 2 e . (SILVA, 1971)
O perodo T o tempo necessrio para se realizar uma oscilao completa. Por-
tanto, sendo a frequncia o nmero de perodos por segundo, a frmula que exprime seu
valor ser (BISTAFA, 2006, pg. 7):
= 1
30 Captulo 2. Referencial Terico
0 = 1012 2
= 1 2
2.1.4 Reflexo
Quando uma onda sonora atinge uma parede ou um obstculo qualquer, parte
da energia incidente refletida, parte dissipada pelo obstculo, transformando-se em
energia calorfica ou mecnica. O restante atravessa o referido obstculo, passando para
o outro lado, transmitindo-se atravs do meio adjacente. (SILVA, 1971).
Se representarmos as ondas sonoras pelos seus raios sonoros, elas sero retas diri-
gidas segundo a direo em que as mesmas caminham. (SILVA, 1971, pg. 84)
O angulo do raio incidente, com a normal superfcie refletora, igual ao ngulo
formado pelo raio refletido com aquela mesma linha e esto no mesmo plano, conforme
representado na figura 3.
2.1.5 Absoro
Em ambientes fechados, a propagao da onda sonora, a partir da fonte, sofre
interferncia das ondas que so refletidas nas superfcies que delimitam o recinto como
paredes, teto e piso. (BISTAFA, 2006, pg 231)
Conforme foi ilustrado na figura 2, quando o som incide sobre uma superfcie, uma
parte da energia sonora refletida, enquanto o restante da energia incidente se compe
de duas outras parcelas: a energia sonora absorvida e a energia sonora transmitida para
o outro lado da superfcie. (BISTAFA, 2006, pg. 231)
Segundo (SILVA, 1971, pg. 126), um material dito acstico absorvente quando
uma grande percentagem da energia sonora que nele incide retida, degradando-se em
energia mecnica ou calorfica, ou ainda transmitindo-se para o outro lado, sendo dele
refletida apenas uma pequena parcela.
2.2. Simulao 33
= + = = 1 1
+ + = + + = 1
2.2 Simulao
A simulao computacional possui diversos conceitos por diferentes autores, porm,
em sua grande maioria, acabam por convergir para o fato de que a simulao contribui para
34 Captulo 2. Referencial Terico
Um sistema multiagentes pode ser descrito como uma comunidade de agentes aut-
nomos, onde estes interagem, se organizam e se comunicam, competindo ou cooperando
uns com os outros, a fim de alcanar o objetivo proposto para esse sistema. (THOMAZ,
2011).
A rea de sistemas multiagentes um promissor domnio tecnolgico para uso
em performances musicais interativas. Essa tecnologia vem sendo utilizada para resolver
problemas musicais de escopo especfico e alcance limitado, como por exemplo, a simulao
de instrumentos e o acompanhamento musical automtico. (THOMAZ, 2011).
3 Suporte Tecnolgico
3.1.1 JADE
3.1.2 Eclipse
1
<http://jade.tilab.com/>
2
<https://www.eclipse.org/org/>
38 Captulo 3. Suporte Tecnolgico
3.1.3 JUnit
JUnit3 um framework open-source simples para escrever testes repetveis na
linguagem de programao Java. um exemplo da arquitetura xUnit para frameworks
de testes de unidade.
3.1.4 Ubuntu
O Ubuntu4 um sistema operacional open source, construdo a partir do ncleo
Linux, baseado no Debian e patrocinado pela Canonical Ltd. Seu desenvolvimento visa
segurana, sendo disponibilizadas atualizaes relacionadas segurana por pelo menos
18 meses para desktops e servidores e chegando trs anos na verso de Longo Tempo
de Suporte (LTS).
O Linux j foi estabelecido como uma plataforma de servidor de empresa em 2004,
mas o software livre no era uma parte da vida cotidiana para a maioria dos usurios de
computador. por isso que Mark Shuttleworth reuniu uma pequena equipe de desenvol-
vedores de um dos projetos Linux mais estabelecidos - Debian - e se props a criar um
desktop Linux fcil de usar, o Ubuntu.
A viso para o Ubuntu parte social e parte econmica: software livre, disponvel
a todos nas mesmas condies, e financiado por meio de um portflio de servios prestados
pela Canonical.
3.1.5 Git
Git5 uma sistema de controle de verso distribuda de forma livre e de cdigo
aberto projetada para lidar com variados tipos de projeto, com nfase na velocidade e na
eficincia.
O Git distribudo sob a licena GNU GPLv2 foi desenvolvido inicialmente para
ser utilizado no desenvolvimento do Kernel Linux, porm, j foi adotado por muitos outros
projetos.
3.1.6 GitHub
O GitHub6 um repositrio web projetado para auxiliar projetos que utilizam o
sistema de controle de verso Git. Essa ferramenta permite que um grupo de colaboradores
ou at mesmo que equipes de pessoas em um projeto ou organizao possam desenvolver,
se comunicar e acompanhar o status do projeto com facilidade. Tambm possvel revisar
3
<http://junit.org/index.html>
4
<http://ubuntu-br.org/ubuntu>
5
<http://git-scm.com/>
6
<https://github.com/>
3.2. Simuladores acsticos similares 39
mudanas, comentar linhas de cdigo, reportar issues e planejar o futuro do projeto com
ferramentas de discusso.
O GitHub escrito em Ruby on Rails e possui planos comerciais e gratuitos no
caso de projetos de cdigo aberto.
3.1.7 LATEX
LATEX7 um sistema de preparao de documentos para a composio tipogrfica
de alta qualidade. mais freqentemente usado para documentos tcnicos ou cientficos
de mdio a grande porte, mas ele pode ser usado para quase qualquer forma de publicao.
LATEX no um processador de texto, em vez disso, LATEX incentiva os autores a no se
preocuparem muito com a aparncia de seus documentos, e sim em obter o contedo certo.
LATEX baseada na linguagem TeX de Donald E. Knuth. LATEX foi desenvolvido
pela primeira vez em 1985 por Leslie Lamport, e agora est sendo mantido e desenvolvido
pelo Projeto LATEX3 , disponvel gratuitamente.
O Mtodo das Fontes Virtuais pode ser comparado a uma questo ptica que envolve
espelhos e suas imagens. anlogo a uma sala de espelhos onde os objetos so refletidos,
e suas imagens tambm podem ser refletidas, e ambos podem ser observados. As imagens
que so refletidas diretamente do objeto so chamadas imagens de primeira ordem, as
imagens das imagens so chamadas de imagens de segundas ordem, e assim por diante.
No caso da acstica, os objetos refletidos so as fontes sonoras e os observadores so os
receptores A figura 4 ilustra o mdulo de simulao 3D da reflexo sonora dentro de um
ambiente.
Este simulador foi utilizado como base e inspirao para o projeto proposto neste
trabalho.
3.2.2 AcMus
O AcMus9 um projeto voltado para a pesquisa sobre acstica musical que visa
desenvolver modelos e ferramentas computacionais para o estudo de ambientes destinados
escuta musical. Este pretende ser o primeiro projeto de um ncleo de pesquisa interdisci-
plinar voltado para o assunto da acstica musical, nascido de um trabalho conjunto entre
os departamentos de Msica e Cincia da Computao da Universidade de So Paulo.
O AcMus uma ferramenta de software livre implementado como um arcabouo
orientado a objetos utilizando a linguagem de programao Java. A ferramenta rene, em
um nico ambiente integrado, medio, anlise e simulao acstica de salas.
A interface grfica da ferramenta baseada no template do IDE Eclipse3.1.2 IDE,
conforme pode ser visto na figura 5.
9
<http://gsd.ime.usp.br/acmus/menu.html>
3.3. Consideraes finais 41
4 Metodologia
1
<http://www.fipa.org/>
4.5. Prova de conceito 47
A fonte sonora o agente responsvel pela criao dos sons, simulando o com-
portamento de pulso sonoro. J os sons, so os agentes mais ativos dentro do projeto,
sendo responsveis por exercerem seu papel e percorrerem todo o ambiente, identificando
as devidas colises, reflexes e alterando seus parmetros de intensidade sonora, direo,
dentre outros, at que o mesmo atinja uma intensidade inaudvel, ocasionando assim o
fim do mesmo.
O agente som dentro do sistema tratado como um ponto dentro do mapa do
ambiente. A fonte sonora o agente responsvel pela criao desses agentes sonoros,
emitindo assim um arco com uma abertura de acordo com a configurao da fonte. Por
exemplo, caso uma fonte sonora tenha sido configurada para emitir um pulso sonoro com
uma abertura de 90 e os agentes sonoros so criados com um intervalo de 1, essa fonte
sonora ir lanar 91 agentes sonoros a partir de sua origem, que no caso ser a fonte
sonora. A figura 7 ilustra esse evento.
5 Proposta
Referncias
BISTAFA, S. Acstica aplicada ao controle do rudo. [S.l.]: Edgard Blcher, 2006. ISBN
9788521203766. Citado 4 vezes nas pginas 29, 31, 32 e 33.
GIL, A. C. Como elaborar projetos de pesquisa. So Paulo, Brasil: Atlas, 2002. Citado
na pgina 43.
1 package s i m u l a t o r ;
2
3 import java . u t i l . ArrayList ;
4 import java . u t i l . List ;
5 import oo . L ine ;
6 import oo . L o c a l i z a t i o n ;
7 import oo . O b s t a c l e ;
8 import j a d e . c o r e . AID ;
9 import j a d e . c o r e . Agent ;
10 import j a d e . wrapper . P l a t f o r m C o n t r o l l e r ;
11 import u t i l s . Util ;
12
13 p u b l i c c l a s s Ambient e x t e n d s Agent {
14
15 p r i v a t e s t a t i c f i n a l l o n g s e r i a l V e r s i o n U I D = 1L ;
16
17 p r i v a t e f i n a l S t r i n g SOUNDSOURCE = " SoundSource " ;
18 p r i v a t e L i s t <O b s t a c l e > o b s t a c l e s = new A r r a y L i s t <>() ;
19 p r i v a t e L i s t <AID> s o u n d S o u r c e s = new A r r a y L i s t <>() ;
20
21 @Override
22 protected void setup ( ) {
23 defineAmbient ( ) ;
24 }
25
26 p u b l i c void defineAmbient ( ) {
27 PlatformController container = getContainerController () ;
28
29 O b s t a c l e w a l l 1 = new O b s t a c l e ( Li ne . g e t L i n e ( new L o c a l i z a t i o n ( 0 , 0 ) , new
L o c a l i z a t i o n (0 ,100) ) , 10) ;
30 O b s t a c l e w a l l 2 = new O b s t a c l e ( Li ne . g e t L i n e ( new L o c a l i z a t i o n ( 0 , 1 0 0 ) , new
L o c a l i z a t i o n (100 ,100) ) , 20) ;
31 O b s t a c l e w a l l 3 = new O b s t a c l e ( Li ne . g e t L i n e ( new Localization (100 ,100) ,
new L o c a l i z a t i o n ( 1 0 0 , 0 ) ) , 3 0 ) ;
32 O b s t a c l e w a l l 4 = new O b s t a c l e ( Li ne . g e t L i n e ( new L o c a l i z a t i o n ( 1 0 0 , 0 ) , new
L o c a l i z a t i o n ( 0 , 0 ) ) , 40) ;
33 O b s t a c l e w a l l 5 = new O b s t a c l e ( Li ne . g e t L i n e ( new L o c a l i z a t i o n ( 5 0 , 3 0 ) , new
L o c a l i z a t i o n (50 ,70) ) , 50) ;
34
35 o b s t a c l e s . add ( w a l l 1 ) ;
58 APNDICE A. Cdigo fonte da classe Ambient
36 obstacles . add ( w a l l 2 ) ;
37 obstacles . add ( w a l l 3 ) ;
38 obstacles . add ( w a l l 4 ) ;
39 obstacles . add ( w a l l 5 ) ;
40
41 / sound s o u r c e /
42 Object [ ] a r g s S o u n d S o u r c e = {new L o c a l i z a t i o n ( 0 , 5 0 ) , t h i s . getAID ( ) , 1 5 ,
obstacles };
43 s o u n d S o u r c e s . add ( c r e a t e O b j e c t ( argsSoundSource , c o n t a i n e r , t h i s .
SOUNDSOURCE) ) ;
44 }
45
46 p r i v a t e AID c r e a t e O b j e c t ( Object [ ] a r g s , P l a t f o r m C o n t r o l l e r c o n t a i n e r ,
S t r i n g type ) {
47 S t r i n g i d = g e t N e x t I d ( type ) ;
48 U t i l . initAgent ( container , args ,
49 " s i m u l a t o r . "+type , i d ) ;
50 System . out . p r i n t l n ( type + " c r i a d o ( a ) em : " + a r g s [ 0 ] ) ;
51 r e t u r n new AID( id , AID .ISLOCALNAME) ;
52 }
53
54 p u b l i c S t r i n g g e t N e x t I d ( S t r i n g type ) {
55 r e t u r n SoundSource . n e x t I d ( ) ;
56 }
57 }
src/simulator/Ambient.java
59
1 package s i m u l a t o r ;
2
3 import j a v a . u t i l . A r r a y L i s t ;
4 import j a v a . u t i l . L i s t ;
5
6 import oo . L o c a l i z a t i o n ;
7 import oo . O b s t a c l e ;
8 import u t i l s . Util ;
9 import j a d e . c o r e . AID ;
10 import j a d e . c o r e . Agent ;
11 import jade . core . behaviours . CyclicBehaviour ;
12 import jade . core . behaviours . TickerBehaviour ;
13 import j a d e . domain . DFService ;
14 import j a d e . domain . FIPAException ;
15 import j a d e . domain . FIPAAgentManagement . DFAgentDescription ;
16 import j a d e . l a n g . a c l . ACLMessage ;
17 import j a d e . wrapper . P l a t f o r m C o n t r o l l e r ;
18 import languagesAndMessages . Linguagem ;
19 import languagesAndMessages . Mensagem ;
20
21 p u b l i c c l a s s SoundSource e x t e n d s Agent {
22
23 p r i v a t e s t a t i c f i n a l l o n g s e r i a l V e r s i o n U I D = 1L ;
24
25 PlatformController container ;
26
27 p r i v a t e i n t updateTime = 1 0 0 0 0 ;
28
29 p r i v a t e s t a t i c L i s t <O b s t a c l e > o b s t a c l e s ;
30
31 p r i v a t e AID ambient ;
32 p r i v a t e AID soundSource ;
33 p r i v a t e AID sound ;
34
35 private Localization location ;
36 private int absorptionRate ;
37
38 @Override
39 protected void setup ( ) {
40 getParameters ( ) ;
60 APNDICE B. Cdigo fonte da classe SoundSource
41 registerSoundSource () ;
42 addBehavior ( ) ;
43 emitSoundPulse ( 0 , 9 0 , 8 0 ) ;
44 }
45
46 p r i v a t e v o i d emitSoundPulse ( d o u b l e d i r e c t i o n , d o u b l e opening , d o u b l e
potency ) {
47 double angle ;
48 c r e a t e S o u n d ( l o c a t i o n , d i r e c t i o n , potency ) ;
49 f o r ( d o u b l e i = 1 ; i<=o p e n i n g / 2 ; i ++){
50 a n g l e = U t i l . n o r m a l i z e A n g l e ( d i r e c t i o n+i ) ;
51 c r e a t e S o u n d ( l o c a t i o n , a n g l e , potency ) ;
52 angle = Util . normalizeAngle ( d i r e c t i o n i ) ;
53 c r e a t e S o u n d ( l o c a t i o n , a n g l e , potency ) ;
54 }
55 }
56
57 p r i v a t e v o i d addBehavior ( ) {
58 // Uncoment t o add t h i s b e h a v i o u r
59 // addBehaviour ( new UpdateSoundBehaviour ( t h i s ,
60 // updateTime ) ) ;
61 addBehaviour ( new GetMessageBehavior ( t h i s ) ) ;
62 }
63
64 private void registerSoundSource ( ) {
65 try {
66 DFAgentDescription dfd = new DFAgentDescription ( ) ;
67 dfd . setName ( getAID ( ) ) ;
68 DFService . r e g i s t e r ( t h i s , dfd ) ;
69 } c a t c h ( FIPAException e ) {
70 e . printStackTrace () ;
71 }
72 }
73
74 @SuppressWarnings ( " unchecked " )
75 pri vate void getParameters ( ) {
76 soundSource = t h i s . getAID ( ) ;
77 Object [ ] a r g s = getArguments ( ) ;
78 location = ( Localization ) args [ 0 ] ;
79 ambient = (AID) a r g s [ 1 ] ;
80 absorptionRate = ( int ) args [ 2 ] ;
81 o b s t a c l e s = ( A r r a y L i s t <O b s t a c l e >) a r g s [ 3 ] ;
82 }
83
84 p r i v a t e void createSound ( L o c a l i z a t i o n l o c a t i o n , double d i r e c t i o n , double
potency ) {
61
src/simulator/SoundSource.java
63
1 package s i m u l a t o r ;
2
3 import j a v a . u t i l . A r r a y L i s t ;
4 import j a v a . u t i l . L i s t ;
5
6 import oo . L ine ;
7 import oo . L o c a l i z a t i o n ;
8 import oo . O b s t a c l e ;
9 import u t i l s . Util ;
10 import j a d e . c o r e . Agent ;
11 import jade . core . behaviours . TickerBehaviour ;
12 import j a d e . domain . DFService ;
13 import j a d e . domain . FIPAException ;
14 import j a d e . domain . FIPAAgentManagement . DFAgentDescription ;
15
16
17 p u b l i c c l a s s Sound e x t e n d s Agent {
18
19 p r i v a t e s t a t i c f i n a l l o n g s e r i a l V e r s i o n U I D = 1L ;
20
21 p r i v a t e s t a t i c f i n a l i n t UPDATE_PERIOD = 2 0 ; //Time o f a t u a l i z a t i o n o f
sound i n ms .
22 p r i v a t e s t a t i c f i n a l i n t SIZE_OF_STEP = 1 ;
23 p r i v a t e s t a t i c f i n a l d o u b l e ERROR = 1 ; //SIZE_OF_STEP/ 2 ;
24
25 p r i v a t e s t a t i c L i s t <O b s t a c l e > o b s t a c l e s ;
26
27 private Li ne r o t e ;
28 private Localization collisionPoint ;
29 private double c o l l i s i o n D i s t a n c e ;
30 private Obstacle c o l l i s i o n O b s t a c l e ;
31
32 Localization initialLocation ;
33 Localization actualLocation ;
34 double d i r e c t i o n ;
35 d o u b l e potency ;
36 int distance = 0;
37 double index ;
38
39 @Override
64 APNDICE C. Cdigo fonte da classe Sound
170 @Override
171 p r o t e c t e d v o i d onTick ( ) {
172 update ( ) ;
173 }
174
175 }
176 }
src/simulator/Sound.java
69
1 package oo ;
2
3
4 public c l a s s Obstacle {
5
6 p r i v a t e Li ne l i n e ;
7 p r i v a t e double absortionRate ;
8
9
10 p u b l i c O b s t a c l e ( Li ne l i n e ,
11 double absortionRate ) {
12 this . setLine ( line ) ;
13 t h i s . absortionRate = absortionRate ;
14 }
15
16 p u b l i c double getAbsortionRate ( ) {
17 return absortionRate ;
18 }
19
20 p u b l i c void setAbsortionRate ( double absortionRate ) {
21 t h i s . absortionRate = absortionRate ;
22 }
23
24 p u b l i c L in e g e t L i n e ( ) {
25 return l i n e ;
26 }
27
28 p u b l i c v o i d s e t L i n e ( L in e l i n e ) {
29 this . line = line ;
30 }
31 }
src/oo/Obstacle.java
71
1 package oo ;
2
3
4 p u b l i c a b s t r a c t c l a s s Li ne {
5
6 private Localization initialPoint = null ;
7 private Localization finalPoint = null ;
8 p r i v a t e double d i r e c t i o n A n g l e = 0 ;
9
10 p r o t e c t e d Li ne ( L o c a l i z a t i o n i n i t i a l P o i n t ,
11 Localization finalPoint ){
12 this . initialPoint = initialPoint ;
13 this . finalPoint = finalPoint ;
14 }
15
16 p r o t e c t e d Li ne ( L o c a l i z a t i o n i n i t i a l P o i n t ,
17 double d i r e c t i o n ) {
18 this . initialPoint = initialPoint ;
19 this . directionAngle = direction ;
20 }
21
22 p u b l i c s t a t i c Li ne g e t L i n e (
23 Localization initialPoint ,
24 Localization finalPoint ){
25 i f ( isVertical ( initialPoint , finalPoint ) ){
26 r e t u r n new V e r t i c a l L i n e ( i n i t i a l P o i n t ,
27 finalPoint ) ;
28 }
29 r e t u r n new NormalLine ( i n i t i a l P o i n t ,
30 finalPoint ) ;
31 }
32
33 p u b l i c s t a t i c Li ne g e t L i n e (
34 Localization initialPoint ,
35 double d i r e c t i o n ) {
36 i f ( isVertical ( direction ) ){
37 r e t u r n new V e r t i c a l L i n e (
38 initialPoint ,
39 direction ) ;
40 }
41 r e t u r n new NormalLine (
42 initialPoint ,
43 direction ) ;
72 APNDICE E. Cdigo fonte da classe Line
44 }
45
46 private s t a t i c boolean i s V e r t i c a l (
47 Localization initialPoint ,
48 Localization finalPoint ){
49 i f ( i n i t i a l P o i n t . getX ( ) ==
50 f i n a l P o i n t . getX ( ) )
51 return true ;
52 return f a l s e ;
53 }
54
55 public s t a t i c boolean i s V e r t i c a l (
56 double d i r e c t i o n ) {
57 i f ( d i r e c t i o n == 90
58 | | d i r e c t i o n == 2 7 0 )
59 return true ;
60 return f a l s e ;
61 }
62
63 p u b l i c a b s t r a c t double getSlope ( ) ;
64
65 public Localization searchSlopePoint (
66 Li ne l i n e ) {
67 i f ( l i n e i n s t a n c e o f NormalLine )
68 return searchIntersectionPoint (
69 ( NormalLine ) l i n e ) ;
70 return searchIntersectionPoint (
71 ( VerticalLine ) line ) ;
72 }
73
74 public abstract Localization searchIntersectionPoint (
75 VerticalLine line ) ;
76
77 public abstract Localization searchIntersectionPoint (
78 NormalLine l i n e ) ;
79
80 p u b l i c double getConstant ( ) {
81 return 0;
82
83 }
84
85 public Localization getInitialPoint () {
86 return i n i t i a l P o i n t ;
87 }
88
89 public void s e t I n i t i a l P o i n t (
90 Localization initialPoint ) {
73
src/oo/Line.java
75
1 package oo ;
2
3 p u b l i c c l a s s NormalLine e x t e n d s L ine {
4
5 p r o t e c t e d NormalLine (
6 Localization initialPoint ,
7 Localization finalPoint ) {
8 super ( i n i t i a l P o i n t , f i n a l P o i n t ) ;
9 }
10
11 p r o t e c t e d NormalLine (
12 Localization initialPoint ,
13 double d i r e c t i o n ) {
14 super ( i n i t i a l P o i n t , d i r e c t i o n ) ;
15 }
16
17 public Localization searchIntersectionPoint (
18 NormalLine l i n e ) {
19 Localization intersectionPoint ;
20 double x ;
21 double y ;
22
23 i f (( this . getSlope ()
24 l i n e . g e t S l o p e ( ) ) != 0 ) {
25 x = ( l i n e . getConstant ( )
26 t h i s . getConstant ( ) )
27 /( t h i s . getSlope ( )
28 l i n e . getSlope () ) ;
29 y = l i n e . getSlope () x
30 + l i n e . getConstant ( ) ;
31 intersectionPoint =
32 new L o c a l i z a t i o n ( x , y ) ;
33 i f ( i n t e r s e c t i o n P o i n t != n u l l &&
34 t h i s . belongsToTheInterval (
35 i n t e r s e c t i o n P o i n t . getX ( ) )
36 && l i n e . b e l o n g s T o T h e I n t e r v a l (
37 i n t e r s e c t i o n P o i n t . getX ( ) ) )
38 return intersectionPoint ;
39 }
40 return null ;
76 APNDICE F. Cdigo fonte da classe NormalLine
41 }
42
43 public Localization searchIntersectionPoint (
44 VerticalLine line ){
45 double y ;
46 y = t h i s . getY ( l i n e . g e t C o n s t a n t ( ) ) ;
47
48 i f ( l i n e . belongsToTheInterval (y) )
49 r e t u r n new L o c a l i z a t i o n (
50 l i n e . getConstant ( ) , y ) ;
51 return null ;
52 }
53
54 public Localization searchSlopePoint (
55 Li ne l i n e ) {
56 i f ( l i n e i n s t a n c e o f NormalLine )
57 return searchIntersectionPoint (
58 ( NormalLine ) l i n e ) ;
59 return searchIntersectionPoint ((
60 VerticalLine ) line ) ;
61 }
62
63 protected boolean belongsToTheInterval ( double x ) {
64 i f ( t h i s . g e t F i n a l P o i n t ( ) != n u l l ) {
65 i f ( x <= Math . max(
66 t h i s . g e t I n i t i a l P o i n t ( ) . getX ( ) ,
67 t h i s . g e t F i n a l P o i n t ( ) . getX ( ) )
68 && x >= Math . min (
69 t h i s . g e t I n i t i a l P o i n t ( ) . getX ( ) ,
70 t h i s . g e t F i n a l P o i n t ( ) . getX ( ) ) ) {
71 return true ;
72 }
73 } else {
74 i f ( t h i s . g e t D i r e c t i o n ( ) > 90
75 && t h i s . g e t D i r e c t i o n ( ) < 270
76 && x <=
77 t h i s . g e t I n i t i a l P o i n t ( ) . getX ( ) ) {
78 return true ;
79 } else {
80 i f ( x >= t h i s . g e t I n i t i a l P o i n t ( ) . getX ( ) ) {
81 return true ;
82 }
83 }
84 }
85
86 return f a l s e ;
87 }
77
88
89 p u b l i c double getSlope ( ) {
90 i f ( t h i s . g e t F i n a l P o i n t ( ) != n u l l ) {
91 d o u b l e deltaX =
92 t h i s . g e t F i n a l P o i n t ( ) . getX ( )
93 t h i s . g e t I n i t i a l P o i n t ( ) . getX ( ) ;
94 d o u b l e deltaY =
95 t h i s . g e t F i n a l P o i n t ( ) . getY ( )
96 t h i s . g e t I n i t i a l P o i n t ( ) . getY ( ) ;
97 r e t u r n deltaY / deltaX ;
98 }
99 r e t u r n Math . tan (
100 Math . t oRadia ns ( t h i s . g e t D i r e c t i o n ( ) ) ) ;
101 }
102
103 p u b l i c double getConstant ( ) {
104 r e t u r n t h i s . g e t I n i t i a l P o i n t ( ) . getY ( )
105 this . getSlope ()
106 t h i s . g e t I n i t i a l P o i n t ( ) . getX ( ) ;
107 }
108
109 p u b l i c Double getY ( d o u b l e x ) {
110 return this . getSlope ()
111 x
112 + t h i s . getConstant ( ) ;
113 }
114 }
src/oo/NormalLine.java
79
1 package oo ;
2
3 import u t i l s . U t i l ;
4
5 p u b l i c c l a s s V e r t i c a l L i n e e x t e n d s Li ne {
6
7 p r i v a t e s t a t i c f i n a l d o u b l e TOLERANCE = 0 . 0 0 0 0 0 1 ;
8
9 protected VerticalLine ( Localization initialPoint , Localization finalPoint
) {
10 super ( i n i t i a l P o i n t , f i n a l P o i n t ) ;
11 }
12
13 protected V e r t i c a l L i n e ( L o c a l i z a t i o n i n i t i a l P o i n t , double d i r e c t i o n ) {
14 super ( i n i t i a l P o i n t , d i r e c t i o n ) ;
15 }
16
17 public Localization searchIntersectionPoint ( VerticalLine line ){
18 return null ;
19 }
20
21 p u b l i c L o c a l i z a t i o n s e a r c h I n t e r s e c t i o n P o i n t ( NormalLine l i n e ) {
22 double y ;
23 y = l i n e . getY ( t h i s . g e t C o n s t a n t ( ) ) ;
24
25 i f ( t h i s . belongsToTheInterval (y) )
26 r e t u r n new L o c a l i z a t i o n ( t h i s . g e t C o n s t a n t ( ) , y ) ;
27 return null ;
28 }
29
30 p u b l i c L o c a l i z a t i o n s e a r c h S l o p e P o i n t ( Lin e l i n e ) {
31 i f ( l i n e i n s t a n c e o f NormalLine )
32 r e t u r n s e a r c h I n t e r s e c t i o n P o i n t ( ( NormalLine ) l i n e ) ;
33 return searchIntersectionPoint (( VerticalLine ) l i n e ) ;
34 }
35
36 protected boolean belongsToTheInterval ( double y ) {
37 i f ( t h i s . g e t F i n a l P o i n t ( ) != n u l l ) {
38 i f ( y <= Math . max( t h i s . g e t I n i t i a l P o i n t ( ) . getY ( ) , t h i s . g e t F i n a l P o i n t ( ) .
getY ( ) ) && y >= Math . min ( t h i s . g e t I n i t i a l P o i n t ( ) . getY ( ) , t h i s .
80 APNDICE G. Cdigo fonte da classe VerticalLine
g e t F i n a l P o i n t ( ) . getY ( ) ) ) {
39 return true ;
40 }
41 } else {
42 i f ( U t i l . compareDouble ( t h i s . g e t D i r e c t i o n ( ) , 2 7 0 , TOLERANCE) && y <=
t h i s . g e t I n i t i a l P o i n t ( ) . getY ( ) )
43 return true ;
44
45 i f ( U t i l . compareDouble ( t h i s . g e t D i r e c t i o n ( ) , 9 0 , TOLERANCE) && y >=
t h i s . g e t I n i t i a l P o i n t ( ) . getY ( ) )
46 return true ;
47 }
48
49 return f a l s e ;
50 }
51
52 p u b l i c double getSlope ( ) {
53 r e t u r n Double . POSITIVE_INFINITY ;
54 }
55
56 p u b l i c double getConstant ( ) {
57 r e t u r n s u p e r . g e t I n i t i a l P o i n t ( ) . getX ( ) ;
58 }
59
60 }
src/oo/VerticalLine.java
81
1 package oo ;
2
3 import u t i l s . U t i l ;
4
5 public class Localization {
6
7 p r i v a t e double x ;
8 p r i v a t e double y ;
9
10 p u b l i c L o c a l i z a t i o n ( double x , double y ) {
11 this .x = x;
12 this .y = y;
13 }
14
15 public Localization ( Localization l ) {
16 this ( l . x , l . y) ;
17 }
18
19 public Localization () {
20 t h i s ( 1 , 1) ;
21 }
22
23 p u b l i c d o u b l e getX ( ) {
24 return x ;
25 }
26
27 p u b l i c v o i d setX ( d o u b l e x ) {
28 this .x = x;
29 }
30
31 p u b l i c d o u b l e getY ( ) {
32 return y ;
33 }
34
35 p u b l i c v o i d setY ( d o u b l e y ) {
36 this .y = y;
37 }
38
39 p u b l i c double d i s t a n c e (
40 Localization location ) {
82 APNDICE H. Cdigo fonte da classe Localization
88 r e t u r n new L o c a l i z a t i o n ( Double . v a l u e O f (
89 x . toString () ) ,
90 Double . v a l u e O f ( y . t o S t r i n g ( ) ) ) ;
91 }
92 }
src/oo/Localization.java