Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

46 строки
1.2 KiB

  1. (define-module interpolation
  2. :exports (lerp lerper stepped-lerper
  3. point-lerp point-lerper
  4. bezier2 bezierer2)
  5. (define-typed (lerp a :number b :number t :number)
  6. (+ (* t (- b a)) a))
  7. (define-typed (lerper a :number b :number)
  8. (define-typed (ret t :number)
  9. (lerp a b t))
  10. ret)
  11. (define-typed (stepped-lerper a :number b :number #steps :number)
  12. (let ((t 0)
  13. (dt (/ 1 #steps)))
  14. (lambda ()
  15. (let ((res (lerp a b t)))
  16. (mutate t (+ t dt))
  17. res))))
  18. (define make-point pair)
  19. (define point->x first)
  20. (define point->y rest)
  21. (define (point-lerp p1 p2 t)
  22. (make-point (lerp (point->x p1) (point->x p2) t)
  23. (lerp (point->y p1) (point->y p2) t)))
  24. (define (point-lerper p1 p2)
  25. (lambda (t) (point-lerp p1 p2 t)))
  26. (define (bezier2 p1 p2 p3 t)
  27. (point-lerp (point-lerp p1 p2 t)
  28. (point-lerp p2 p3 t)
  29. t))
  30. (define (bezierer2 p1 p2 p3)
  31. (let ((lerper1 (point-lerper p1 p2))
  32. (lerper2 (point-lerper p2 p3)))
  33. (lambda (t)
  34. (point-lerp (lerper1 t)
  35. (lerper2 t) t))))
  36. )