明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1709|回复: 19

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

[复制链接]
发表于 2023-8-7 08:54:16 | 显示全部楼层 |阅读模式
本帖最后由 `中微子 于 2023-8-7 12:02 编辑

;;;把gws单个与wse对比,只选择gws在wse范围内的数组
(defun c:tt (/ waco1 waco)
  (setq wse '((0 8) (3 5) (7 9)))
  (setq gws '((1 1) (3 5) (6 10) (8 10) (8 8) (2 7)))
  
  (foreach en wse
    (foreach en1 gws
      (if (and
            (>= (car en1) (car en))
            (<= (cadr en1) (cadr en))
          )
        (setq waco1 (cons en1 waco1))
      )
    )
    (setq waco (cons waco1 waco))
    (setq wac1 nil)
  )
  (print waco)
;;;输出结果应该是((1 1)(2 7)(3 5)(8 8))

  (princ)
)
新手,不知道出错在哪里?请指教!

原理请移步13楼。有示意图。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 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 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 09:03:26 | 显示全部楼层
本帖最后由 jun353835273 于 2023-8-7 09:20 编辑
  1. (defun c:tt (/ waco1 waco)
  2.   (setq wse '((0 8) (3 5) (7 9)))
  3.   (setq gws '((1 1) (3 5) (6 10) (8 10) (8 8) (2 7)))
  4.   (foreach en wse
  5.    (foreach en1 gws
  6.       (if (and
  7.             (>= (car en1) (car en))
  8.             (<= (cadr en1) (cadr en))
  9.           )
  10.   (progn
  11.           (if (not (member en1 waco1))
  12.               (setq waco1 (cons en1 waco1))
  13.       )
  14.    )
  15.       )
  16.     )
  17.   )
  18. (setq waco1 (reverse waco1))
  19. (print waco1)
  20. (princ)
  21. )

去下重复就行了,也可以过滤的时候搞
 楼主| 发表于 2023-8-7 09:46:26 | 显示全部楼层
本帖最后由 `中微子 于 2023-8-7 09:47 编辑
jun353835273 发表于 2023-8-7 09:03
去下重复就行了,也可以过滤的时候搞

谢谢!抱歉我没有描述完整wse里还有一个颜色识别码。
;;;把gws单个与wse对比,只选择gws在wse范围内的数组,wse里第三位是颜色识别码,没有就是随层256.
(defun c:tt (/ waco1 waco)
  (setq wse '((0 8 1) (3 5 2) (7 9)))
  (setq gws '((1 1) (3 5) (6 10) (8 10) (8 8) (2 7)))
  (foreach en wse
    (if (= (caddr en) nil)
      (setq b 256)
      (setq b (caddr en))
      )
    (setq waco1 (list b))
  (foreach en1 gws
      (if (and
            (>= (car en1) (car en))
            (<= (cadr en1) (cadr en))
          )
        (setq waco1 (cons en1 waco1))
      )
    )
    (setq waco (cons waco1 waco))
    (setq wac1 nil)
  )
  (print waco)
;;;输出结果应该是((1 1 1)(2 7 1)(3 5 2)(8 8 256))

  (princ)
)
发表于 2023-8-7 09:54:33 | 显示全部楼层
本帖最后由 liuhe 于 2023-8-7 09:58 编辑

变动太大  不玩了

点评

语句不通顺有错别字的求助贴,我一般直接跳过不看  发表于 2023-8-7 14:43
发表于 2023-8-7 09:57:49 | 显示全部楼层
本帖最后由 lijiao 于 2023-8-7 11:25 编辑

(1 1)既在(0 8 1)中,又在 (3 5 2) 中,还在(7 9)中,颜色是该取1呢,还是该取2呢,或者是该取256呢?



****************************************************************
一时疏忽,写错了,应该是(3 5)既在(0 8 1)中,又在(3 5 2) 中

                                  (8 8)既在(0 8 1)中,又在(7 9) 中
发表于 2023-8-7 09:59:39 | 显示全部楼层
lijiao 发表于 2023-8-7 09:57
(1 1)既在(0 8 1)中,又在 (3 5 2) 中,还在(7 9)中,颜色是该取1呢,还是该取2呢,或者是该取256呢?

哈哈   
 楼主| 发表于 2023-8-7 10:04:05 | 显示全部楼层
lijiao 发表于 2023-8-7 09:57
(1 1)既在(0 8 1)中,又在 (3 5 2) 中,还在(7 9)中,颜色是该取1呢,还是该取2呢,或者是该取256呢?

没有啊!(1 1)不在(3 5)内,第一个数1比3大和第二个数1比5小才成立。
发表于 2023-8-7 10:21:31 | 显示全部楼层
`中微子 发表于 2023-8-7 10:04
没有啊!(1 1)不在(3 5)内,第一个数1比3大和第二个数1比5小才成立。

(3 4)是不是同时在(3 5)(0 8)之间
 楼主| 发表于 2023-8-7 10:26:22 | 显示全部楼层
liuhe 发表于 2023-8-7 10:21
(3 4)是不是同时在(3 5)(0 8)之间

没有(3 4)吧!别搞笑
发表于 2023-8-7 10:59:42 | 显示全部楼层
首先要先证明这个问题的解存在,接着再证明这个解唯一,最后再考虑怎么解。
你先把满足解存在、且唯一的条件补充全再考虑怎么做吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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