明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: `中微子

[提问] 遇到一个难题(表范图内对比选择)已经三天三夜没有解决了,忘大神能排忧解难,谢谢!

[复制链接]
发表于 2023-8-7 11:32:00 | 显示全部楼层
(setq wse '((0 8 1) (3 5 2) (7 9)))
  (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)))
 楼主| 发表于 2023-8-7 11:43:41 | 显示全部楼层
vormittag 发表于 2023-8-7 10:59
首先要先证明这个问题的解存在,接着再证明这个解唯一,最后再考虑怎么解。
你先把满足解存在、且唯一的条 ...

是的,我还是配个图来解释一下,马上更新。
 楼主| 发表于 2023-8-7 11:59:43 | 显示全部楼层
已有模板WSE,从乱线gws中筛选出符合要的线段并赋予模板的颜色。
javascript:;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2023-8-7 12:13:34 | 显示全部楼层
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)))

学习了,也是另一种思路。
发表于 2023-8-7 12:43:08 | 显示全部楼层
  1. (defun c:tt (/ lst)
  2.   ;; 结果: ((1 3 1) (2 4 1) (7.5 8 2) (11.2 11.7 256))
  3.   (setq wse '((0 5 1) (7 9 2) (11 12 256))
  4.         gws '((-1 2)(1 3)(2 4)(4 6)(5.5 8)(7.5 8)(8 10)(10.5 14)(11.2 11.7))
  5.   )
  6.   (foreach a wse
  7.     (setq co (last a))
  8.     (foreach b gws
  9.       (if (and (>= (car b) (car a))(<= (cadr b) (cadr a)))
  10.         (setq lst (cons (append b (list co)) lst))
  11.       )
  12.     )
  13.   )
  14.   (setq lst (reverse lst))
  15.   (print lst)
  16.   (princ)
  17. )



评分

参与人数 1明经币 +1 收起 理由
`中微子 + 1

查看全部评分

发表于 2023-8-7 13:36:14 | 显示全部楼层
如果模板没有重叠,可以这样
(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)
  )

评分

参与人数 1明经币 +1 收起 理由
`中微子 + 1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-8-7 14:59:42 | 显示全部楼层

非常感谢版主,和我的思路一样,是我出了bug,现在解决了。谢谢!

点评

三天三夜看不出一个bug?  发表于 2023-8-8 14:02
发表于 2023-8-8 11:03:03 | 显示全部楼层
应该首先给出规则图示与说明,否则完全无法理解你的需求呀...
看了图示就简单了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-17 00:17 , Processed in 0.176076 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表