2016-06-01 4 views
2

Я пытаюсь создать диаграмму реального времени в ракетке. Я просмотрел библиотеки Plot и GUI, и кажется, что я что-то упустил. При вызове сюжета он возвращает снимок изображения% или количество других форматов изображений. Но я не могу найти способ добавить или удалить точки из графика, не вызвав заговор снова. Теперь я полагаю, я мог бы использовать метод какRacket Real Time Plot/Chart

https://planet.racket-lang.org/package-source/williams/animated-canvas.plt/2/5/planet-docs/animated-canvas/index.html

, но тогда я должен переопределять все механизмы манипуляции, которые идут с надрезом%. Теперь может случиться так, что я все равно должен это сделать, но я спрашиваю, есть ли какие-либо существующие механизмы, которые позволят вам манипулировать графиком и данными графика snip% после его создания, или мне нужно просто перерисовывайте его вручную каждый раз, когда я хочу изменить его внешний вид? Также существует ли какая-либо работа, которая была сделана для создания графиков реального времени в Racket вообще?

ответ

0

После копания в Ракетках ООП и библиотеки графического интерфейса, я в конце концов пришел на (и понял) участок/DC, которые утверждают, документы могут быть использованы для таких применений: https://docs.racket-lang.org/plot/plotting.html?q=plot%2Fdc#%28def._%28%28lib._plot%2Fmain..rkt%29._plot%2Fdc%29%29

Это, кажется, работает лучше, чем анимированный холст при рендеринге , но мне все равно придется переопределить масштабирование и щелчок и все, что поставляется с snip% s, если у кого-то нет лучших идей.

#lang racket 

(require racket/gui plot racket/draw) 

(define num 0) 

(define f (new frame% [label "Test graph"] 
       [width 200] 
       [height 200])) 
(define c (new canvas% [parent f])) 


(send f show #t) 

(define (loop) 
    (set! num (add1 num)) 
    (plot/dc (function sin (- pi) num) 
      (send c get-dc) 
      0 0 
      (- (send f get-width) 40) ;; figure out how to get the actual size of the text outside the graphs boarder? 
      (- (send f get-height) 40) 
      #:title "Graph" 
      #:x-label "num" 
      #:y-label "sin" 
      ) 
    (sleep/yield .2) 
    (loop)) 

(loop)