;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