首页 文章

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

提问于
浏览
1

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

#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))

下面的代码确实保留了图片,但我没有传递给pain处理程序的tick数 .

#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

    这是一个例子:

    #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?))
    

相关问题