BIGAL 发表于 2022-7-5 17:55:11

比格尔,非常感谢你的帮助!我以前从来并没有在表面上做过大量的统计,里面有一些很酷的信息。不幸的是,我仍然需要使用点,因为我必须绘制一条到最大或最小高程点的线,如果在最大或最小高程处有多个点,则绘制多条线。

broncos15 发表于 2022-7-5 17:59:14

我仍然很困惑为什么我的while循环不能正常工作。在它们中,我尝试循环,直到我不再处于最小z值,并从给定点(我找到当前视图的中心)绘制一条线到该点。

broncos15 发表于 2022-7-5 18:00:48

 
您的代码:
返回按z坐标递增排序的点列表。
 
但是,while循环(仅考虑第一个示例)永远不会计算测试表达式后面的表达式:
 
由于测试表达式将在第一次评估时返回nil:“而第一项的z坐标大于或等于第二项的z坐标”。只有当列表中的项具有相等的整数z坐标时,该语句才为真(因为列表是按z坐标值的递增顺序排序的,并且由于双精度浮点格式,double很少真正相等)。
 
然而,由于您正在寻找给定排序标准的极值,因此不需要排序(我们不关心剩余值的顺序),因此,代码可以变成:
示例:
(defun getminmax ( lst / maz miz rtn zco )
   (setq rtn (list (list (car lst)) (list (car lst)))
         miz (caddar lst)
         maz miz
   )
   (foreach itm (cdr lst)
       (setq zco (caddr itm))
       (cond
         (   (equal miz zco 1e-
               (setq rtn (cons (cons itm (car rtn)) (cdr rtn)))
         )
         (   (equal maz zco 1e-
               (setq rtn (reverse (cons (cons itm (cadr rtn)) (cdr (reverse rtn)))))
         )
         (   (< (caddr itm) miz)
               (setq rtn (cons (list itm) (cdr rtn))
                     miz zco
               )
         )
         (   (< maz (caddr itm))
               (setq rtn (reverse (cons (list itm) (cdr (reverse rtn))))
                     maz zco
               )
         )
       )
   )
   rtn
)

Lee Mac 发表于 2022-7-5 18:04:50

作为从集合中获取“极值”的一般示例,请考虑以下函数:
从我上面的帖子中检索列表中具有最小z坐标的点,然后变成:
(defun getextreme ( lst prd / rtn )
   (setq rtn (car lst) prd (eval prd))
   (foreach itm (cdr lst)
       (if (prd itm rtn) (setq rtn itm))
   )
   rtn
)和最大值:
_$ (getextreme lst '(lambda ( a b ) (< (caddr a) (caddr b))))
(0.055268 2.26906 0.016701)

Lee Mac 发表于 2022-7-5 18:06:41

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

broncos15 发表于 2022-7-5 18:08:53

欢迎您加入野马队-如果您对代码的运行方式有任何疑问,请随时提问。
 
对于您描述的“多用途”功能,请考虑以下几点:
使用您的示例进行评估:
17

Lee Mac 发表于 2022-7-5 18:12:45

或者,更通用:
18
19

Lee Mac 发表于 2022-7-5 18:16:09

非常好,谢谢你的帮助!我有一个关于什么是caddar函数的快速问题?我找不到它的任何文档,只有cadar功能。

broncos15 发表于 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

Lee Mac 发表于 2022-7-5 18:24:00

页: 1 [2]
查看完整版本: 找到s上的高点和低点