1votos

Mosca en Haskell

por josejuan hace 1 año

Curioso e hilarante desafío :D Mi solución está inspirada por un vídeo real de unos mosquitos. Permite configurar exactamente el tipo de movimiento, podemos hacer que se mueva donde queramos, cuando queramos, a la velocidad que queramos, etc...

Escribir un código que devuelva un punto que se mueva aleatoriamente en la pantalla.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
{-# LANGUAGE RecordWildCards #-} 
{- 
 
  El movimiento ha sido inspirado por este vídeo de mosquitos 
 
  https://www.pond5.com/stock-footage/52800733/random-chaotic-movement-insects-and-flies.html 
 
 
  Para ver el movimiento generado por este programa ver 
 
  https://youtu.be/AXqxzDr9DkA 
 
-} 
import Graphics.Gloss 
import Graphics.Gloss.Interface.IO.Simulate 
import Data.Fixed 
 
data P = P { o :: !Float, r :: !Float, a :: !Float } 
 
data T = T { p1 :: !P, p2 :: !P, d :: !Float } 
 
p t P {…} = o + r × cos (a × t) 
 
i t h T {…} = p t p1 × (1 - k) + p t p2 × k where k = h / d 
 
pt xs t = let tt = ∑ $ map d xs 
              t0 = t `mod'` tt  
              (b, tp) = head $ dropWhile ((<t0).fst) $ reverse $ snd $ foldl (λ(t,rs) p@(T _ _ d) → (t+d,(t+d,p):rs)) (0,[]) xs 
          in  i t (t0 - b + d tp) tp 
 
-- ya está. 
 
 
 
 
-- El movimiento es personalizable, por ejemplo podemos hacer que la mosca 
-- se comporte de forma específica en específico momento y de determinada 
-- forma específica (velocidad, dirección, etc...) Aquí un simple 
-- movimiento realizado "a ojo" 
m = [T c1 c1 2, T c1 c0 0.5, T c0 c2 0.5, T c2 c2 1, T c2 c0 0.25, T c0 c1 0.25] 
  where c0 = P 0 1 6 
        c1 = P (-0.5) 0.25 8 
        c2 = P 0.8 0.2 9 
 
render t = Scale 100 100 $ Translate (pt m t) (pt m (0.3 × t)) (Circle 0.05) 
 
main = simulate (InWindow "Mosca" (400, 400) (0, 0)) white 30 0.0 render (λ_ _ t → t + 1/15) 
3 comentarios
0votos

Escrito por Germán M hace 1 año

¡Es genial! No sé nada de Haskell, pero vi los dos videos y es increíble lo bien logrado que está el patrón de movimientos del mosquito, con tan pocas líneas de código. Ahora mismo estoy buscando un IDE de Haskell en Internet para probarlo.
1votos

Escrito por josejuan hace 1 año

Hola @Germán_M, existen varios IDE que puedes usar como leksah, intellij o eclipse, pero mi recomendación es que uses tu editor de texto preferido, preferiblemente con resaltado de sintáxis y nada más. Para lanzar tu código usa otra ventana de línea de comandos con `ghci`.
0votos

Escrito por Germán M hace 1 año

Perfecto, me fijaré. ¡Gracias por el dato!

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.