|
57 | 57 | ((:interpolator ip) (instance interpolator-class :init))
|
58 | 58 | (initial-time 0.0) (neglect-first) (vel-vector-list) (acc-vector-list))
|
59 | 59 | (let* ((data-list) (tm-list) (vel-data-list) (acc-data-list))
|
| 60 | + (assert (= (length pos-list) (1+ (length time-list))) |
| 61 | + (format nil "check length of pos-list(~A) and tm-list(~A)" |
| 62 | + (length pos-list) (length time-list))) |
| 63 | + (setq vel-vector-list |
| 64 | + (reverse |
| 65 | + (do ((i 0 (1+ i)) (vel-list)) |
| 66 | + ((> i (length time-list)) vel-list) |
| 67 | + (if (or (= i 0) (= i (length time-list))) |
| 68 | + (push (instantiate float-vector (length (car pos-list))) vel-list) |
| 69 | + (let* ((v0 (scale (/ 1.0 (elt time-list (1- i))) |
| 70 | + (v- (elt pos-list i) (elt pos-list (1- i))))) |
| 71 | + (v1 (scale (/ 1.0 (elt time-list i)) |
| 72 | + (v- (elt pos-list (1+ i)) (elt pos-list i)))) |
| 73 | + (v (scale 0.5 (v+ v0 v1)))) |
| 74 | + (dotimes (i (length v)) (if (< (* (elt v0 i) (elt v1 i)) 0) (setf (elt v i) 0))) |
| 75 | + (push v vel-list)))))) |
| 76 | + (setq acc-vector-list |
| 77 | + (reverse |
| 78 | + (do ((i 0 (1+ i)) (acc-list)) |
| 79 | + ((> i (length time-list)) acc-list) |
| 80 | + (if (or (= i 0) (= i (length time-list))) |
| 81 | + (push (instantiate float-vector (length (car vel-vector-list))) acc-list) |
| 82 | + (let* ((v0 (scale (/ 1.0 (elt time-list (1- i))) |
| 83 | + (v- (elt vel-vector-list i) (elt vel-vector-list (1- i))))) |
| 84 | + (v1 (scale (/ 1.0 (elt time-list i)) |
| 85 | + (v- (elt vel-vector-list (1+ i)) (elt vel-vector-list i)))) |
| 86 | + (v (scale 0.5 (v+ v0 v1)))) |
| 87 | + (dotimes (i (length v)) (if (< (* (elt v0 i) (elt v1 i)) 0) (setf (elt v i) 0))) |
| 88 | + (push v acc-list)))))) |
60 | 89 | (format t "=INPUT~%")
|
61 | 90 | (format t "time ~A~%" time-list)
|
62 | 91 | (format t " pos ~A~%" pos-list)
|
|
66 | 95 | :position-list pos-list
|
67 | 96 | :time-list (let (r) (dolist (n time-list) (push (+ n (if r (car r) 0)) r)) (nreverse r)) ;; list of time[sec] from start for each control point
|
68 | 97 | (append
|
69 |
| - (if vel-vector-list (list :vel-vector-list vel-vector-list)) |
70 |
| - (if acc-vector-list (list :acc-vector-list acc-vector-list)))) |
| 98 | + (if vel-vector-list (list :velocity-list vel-vector-list)) |
| 99 | + (if acc-vector-list (list :acceleration-list acc-vector-list)))) |
71 | 100 | (send ip :start-interpolation)
|
72 | 101 | (while (send ip :interpolatingp)
|
73 | 102 | (push (if (send ip :interpolatingp)
|
|
0 commit comments