Add drawing example.

main
Edward L Platt 5 years ago
parent 2a17e1c83c
commit bfeb06df7e

@ -0,0 +1,47 @@
;; Copyright 2019 Edward L. Platt <elplatt@alum.mit.edu
;;
;; TODO: add comments
#lang racket
(require racket/draw)
(require racket/gui)
(require "sylvester.rkt")
(require "network.rkt")
(define (draw-sylvester m w h margin)
(define target (make-bitmap w h))
(define dc (new bitmap-dc% [bitmap target]))
(let ([edges (sylvester-undirected-edges m)]
[nodes (sylvester-nodes m)])
(for ([e edges])
(draw-edge m e dc (- (/ w 2) margin) margin))
(for ([v nodes])
(draw-node m v dc (- (/ w 2) margin) margin)))
(make-object image-snip% target))
(define (draw-edge m edge dc r margin)
(let* ([v (sylvester-radix-value (first edge))]
[w (sylvester-radix-value (second edge))])
(send dc set-pen "gray" 2 'solid)
(send dc draw-line
(node-x v m r margin) (node-y v m r margin)
(node-x w m r margin) (node-y w m r margin))))
(define (draw-node m v dc r margin)
(let ([v (sylvester-radix-value v)])
(send dc set-pen "black" 2 'solid)
(send dc draw-arc
(- (node-x v m r margin) 4) (- (node-y v m r margin) 4)
8 8 0 (* 2 pi))))
(define (node-x v m r margin)
(let ([vtheta (* 2 pi (/ v (- (sylvester m) 1)))])
(+ r margin (* r (cos vtheta)))))
(define (node-y v m r margin)
(let ([vtheta (* 2 pi (/ v (- (sylvester m) 1)))])
(+ r margin (* r (sin vtheta)))))
(draw-sylvester 3 320 320 10)
Loading…
Cancel
Save