>>181 Common Lisp (SBCL) + CLX。X Window Systemが使える環境で。>>253, >>256を参考に
(require "asdf")
(asdf:load-system "clx")
(defpackage #:pendulum (:use #:common-lisp #:xlib))
(in-package #:pendulum)
(defvar *display* (open-default-display))
(defvar *screen* (display-default-screen *display*))
(defvar *window* (create-window :parent (screen-root *screen*)
         :x 0 :y 0
         :width 300 :height 300
         :background (screen-white-pixel *screen*)))
(defvar *gcontext* (create-gcontext :drawable *window*))
(defparameter *x0* 150)
(defparameter *y0* 50)
(defparameter *r* 200)
(defparameter *theta0* (/ (* pi 40) 180))
(defparameter *dt* 0.03)
(map-window *window*)
(loop for v = 0 then (+ v dv)
  for theta = *theta0* then (+ theta dtheta)
  for x = (+ *x0* (floor (* *r* (sin theta))))
  for y = (+ *y0* (floor (* *r* (cos theta))))
  for a = (let ((a (* -0.00098 (sin theta)))) (funcall (if (> (* a v) 0) #'* #'/) a 0.95))
  for dv = (* a *dt*)
  for dtheta = (/ (* (+ v (/ dv 2)) *dt*) *r*)
  do (progn
    (draw-line *window* *gcontext* *x0* *y0* x y)
    (draw-arc *window* *gcontext* (- x 7) (- y 7) 14 14 0 (* 2 pi) t)
    (clear-area *window*)))