本帖最后由 cy956 于 2013-5-28 00:34 编辑
这是vl出现之前用的排序,楼主有兴趣就发上来看看。 - (defun lup(a / b mn mx);;;(lup a)■对一个数字表排序,重复的忽略
- (setq mn (apply 'min a) mn (- mn 1000.))
- (while (> (setq mx (apply 'max a)) mn)
- (setq b (cons mx b) a (subst mn mx a)) )
- b)
- (defun #px-point2;;(#px-point2 pb)■根据点表第1,2元素的xy比较排序,同#px-point1
- (pb / IN K N P0 P1 PB1 PB11 PB2 PB21 PT)
- ;点表排序,返回点表【根据第一二元素的xy比较】与#px-point1同
- (setq k(if(equal (car (nth 0 pb))(car (nth 1 pb)) 0.0001) 1 0 )
- n(length pb) in 0 pb1'() pb2'())
- (repeat n
- (setq pt(nth in pb) in (1+ in))
- (if pt
- (setq pb1(cons (nth k pt) pb1)
- pb2(append pb2 (list (cons (nth k pt) pt)))))
- )
- (setq pb11(lup pb1)n(length pb11)in 0
- p0(car pb11)pb21(list (dxf p0 pb2)))
- (repeat n
- (setq p1(nth in pb11))
- (if (equal p1 p0 0.0000001)
- (setq in (1+ in))
- (setq in (1+ in)
- pb21(append pb21 (list (dxf p1 pb2)))
- p0 p1)
- )
- )pb21
- )
不过有好用的,为何还想着老的?玩lisp又到不了底层。
|