simple.sld 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. (define-library (turtle simple)
  2. (import (turtle turtle3)
  3. (turtle vector)
  4. (scheme case-lambda)
  5. (only (scheme inexact) acos)
  6. (scheme base))
  7. (export forward back right left up down
  8. fd bk rt lt pu pd
  9. pos set-pos tilt set-tilt
  10. bg-color line-color line-width
  11. show hide draw-line home reset-tilt
  12. repeat xcor ycor setx sety
  13. clear-screen max-recur face
  14. distance angle circle)
  15. (begin
  16. (define current-tilt 0)
  17. (define (tilt)
  18. current-tilt)
  19. (define (set-tilt theta)
  20. (yaw! t (- current-tilt))
  21. (set! current-tilt theta)
  22. (yaw! t theta))
  23. (define t (make-turtle))
  24. (define (home)
  25. (set-pos 0 0))
  26. (define (reset-tilt)
  27. (set-tilt 0))
  28. (define (show)
  29. (show! t))
  30. (define (hide)
  31. (hide! t))
  32. (define (forward dist)
  33. (forward! t dist))
  34. (define (back dist)
  35. (forward! t (- dist)))
  36. (define (right theta)
  37. (set! current-tilt (- current-tilt theta))
  38. (yaw! t (- theta)))
  39. (define (left theta)
  40. (set! current-tilt (+ current-tilt theta))
  41. (yaw! t theta))
  42. (define (up)
  43. (pen-up! t))
  44. (define (down)
  45. (pen-down! t))
  46. (define fd forward)
  47. (define bk back)
  48. (define lt left)
  49. (define rt right)
  50. (define pu up)
  51. (define pd down)
  52. (define (pos)
  53. (get-pos t))
  54. (define (down?)
  55. (pen-down? t))
  56. (define face
  57. (case-lambda
  58. ((v)
  59. (face! t v))
  60. ((x y)
  61. (face (vector x y)))))
  62. (define set-pos
  63. (case-lambda
  64. ((v)
  65. (let ((x1 (xcor))
  66. (y1 (ycor))
  67. (x2 (vector-ref v 0))
  68. (y2 (vector-ref v 1)))
  69. (set-pos! t (vector-append v #(0)))
  70. (if (down?)
  71. (draw-line x1 y1 x2 y2))))
  72. ((x y) (set-pos (vector x y)))))
  73. (define (xcor)
  74. (vector-ref (pos) 0))
  75. (define (ycor)
  76. (vector-ref (pos) 1))
  77. (define (setx xval)
  78. (set-pos (vector (+ xval (xcor))
  79. (ycor))))
  80. (define (sety yval)
  81. (set-pos (vector (xcor)
  82. (+ yval (ycor)))))
  83. (define (distance A B)
  84. (vector-distance A B))
  85. (define (angle A B C)
  86. (radians->degrees
  87. (vector-angle (vector-difference B A)
  88. (vector-difference B C))))
  89. (define (circle r)
  90. (define pi (* 2 (acos 0)))
  91. (rt 4.5)
  92. (repeat (40)
  93. (fd (* 2 pi r 1/40))
  94. (rt 9))
  95. (lt 4.5))))