chlh_jd
« Reply #4 on: February 26, 2014, 01:45:38 AM »
Fit Line though least-square method .
(defun LS
-Pts
->Line
(lst
/ n arg_mat res_vec a b c d res
) ;; Pointset return Line by Least Square method
;; lst -- 2D Pointset
;; kx+b=Y
;; by GSLS(SS) 2013-11-16
res_vec
(cons y res_vec
)))) lst
) (solve-odeq arg_mat res_vec)
))
)
Test
(defun c:TEST (/ l r k b xa ya xb yb pa pb p10 p11)
(prompt "\nFit Line though Least-square method,the points you selected must be at least 2 !!!")
(setq l (mapcar (function (lambda (x) (cdr (assoc 10 (entget x)))))
(vl-remove-if-not
(function (lambda (x) (eq (type x) 'ENAME)))
(mapcar 'cadr (ssnamex (ssget '((0 . "POINT")))))))
l (mapcar (function (lambda (p)
(trans p 0 1 t)))
l))
(if (and (> (length l) 1)(setq r (LS-Pts->Line l)))
(progn
(setq k (car r)
b (cadr r))
(setq l (vl-sort l (function (lambda (a b) (< (car a) (car b))))))
(setq xa (caar l)
ya (+ (* k xa) b)
xb (car (last l))
yb (+ (* k xb) b)
pa (list xa ya)
pb (list xb yb)
p10 (pedal (car l) pa pb)
p11 (pedal (last l) pa pb))
(setq p10 (trans p10 1 0 t)
p11 (trans p11 1 0 t))
(entmakex
(list (cons 0 "LINE")
(cons 10 p10)
(cons 11 p11)
(cons 210 (trans (quote(0.0 0.0 1.0)) 1 0 t))))
))
(princ)
)
« Last Edit: March 08, 2014, 10:52:34 AM by chlh_jd »
Logged