(setq gws '((1 1) (3 5) (6 10) (8 10) (8 8) (2 7)))
(vl-remove nil (mapcar '(lambda(x)
(if (setq owse (vl-remove-if-not '(lambda(y)
(<= (car y) (car x) (cadr x) (cadr y))
)
wse)
)
(mapcar '(lambda(y)
(append x (if (cddr y) (cddr y) '(256)))
)
owse)
)
)
gws)
)
结果:(((1 1 1)) ((3 5 1) (3 5 2)) ((8 8 1) (8 8 256)) ((2 7 1))) vormittag 发表于 2023-8-7 10:59
首先要先证明这个问题的解存在,接着再证明这个解唯一,最后再考虑怎么解。
你先把满足解存在、且唯一的条 ...
是的,我还是配个图来解释一下,马上更新。 已有模板WSE,从乱线gws中筛选出符合要的线段并赋予模板的颜色。
javascript:; lijiao 发表于 2023-8-7 11:32
(setq wse '((0 8 1) (3 5 2) (7 9)))
(setq gws '((1 1) (3 5) (6 10) (8 10) (8 8) (2 7)))
学习了,也是另一种思路。
(defun c:tt (/ lst)
;; 结果: ((1 3 1) (2 4 1) (7.5 8 2) (11.2 11.7 256))
(setq wse '((0 5 1) (7 9 2) (11 12 256))
gws '((-1 2)(1 3)(2 4)(4 6)(5.5 8)(7.5 8)(8 10)(10.5 14)(11.2 11.7))
)
(foreach a wse
(setq co (last a))
(foreach b gws
(if (and (>= (car b) (car a))(<= (cadr b) (cadr a)))
(setq lst (cons (append b (list co)) lst))
)
)
)
(setq lst (reverse lst))
(print lst)
(princ)
)
如果模板没有重叠,可以这样
(vl-remove nil (mapcar '(lambda(x)
(if (setq owse (vl-remove-if-not '(lambda(y)
(<= (car y) (car x) (cadr x) (cadr y))
)
wse)
)
(append x (if (caddr y) (caddr y) '(256)))
)
)
gws)
) xyp1964 发表于 2023-8-7 12:43
非常感谢版主,和我的思路一样,是我出了bug,现在解决了。谢谢!
应该首先给出规则图示与说明,否则完全无法理解你的需求呀...
看了图示就简单了。
页:
1
[2]