Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun make-line (func l r b)
- (loop for x from l to r by b collect (cons x (funcall func x))))
- (defun f (x) (- (- (* x x)) 3)) ; -x^2 - 3
- (defun g (x) (* x x)) ; x^2
- (defun h (x) (+ (* x x) (* 10 x) 25)) ; (x + 5)^2
- (defun l (x) (+ x)) ; x
- (defparameter *line1* (make-line #'f -10 10 0.1))
- (defparameter *line2* (make-line #'g -10 10 0.1))
- (defparameter *line3* (make-line #'h -10 10 0.1))
- (defparameter *line4* (make-line #'l -10 10 0.1))
- (defun dist^2 (p1 p2)
- (+ (expt (- (car p1) (car p2)) 2) (expt (- (cdr p1) (cdr p2)) 2)))
- (defun mid-point (p1 p2)
- (cons (/ (+ (car p1) (car p2)) 2) (/ (+ (cdr p1) (cdr p2)) 2)))
- (defun minimum (lst &key (comp< #'<) (key #'identity))
- (let* ((res (car lst))
- (min (funcall key res)))
- (loop for p in (cdr lst) do
- (when (funcall comp< (funcall key p) min)
- (setf min (funcall key p) res p)))
- (values res min)))
- (defun mid-line (l1 l2)
- (sort (mapcar #'mid-point
- l1
- (loop for p1 in l1 collect
- (minimum l2 :key (lambda (p2) (dist^2 p1 p2)))))
- (lambda (p1 p2) (< (car p1) (car p2)))))
- ;ex.
- ;(mid-line *line3* *line4*)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement