You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
1.1 KiB

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