mjthetuxedo 发表于 2008-5-25 16:37:00

过滤相同坐标问题目

用vl-sort排序时能过滤掉相同坐标<br/>不用vl-sort排序,想过滤掉相同坐标如何实现???<br/>

caoyin 发表于 2008-5-25 17:06:00

<p>(defun&nbsp;test (lst / a lst2)<br/>&nbsp; (while (setq a&nbsp;&nbsp;&nbsp; (car lst)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lst2 (cons a lst2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lst&nbsp; (vl-remove-if '(lambda (x) (equal a x 1e-7)) lst)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (reverse lst2)<br/>)</p>

mjthetuxedo 发表于 2008-5-25 19:36:00

谢谢2楼的回复~~<br/>我刚才表达的不是很清楚<br/><br/>举个例子:<br/>图纸上有N个圆~~其中有某些圆是重叠的(并不知道重叠圆的位置)<br/>需要全部选择这些圆~~<br/>并逐个提取圆心坐标~~<br/>例:提取一个圆心坐标~~对比表中是否含有这个坐标<br/>如没有~则将该坐标加入到表中~~并提取该圆的半径进行统计个数<br/>如有,则不将该坐标加入到表,也不提取半径进行个数累加。<br/>直到将这些圆坐标全部提取对比完毕<br/><br/>不知能否实现<br/>

mjthetuxedo 发表于 2008-6-1 13:22:00

顶一下

caoyin 发表于 2008-6-1 16:08:00

本帖最后由 作者 于 2008-6-1 16:08:57 编辑 <br /><br /> <p>;;排除掉多余同心圆,返回圆半径列表</p><p>(defun c:ttt (/ ss i en ent cnt lst1 lst2)<br/>&nbsp; (if (setq ss (ssget '((0 . "CIRCLE"))))<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat (setq i (sslength ss))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq en&nbsp; (ssname ss (setq i (1- i)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ent (entget en)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnt (cdr (assoc 10 ent))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp; (vl-catch-all-apply<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(lambda ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (foreach p lst1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (equal cnt p 1e-6) (exit))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not (vl-catch-all-error-p r))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lst1 (cons cnt lst1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lst2 (cons (cdr (assoc 40 ent)) lst2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (reverse lst2)<br/>)</p><p></p><p></p><p></p>

yxp 发表于 2008-6-1 18:33:00

本帖最后由 作者 于 2008-6-1 18:35:20 编辑 <br /><br /> <p>楼上的程序有问题啊。</p><p>返回了不同坐标的园的半径。</p>需要把40改为10

yxp 发表于 2008-6-3 18:32:00

<p>能过滤重复的直线或者point点吗?如果可以,就能优化dwg了。</p>

caoyin 发表于 2008-6-3 23:25:00

<p>论坛有这样的帖子,搜索一下</p>

115854833 发表于 2011-6-13 10:55:26

坐标数组排序(过滤重复)
(setq lst '((1 3 0)(4 4 0)(2 5 0)(6 8 0)(1 3 0)(4 4 0)(2 5 0)(6 8 0)))
(setq ile (vl-list-length lst))

(setq i 0)
(repeat ile
(foreach n lst
    (if
      (equal (nth i lst) n 0.00001)
       (progn
(setq lst0 (vl-remove (nth i lst) lst))
(setq lst (cons (nth i lst) lst0))
(setq ile (vl-list-length lst))
       )
    )
)
(setq i (1+ i))
)
;;y坐标按小~大排序
(setq lsty (vl-sort lst
   (function
       (lambda (e1 e2)
         (< (cadr e1) (cadr e2))
       )
   )
   )
)
;;X坐标按小~大排序
(setq lstx (vl-sort lsty
   (function
       (lambda (e1 e2)
         (< (car e1) (car e2))
       )
   )
   )
)

出输y坐标按小~大排序结果((1 3 0) (4 4 0) (2 5 0) (6 8 0))
出输X坐标按小~大排序结果((1 3 0) (2 5 0) (4 4 0) (6 8 0))

pizg 发表于 2011-7-22 01:01:00

有沒有方法做線性排序?
例如有數個座標點都在一直線上,
例如 '((3 3 0) (2 2 0) (5 5 0) (1 1 0) (4 4 0) (0 0 0))
應該如何做才能將它們排序成
'((0 0 0) (1 1 0) (2 2 0) (3 3 0) (4 4 0) (5 5 0)) 或
'((5 5 0) (4 4 0) (3 3 0) (2 2 0) (1 1 0) (0 0 0))
页: [1] 2
查看完整版本: 过滤相同坐标问题目