mit-scheme-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[long, probably pointless] Take me out to the ballgame...


From: Scheming Pony
Subject: [long, probably pointless] Take me out to the ballgame...
Date: Mon, 17 Feb 2020 22:24:15 +0000

This whole thing started when some punk said MIT/Scheme had no applications.  I 
<3 Edwin, man. I'm still working on that baseball program (Fenway park model).  
I'm channeling Torvalds or Ty Cobb or someone today.

;;; Code to animate a projectile, simulating a baseball in flight, for MIT 
Scheme 9.4
;;;
;;; Uses the Vizajo interface (via FFI) to Pikturo (Open Inventor compatible 
library).
;;;
;;; Loads a scene from the file "project-1-scene.iv", a Pikturo scene graph.
;;;
;;; Utilizes code from Project 1 for the ball physics (in 
"final-project-physics.scm")

(declare (usual-integrations))
(load-option 'FFI)

(load "final-project-physics.scm")

;; TODO: there must be a simpler way to find a
;; TODO: file to load in the system library directory
(with-working-directory-pathname
 (->namestring (system-library-directory-pathname))
 (lambda ()
   (load "vizajo-mit.scm")))

(C-include "vizajo-mit")

;; format does not have the ability to put in leading zeros
;; for a fixed length integer, so we have this function to do it
(define (build-image-path prefix frame ext)
  (string-append prefix
                 "-"
                 (cond ((<= frame 9) "00")
                       ((<= frame 99) "0")
                       (else ""))
                 (write-to-string frame)
                 ext))

;; the update procedure for the physics "trajectory" procedure
(define (output-frames path fmt w h)
  (let ((ext (cond ((= fmt vizajo:file-PostScript) ".ps")
                   ((= fmt vizajo:file-RGB) ".rgb")))
        (node-name "ball_translation")
        (field-name "translation")
        (frame 0))
    (define (position-ball x y u v t)
      (let* ((image-path
              (build-image-path path frame ext))
             (translation
              (string-append "0 "
                             (write-to-string y) " "
                             "-" (write-to-string x)))
             (ret-val (C-call "vizajo_set_field_value" node-name
                              field-name
                              translation))
             (field-val-alien (make-alien '(* char))))
        (C-call "vizajo_get_field_value" field-val-alien
                node-name field-name) ; TODO: leaks, should free returned string
        (display "set-translation ") (display translation) (newline)
        (display "translation=") (display (c-peek-cstring field-val-alien)) 
(newline)
        (if (= 1 ret-val)
            (C-call "vizajo_snapshot" image-path fmt w h 0)
            (error "could not set field value"))
        (set! frame (+ frame 1))))
    (trajectory 0 1 45 45 position-ball)))

;; main procedure of the program
(define (main args)
  (let* ((file-format-arg (cadr args))
         (file-format (cond ((string=? file-format-arg "PS")
                             vizajo:file-PostScript)
                            ((string=? file-format-arg "RGB")
                             vizajo:file-RGB)
                            (else (error "invalid file format")))))
    ;; glX can cause floating point underflow exceptions, defer them
    (flo:defer-exception-traps!)

    (C-call "vizajo_startup")

    (let* ((input-iv-path (caddr args))
           (image-prefix (cadddr args))
           (scene-read-return (C-call "vizajo_read_scene" input-iv-path)))
      (if (= 1 scene-read-return)
          (output-frames image-prefix
                         file-format
                         1280
                         720)
          (error "could not read scene file")))
    (C-call "vizajo_shutdown")))

;; bootstrap the program
(main (list "" "PS" "./final-project-fenway-park.iv" "play-ball"))

---- from the other mailing list ----

Sigh...I worked on a telemetry project at Cessna Aircraft, hardware telemetry 
for monitoring flight tests--a safety critical development area. Our system 
gave ground engineers visualization of the critical flight parameters so test 
pilots wouldn't lose control going into flutter. That's what I thought you were 
talking about, and probably what I should be working on. We almost lost a few. 
I ain't got no problem with Microsoft, my brother-in-law is feeding 6 other 
people and living a great life, which he damn well deserves.

When I booted one of the first IBM PCs in my basement in '82, and wrote one of 
the first fantasy baseball apps (I'll elide the provenance--I still haven't 
heard back from the MOMA on that one) I had an instant on system

> 10 print "Take me out to the ballgame! Buy me some peanuts..."
> 20 goto 10
> run

Nobody watching me, no compromises, just a pure creation engine. I want to get 
back to that. I couldn't believe the ensuing platform wars. I'm tired of 
fighting other people's crap wars, and even thinking about it. I'll sit here at 
#106 Scheming Pony Way and write the damn thing myself if I have to. Nobody 
even seems to be listening to me anyway.

--
Stewart Milberger

 ^|||^
 \. ./ Scheming
  | |  Pony
  { }

Sent with ProtonMail Secure Email.


Attachment: play-ball.webm
Description: video/webm


reply via email to

[Prev in Thread] Current Thread [Next in Thread]