乐筑天下

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

[编程交流] 找到s上的高点和低点

[复制链接]

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:55:11 | 显示全部楼层
比格尔,非常感谢你的帮助!我以前从来并没有在表面上做过大量的统计,里面有一些很酷的信息。不幸的是,我仍然需要使用点,因为我必须绘制一条到最大或最小高程点的线,如果在最大或最小高程处有多个点,则绘制多条线。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 17:59:14 | 显示全部楼层
我仍然很困惑为什么我的while循环不能正常工作。在它们中,我尝试循环,直到我不再处于最小z值,并从给定点(我找到当前视图的中心)绘制一条线到该点。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:00:48 | 显示全部楼层
 
您的代码:
返回按z坐标递增排序的点列表。
 
但是,while循环(仅考虑第一个示例)永远不会计算测试表达式后面的表达式:
 
由于测试表达式将在第一次评估时返回nil:“而第一项的z坐标大于或等于第二项的z坐标”。只有当列表中的项具有相等的整数z坐标时,该语句才为真(因为列表是按z坐标值的递增顺序排序的,并且由于双精度浮点格式,double很少真正相等)。
 
然而,由于您正在寻找给定排序标准的极值,因此不需要排序(我们不关心剩余值的顺序),因此,代码可以变成:
示例:
  1. (defun getminmax ( lst / maz miz rtn zco )
  2.    (setq rtn (list (list (car lst)) (list (car lst)))
  3.          miz (caddar lst)
  4.          maz miz
  5.    )
  6.    (foreach itm (cdr lst)
  7.        (setq zco (caddr itm))
  8.        (cond
  9.            (   (equal miz zco 1e-
  10.                (setq rtn (cons (cons itm (car rtn)) (cdr rtn)))
  11.            )
  12.            (   (equal maz zco 1e-
  13.                (setq rtn (reverse (cons (cons itm (cadr rtn)) (cdr (reverse rtn)))))
  14.            )
  15.            (   (< (caddr itm) miz)
  16.                (setq rtn (cons (list itm) (cdr rtn))
  17.                      miz zco
  18.                )
  19.            )
  20.            (   (< maz (caddr itm))
  21.                (setq rtn (reverse (cons (list itm) (cdr (reverse rtn))))
  22.                      maz zco
  23.                )
  24.            )
  25.        )
  26.    )
  27.    rtn
  28. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:04:50 | 显示全部楼层
作为从集合中获取“极值”的一般示例,请考虑以下函数:
从我上面的帖子中检索列表中具有最小z坐标的点,然后变成:
  1. (defun getextreme ( lst prd / rtn )
  2.    (setq rtn (car lst) prd (eval prd))
  3.    (foreach itm (cdr lst)
  4.        (if (prd itm rtn) (setq rtn itm))
  5.    )
  6.    rtn
  7. )
和最大值:
  1. _$ (getextreme lst '(lambda ( a b ) (< (caddr a) (caddr b))))
  2. (0.055268 2.26906 0.016701)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:06:41 | 显示全部楼层
李,这是非常翔实的!我知道我需要阅读更多关于lambda函数的内容,因为我经常把它搞砸。当我在看你的minmax函数时,我试图创建两个不同的函数(或者一个函数会要求参数“min”,例如),一个叫做getmax,另一个叫做getmin,因此
  1. 14
将返回
当我调用min函数时。我不知道它在函数中的什么地方找到了高点(我试着注释了maz部分,但那不是它)。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:08:53 | 显示全部楼层
欢迎您加入野马队-如果您对代码的运行方式有任何疑问,请随时提问。
 
对于您描述的“多用途”功能,请考虑以下几点:
使用您的示例进行评估:
  1. 17
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:12:45 | 显示全部楼层
或者,更通用:
  1. 18
  1. 19
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:16:09 | 显示全部楼层
非常好,谢谢你的帮助!我有一个关于什么是caddar函数的快速问题?我找不到它的任何文档,只有cadar功能。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:18:52 | 显示全部楼层
 
太好了-不客气!
 
 
请参阅以下资源:
http://www.theswamp.org/index.php?topic=39025.msg442238#msg442238
http://www.theswamp.org/index.php?topic=45131.msg503433#msg503433
http://www.theswamp.org/index.php?topic=31473.0
http://ronleigh.com/autolisp/ales11.htm
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:24:00 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 07:52 , Processed in 0.510530 second(s), 81 queries .

© 2020-2025 乐筑天下

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