乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 11|回复: 11

[编程交流] 查找最高和最低ma

[复制链接]

4

主题

14

帖子

10

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 16:27:13 | 显示全部楼层 |阅读模式
你好
在我的画作中有200个基本元素“点”,我如何快速找到它们中的最高点和最低点?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:38:09 | 显示全部楼层
你好
 
通过检索每个点的坐标,然后用它们的最大Y坐标对它们进行排序,很容易做到这一点,最后列表中的第一个和最后一个项目将是最高和最低的。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 16:41:25 | 显示全部楼层
如果已将点汇编为列表,则
  1. (apply 'max (mapcar 'caddr pt_list))
  2. (apply 'min (mapcar 'caddr pt_list))

 
还有其他几种方法可用-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:48:45 | 显示全部楼层
当试图确定点集的极值时,应避免排序,因为该集只需处理一次。因此,这可以以O(n)效率执行,而排序通常按O(n log n)的顺序进行。
 
因此,我建议如下:
  1. (defun maxmin ( lst / mni mxa zco zmi zmx )
  2.    (setq mni (car lst) zmi (caddr mni) mxa mni zmx zmi)
  3.    (foreach  itm (cdr lst)
  4.        (setq zco (caddr itm))
  5.        (cond
  6.            (   (< zmx zco)
  7.                (setq mxa itm zmx zco)
  8.            )
  9.            (   (< zco zmi)
  10.                (setq mni itm zmi zco)
  11.            )
  12.        )
  13.    )
  14.    (list mni mxa)
  15. )
回复

使用道具 举报

4

主题

14

帖子

10

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 16:51:31 | 显示全部楼层
 
在命令提示下出现错误:参数太少(()
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:58:26 | 显示全部楼层
为我工作
 
  1. (SETQ LST (LIST (LIST 10 20 30)(LIST 20 20 20)(LIST 10 10 100)))
  2. (maxmin lst)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:04:29 | 显示全部楼层
 
该函数用于其他程序,不定义AutoCAD命令。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:10:11 | 显示全部楼层
令人敬畏(有效)的功能Lee,
刚想出来:
为什么不使用相同的算法编写更全局的东西,例如接受函数和列表参数(就像vl排序),即:
 
  1. (foo (lambda (r x) (< r x)) '(3 8 9 1 5 6 2 7) )
  2. -> 1

 
其中,lambda是一个测试函数,采用两个参数进行比较:
r-要退回的项目
x-比较项
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:13:03 | 显示全部楼层
感谢Grrr-对于泛型函数,请考虑以下内容:
  1. (defun extremum ( cmp lst / rtn )
  2.    (setq rtn (car lst))
  3.    (foreach itm (cdr lst)
  4.        (if (apply cmp (list itm rtn)) (setq rtn itm))
  5.    )
  6.    rtn
  7. )
  1. _$ (extremum '< '(3 8 9 1 5 6 2 7))
  2. 1
  1. _$ (extremum '(lambda ( a b ) (< (caddr a) (caddr b))) '((1.2 5.7 8.3) (9.4 2.6 0.3) (5.7 6.6 7.2)))
  2. (9.4 2.6 0.3)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:20:51 | 显示全部楼层
或递归:
  1. (defun extremum ( cmp lst )
  2.    (   (lambda ( foo ) (if (cdr lst) (foo (car lst) (extremum cmp (cdr lst))) (car lst)))
  3.        (lambda ( a b ) (if (apply cmp (list a b)) a b))
  4.    )
  5. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 21:04 , Processed in 2.113807 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表