求助坐标点表筛选
快大半年没上明经了,很久没写程序了,一下子找不着北了,脑子里一片空白......求助各位下,关于点表筛选,如有下列lst长表和pt点:
(setq lst '((551.412 853.27) (551.412 640.288) (698.483 636.515) (702.702 700.806) (742.78 704.67) (742.725 735.776) (815.147 735.776) (815.147 817.797) (615.585 848.354)))
(setq pt '(683.279 744.893 0.0))
请问如果从lst点表中筛选出x方向大于pt点x方向的点表,组成新表,一下子卡壳了...
试试vl-member-if。 额....我的方法比较笨,大大看看就成,献丑了!
(defun c:tt()
(setq lst '((551.412 853.27) (551.412 640.288) (698.483 636.515) (702.702 700.806) (742.78 704.67) (742.725 735.776) (815.147 735.776) (815.147 817.797) (615.585 848.354)))
(setq pt '(683.279 744.893 0.0))
(setq i 0)
(setq xinbiao nil)
(repeat (length lst)
(setq X (car (nth i lst)))
(if (> X (car pt))
(setq xinbiao (append xinbiao (list (nth i lst))))
)
(setq i (1+ i))
)
(print xinbiao)
(princ)
) ll_j 发表于 2014-4-13 22:50 static/image/common/back.gif
试试vl-member-if。
谢谢,很少用vl函数,基础不好,大师能否指点下
我现在用的笨方法:
(setq pc (car pt) lsa '())
(while lst
(if (< pc (caar lst))
(setq lsa (cons (car lst) lsa))
)
(setq lst (cdr lst))
) (vl-remove-if '(lambda (x) (<= (car x) (car pt))) lst) xyp1964 发表于 2014-4-14 00:03 static/image/common/back.gif
(vl-remove-if '(lambda (x) (
院长的代码好使,10分感谢!
另外请教个问题,怎么去除筛选后同y的坐标,只保留一个。也就是说这个新lst中有相同y坐标的,取其一即可,还望赐教,谢谢 重慶崽兒 发表于 2014-4-13 23:26 static/image/common/back.gif
额....我的方法比较笨,大大看看就成,献丑了!
谢谢支持,方法不错 应该是如果有两个或两个以上相同y方向的坐标(x方向不一样)怎么保留其中之一,x方向大则保留,谢谢 本帖最后由 xyp1964 于 2014-4-14 19:59 编辑
;; (aaa lst pt)
(defun aaa (lst pt / lst1 ptn)
(setq lst(vl-remove-if '(lambda (x) (<= (car x) (car pt))) lst)
lst (vl-sort lst '(lambda (x y)
(cond ((< (cadr x) (cadr y)) T)
((and (= (cadr x) (cadr y))(> (car x) (car y)))T)
(T nil)
)
)
)
lst1 '()
ptn'()
)
(foreach pt lst
(if (not (member (cadr pt) lst1))
(setq lst1 (cons (cadr pt) lst1)
ptn (cons pt ptn)
)
)
)
(reverse ptn)
) (defun tt(lst / a b)
(while lst
(setq a(car lst)lst(cdr lst)
a(car(vl-sort(cons a(vl-remove-if'(lambda(x)(/=(cadr a)(cadr x)))lst))(function(lambda(x1 x2)(>(car x1)(car x2))))))
lst(vl-remove-if'(lambda(x)(=(cadr a)(cadr x)))lst))
(setq b(cons a b)))
(reverse b))
;;;;_$(tt'((551.412 853.27)(688.70 700.806)(702.702 700.806)(742.78 704.67)(768.78 704.67)(615.585 848.354)))
;;;;((551.412 853.27) (702.702 700.806) (768.78 704.67) (615.585 848.354))
页:
[1]
2