两个关联表根据指定函数排序
请求mapcar,foreach级别高手帮忙啊;; lst1的点分别位于lst2表组成的多边形内,顺序不对;; 现将lst2内的表按照函数 *判断点是否在多边形内* 对lst2重新进行排列,请问如何嵌套foreach达到目的
(setq lst1 '((1266.34 -793.366 0.0) (1109.44 -350.086 0.0) (1670.87 -371.66 0.0) (1543.04 -773.619 0.0))) ;;点表
(setq lst2 '(((1522.25 -655.235 0) (1522.25 -952.235 0) (1942.25 -952.235 0) (1942.25 -655.235 0)) ((930.677 -655.235 0) (930.677 -952.235 0) (1350.68 -952.235 0) (1350.68 -655.235 0)) ((1522.25 -174.764 0) (1522.25 -471.764 0) (1942.25 -471.764 0) (1942.25 -174.764 0)) ((930.677 -174.764 0) (930.677 -471.764 0) (1350.68 -471.764 0) (1350.68 -174.764 0))));;封闭图形坐标表
;; No.51判断点是否在多边形内(狂刀程序)
(defun isPtinPM(xPt Points)
(equal
PI
(abs
(apply
'+
(mapcar'(lambda (x y) (rem (- (angle xPt x) (angle xPt y)) PI))
(reverse (cdr (reverse (cons (last Points) Points))))
Points
)
)
)
1e-6
)
) 什么顺序不对...你想要的顺序是什么....上个图说明一下呗.... q3_2006 发表于 2013-12-25 10:53 static/image/common/back.gif
什么顺序不对...你想要的顺序是什么....上个图说明一下呗....
我想按照图中的text编号按照顺序排列这些图框。除了用循环还有没有更简单的方法 4个点依次在4个点表内?? newbuser 发表于 2013-12-25 10:56 http://bbs.mjtd.com/static/image/common/back.gif
我想按照图中的text编号按照顺序排列这些图框。除了用循环还有没有更简单的方法
图里要说明排序之前的顺序和排好后的顺序..... 大哥,图中元顺序是图元生成的顺序,要排列成按照text文件的3,11,12,20排列啊。 本帖最后由 q3_2006 于 2013-12-25 12:59 编辑
(defun c:tt ( / i l lst1 lst2 x y)
(setq lst1 '((1266.34 -793.366 0.0) (1109.44 -350.086 0.0) (1670.87 -371.66 0.0) (1543.04 -773.619 0.0))) ;;点表
(setq lst2 '(((1522.25 -655.235 0) (1522.25 -952.235 0) (1942.25 -952.235 0) (1942.25 -655.235 0))
((930.677 -655.235 0) (930.677 -952.235 0) (1350.68 -952.235 0) (1350.68 -655.235 0))
((1522.25 -174.764 0) (1522.25 -471.764 0) (1942.25 -471.764 0) (1942.25 -174.764 0))
((930.677 -174.764 0) (930.677 -471.764 0) (1350.68 -471.764 0) (1350.68 -174.764 0))))
(setq l '()
l (reverse (last (mapcar
'(lambda (x)
(repeat (setq i (length lst2))
(setq y (nth (setq i (1- i))
lst2
)
)
(if (isPtinPM x y)
(setq l (cons y l))
)
)
)
lst1
)
)
)
)
) 本帖最后由 q3_2006 于 2013-12-25 13:13 编辑
我也新手....这是LST2按LST1的顺序排...感觉应该有更简单的写法....拜托高手来个简洁版的.... (setq ptn '())
(foreach pt lst1
(if (setq ptn1 (vl-remove-if
'(lambda (x) (not (isPtinPM pt x))) lst2)
)
(setq ptn (cons (car ptn1) ptn))
)
)
(setq ptn (reverse ptn))
(mapcar '(lambda (x) (car (vl-remove-if '(lambda (y) (not (isPtinPM x y))) lst2))) lst1)
页:
[1]
2