moonlander projeto computacional. função: pilotar nave terreno pilotar nave terreno =...
TRANSCRIPT
![Page 1: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/1.jpg)
Moonlander
Projeto Computacional
![Page 2: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/2.jpg)
Função: pilotar nave terreno• pilotar nave terreno = (estado1,estado2)
• Onde estado1 representa o foguete horizontal e estado2 representa o foguete horizontal
• Terreno é uma lista de tuplas de três pontos
• Nave (xatual,yatual,vx,vy,fx,fy,c)
![Page 3: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/3.jpg)
Uma estratégia para cada terreno
• A função pilotar se comportara de uma forma diferente para cada terreno,por exemplo,desligara o foguete em um quando atingir uma certa velocidade ou uma certa posição.
![Page 4: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/4.jpg)
Terreno 2
• Terreno proposto no trabalho(terreno ideal,ou seja plano).
![Page 5: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/5.jpg)
• Usaremos a posição para determina quando o foguete desligara.
• pilotar nave terreno = (estado1,estado2) where
estado1 = if (r1 nave)<(-0.165) then 0 else -1
estado2 = 0
![Page 6: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/6.jpg)
![Page 7: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/7.jpg)
• Usaremos a posição para determina quando o foguete desligara.
• pilotar nave terreno = (estado1,estado2) where
estado1 = if (r1 nave)<(-0.1) then 0 else -1
estado2 = 0• Aumento da posição,provoca o desligamento mais cedo do foguete
horizontal,logo ele pousa mais perto da posição inicial .• Assim sucessivamente.
•
![Page 8: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/8.jpg)
![Page 9: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/9.jpg)
![Page 10: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/10.jpg)
![Page 11: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/11.jpg)
Conclusão
• O foguete pousara para esquerda no intervalo de posições (-0.165,0.0).
![Page 12: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/12.jpg)
E para direita?
• Será necessário muda a posição foguete horizontal.
• Agora ele pousara para o intervalo (0.0005,0.165)
• pilotar nave terreno = (estado1,estado2) where
estado1 = if (r1 nave)>(0.0005) then 0 else 1
estado2 = 0
![Page 13: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/13.jpg)
![Page 14: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/14.jpg)
Terreno3 (terreno com obstáculo)
![Page 15: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/15.jpg)
• pilotar nave terreno = (estado1,estado2) where
estado1 = if (r1 nave)>(0.45) then -1 else = 1 estado2 = 0
![Page 16: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/16.jpg)
ordenaAreaPouso nave terreno • Usando mergesort para ordena.
• intercala xs ys = if null xs || null ys• then xs++ys• else if snd (head xs) >= snd(head ys)• then (head ys):(intercala xs (tail ys))• else (head xs):(intercala (tail xs) ys)
• ms xs = if null (tail xs)• then xs• else intercala (ms ys) (ms zs)• where• ys = take x xs• zs = drop x xs• x = div (length xs) 2
![Page 17: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/17.jpg)
Funções auxiliares• Define as inclincoes do terreno
• inclinacao a b c d = ((b-d)/(a-c))• -- Uma inclinacão para cada lado do triangulo. • inclinacao1 (a,b,c) = inclinacao (fst(retira1(a,b,c))) (snd(retira1(a,b,c)))
(fst(retira2(a,b,c))) (snd(retira2(a,b,c)))
• inclinacao2 (a,b,c) = inclinacao (fst(retira1(a,b,c))) (snd(retira1(a,b,c))) (fst(retira3(a,b,c))) (snd(retira3(a,b,c)))
• inclinacao3 (a,b,c) = inclinacao (fst(retira2(a,b,c))) (snd(retira2(a,b,c))) (fst(retira3(a,b,c))) (snd(retira3(a,b,c)))
• --Funcoes para manipular tripla• retira1 (a,b,c) = a• retira2 (a,b,c) = b• retira3 (a,b,c) = c• retira4 (a,b,c,d,e,f,g) = (a,b) -- retira os dois primeiros termos da nave
![Page 18: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/18.jpg)
• pontomedio x y = ((fst x + fst y)/2,(snd x + snd y)/2)
• -- Fornece a distancia entre dois pontos
• distancia x y = sqrt((fst x- fst y)^2+ (snd x-snd y)^2)
![Page 19: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/19.jpg)
Função pousoSeguro• pousoSeguro xs = [(terrenovalido (retira1 x,retira2 x,retira3 x))|x<-
xs,(terrenovalido1 (retira1 x,retira2 x,retira3 x)]• Retorna os terrenos onde é possivel o pouso
• terrenovalido (a,b,c) = if inclinacao1 (a,b,c) <=0.1 && inclinacao1 (a,b,c)>=0 && snd a > snd c && snd b > snd c
• then [(a,b)]• else if inclinacao2 (a,b,c) <=0.1 && inclinacao2
(a,b,c)>=0 && snd a > snd b && snd c > snd b• then [(a,c)]• else if inclinacao3 (a,b,c) <=0.1 && inclinacao3
(a,b,c)>=0 && snd c > snd a && snd b > snd a• then [(b,c)]• else []• terrenovalido1 (a,b,c) =(terrenovalido (a,b,c))/=[]
![Page 20: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/20.jpg)
areaPousoedistancia nave terreno
• Retorna uma dupla contendo o terreno e a distancia da nave até o terreno.
areaPousoedistancia nave terreno =[(head y,(distancia (pontomedio (retiradupla1 (head y)) (retiradupla2
(head y))) (retira4 (nave))))|y<-(pousoSeguro (terreno))]
![Page 21: Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e](https://reader034.vdocuments.site/reader034/viewer/2022051400/552fc0f8497959413d8b5903/html5/thumbnails/21.jpg)
• ordenaAreaPouso nave terreno = ms (areaPousoedistancia nave terreno)