如何在Racket中以功能方式绘制上一张图片

时间:2015-01-11 22:37:34

标签: racket

此代码维护刻度数,但所有方式都在新屏幕上绘制

#lang racket
(require 2htdp/universe)
(require 2htdp/image)
(define pasaulis (empty-scene 100 100))

(define (trace-circle t)
  (place-image (circle 5 "solid" "blue")
                   (+ 50(* 40 (cos (/ t 100))))
                   (+ 50(* 40 (sin (/ t 100))))
                   pasaulis))

(define (render t)
  (text (number->string t) 12 "red"))

(big-bang 1000000
      (on-tick sub1 1/500)
      (to-draw trace-circle)
      (stop-when zero?)
      (record? true))

下面的代码确实保留了图片,但我没有传递给痛处理程序的滴答数。

#lang racket
(require 2htdp/universe)
(require 2htdp/image)
(require picturing-programs)

(define (move-right-10 picture)
  (beside (rectangle 10 0 "solid" "white")
      picture))

(big-bang pic:calendar
      (on-draw show-it 500 100)
      (on-tick move-right-10 1/22))

我无法弄明白。如何在修改屏幕时绘制具有刻度数的绘图功能。大爆炸功能是否适用于此目的?

1 个答案:

答案 0 :(得分:0)

以下是一个例子:

#lang racket
(require 2htdp/universe)
(require 2htdp/image)

(struct world (ticks pic))

(define pasaulis (empty-scene 1000 1000))

(define (render w)
  (world-pic w))

(define (handle-on-tick w)
  (define t (world-ticks w))
  (define p (world-pic w))
  (define new-ticks (+ t 1))
  (define new-pic (overlay/xy (text (number->string t) 12 "red")
                              (* -10 t) (* -10 t)
                              p))
  (world new-ticks new-pic))


(define (stop? w)
  (= (world-ticks w) 50))

(big-bang (world 0    pasaulis)
          (on-tick    handle-on-tick 1/5)
          (to-draw    render)
          (stop-when  stop?))