Function: strokes-rate-stroke
strokes-rate-stroke is a byte-compiled function defined in
strokes.el.gz.
Signature
(strokes-rate-stroke STROKE1 STROKE2)
Documentation
Rate STROKE1 with STROKE2 and return a score based on a distance metric.
Note: the rating is an error rating, and therefore, a return of 0 represents a perfect match. Also note that the order of stroke arguments is order-independent for the algorithm used here.
Source Code
;; Defined in /usr/src/emacs/lisp/strokes.el.gz
(defun strokes-rate-stroke (stroke1 stroke2)
"Rate STROKE1 with STROKE2 and return a score based on a distance metric.
Note: the rating is an error rating, and therefore, a return of 0
represents a perfect match. Also note that the order of stroke
arguments is order-independent for the algorithm used here."
(if (and stroke1 stroke2)
(let ((rest1 (cdr stroke1))
(rest2 (cdr stroke2))
(err (strokes-distance-squared (car stroke1)
(car stroke2))))
(while (and rest1 rest2)
(while (and (consp (car rest1))
(consp (car rest2)))
(setq err (+ err
(strokes-distance-squared (car rest1)
(car rest2)))
stroke1 rest1
stroke2 rest2
rest1 (cdr stroke1)
rest2 (cdr stroke2)))
(cond ((and (strokes-lift-p (car rest1))
(strokes-lift-p (car rest2)))
(setq rest1 (cdr rest1)
rest2 (cdr rest2)))
((strokes-lift-p (car rest2))
(while (consp (car rest1))
(setq err (+ err
(strokes-distance-squared (car rest1)
(car stroke2)))
rest1 (cdr rest1))))
((strokes-lift-p (car rest1))
(while (consp (car rest2))
(setq err (+ err
(strokes-distance-squared (car stroke1)
(car rest2)))
rest2 (cdr rest2))))))
(if (null rest2)
(while (consp (car rest1))
(setq err (+ err
(strokes-distance-squared (car rest1)
(car stroke2)))
rest1 (cdr rest1))))
(if (null rest1)
(while (consp (car rest2))
(setq err (+ err
(strokes-distance-squared (car stroke1)
(car rest2)))
rest2 (cdr rest2))))
(if (or (strokes-lift-p (car rest1))
(strokes-lift-p (car rest2)))
(setq err nil)
err))
nil))