lunes, 28 de noviembre de 2011

Juego del Caos



;Autor: José Manuel Gómez Soto

#lang racket
(require plot)

(define longitud (lambda(lista)
                   (if (null? lista) 0
                       (+ 1 (longitud (rest lista))))))

(define mimap (lambda(f lista)
                (if (null? lista) '()
                    (cons (f (car lista))
                        (mimap f (cdr lista))))))

(define sumapuntos (lambda (p1 p2)
 (list (+ (car p1) (car p2)) (+ (car (cdr p1)) (car (cdr p2))))))

(define dividepunto (lambda (p1 divisor)
 (list (/ (car p1) divisor) (/ (car (cdr p1)) divisor))))


(define orbitapuntos (lambda(f p1 n)              
                 (if (= n 0) '()
                 (cons  p1 (orbitapuntos f (f p1) (- n 1))))))

(define juegocaos (lambda(figura npuntos divisor)
                    (orbitapuntos (lambda(p)
                        (dividepunto (sumapuntos p
                                              (elemento (random (longitud figura)) figura)) divisor))
                            (list (* (random 10) 0.1) (* (random 10) 0.1))
                            npuntos
                    )))

(define elemento (lambda(pos lista)
  (if (= pos 0) (car lista)
      (elemento (- pos 1) (rest lista))
      )
  ))


(define figura (list (list 0 0) (list 5 10) (list 10 0)))
(plot (points (map list->vector (juegocaos figura 100000 2)) #:sym 'dot)
       #:x-min 0 #:x-max 10  #:y-min 0 #:y-max 10)

No hay comentarios:

Publicar un comentario