masterlong 发表于 2022-2-26 14:33:38

cddr = cdr+cdr

cdr属于200系列的话
这个cddr其实应该也属于200的延伸吧

baitang36 发表于 2022-2-26 14:44:39

masterlong 发表于 2022-2-26 14:33
cddr = cdr+cdr

cdr属于200系列的话


用lisp来延伸

baitang36 发表于 2022-2-26 15:23:08

先睹为快,后读免费。没币的朋友在这里下载

明_明 发表于 2022-3-1 11:50:08

感谢分享好资料!以后使用的时候就知用得上.

尘缘一生 发表于 2022-3-2 01:08:16

baitang36 发表于 2022-2-26 14:44
用lisp来延伸


[*];;Graham扫描法求凸包
[*](defun graham-scan (ptlist / hullpt maxXpt sortPt P Q)
[*](if (< (length ptlist) 3)            ;3点以下
[*]    ptlist                ;是本集合
[*]    (progn
[*]      (setq maxXpt (assoc (apply 'max (mapcar 'car ptlist)) ptlist));最右边的点
[*]      (setq sortPt (sort-by-angle-distance ptlist maxXpt)) ;分类点集
[*]      (setq hullPt (list (cadr sortPt) maxXpt))      ;开始的两点      
[*]      (foreach &n (cddr sortPt)            ;从第3点开始
[*]      (setq hullPt (cons &n HullPt))          ;把Pi加入到凸集
[*]      (setq P (cadr hullPt))            ;Pi-1
[*]      (setq Q (caddr hullPt))            ;Pi-2
[*]      (while (and q (> (det &n P Q) -1e-6))         ;如果左转
[*]          (setq hullPt (cons &n (cddr hullPt)))         ;删除Pi-1点
[*]          (setq P (cadr hullPt))          ;得到新的Pi-1点
[*]          (setq Q (caddr hullPt))          ;得到新的Pi-2点
[*]      )
[*]      )
[*]      (reverse hullpt);返回凸集
[*]    )
[*])
[*])


把CDDR 改写快点的话,如何改写?

mokson 发表于 2022-3-2 08:22:16

高手总是有太多的方法

baitang36 发表于 2022-3-2 08:23:50

尘缘一生 发表于 2022-3-2 01:08
[*];;Graham扫描法求凸包
[*](defun graham-scan (ptlist / hullpt maxXpt sortPt P Q)
[*](if (<...

cddr的lisp源码是(defun cddr(x)(cdr (cdr x)))
cddr的fas码是 14 01 01 01 00 05 00 29 29 16   
如果cddr直接写成(cdr (cdr x))应该能快一点,因为省去了14 和16指令的执行时间,参数传递的时间也节省了。
我没测试过,你可以弄个测试程序看看有多大差别。

baitang36 发表于 2022-3-2 08:35:38

masterlong 发表于 2022-2-26 14:33
cddr = cdr+cdr

cdr属于200系列的话


所有的lisp函数层层调用,最终都是调用的200系列函数,这些函数再调用windows系统的api,如果lisp直接调用api那会是最快的。

guosheyang 发表于 2022-3-2 10:18:17

看了下   repeatwhile    foreach    vlax-formapcar   等循环函数都是4系列的   请问有无非4系列的循环函数或者不用这几个如何实现循环呢? 谢谢!

baitang36 发表于 2022-3-2 17:03:34

guosheyang 发表于 2022-3-2 10:18
看了下   repeatwhile    foreach    vlax-formapcar   等循环函数都是4系列的   请问有无非4系列的循 ...

这几个都是lsp源码加载时用的,fas没有循环函数的
页: 1 [2] 3
查看完整版本: 【原创】按实现方法给autolisp函数分类