明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 727|回复: 12

[经验] 封闭多段线节点序号向前后各续一个循环周期 不用if条件判断 让i连续变化求值的方法

[复制链接]
发表于 2023-1-6 19:10 | 显示全部楼层 |阅读模式
本帖最后由 guosheyang 于 2023-1-6 19:13 编辑

给朋友们分享  封闭多段线节点序号向前后各续一个循环周期 不用if条件判断 让i连续变化求值的方法 ,如有更好的方法请反馈  
(progn
  (setq l '(0 1 2 3 4 5 6));节点序号表
  (setq n(length l))       ;节点总数
  (setq l2(append l l l))  ;节点序号拓展表
  (nth (+ i n) l2)         ;i的取值范围(-(length l)) 到 (1-(* 2 (length l)))
  ;例如
     ;当i为6时 (nth (+ 6 n) l2) 的值是6
     ;当i为7时 (nth (+ 7 n) l2)的值是0
     ;当i为8时 (nth (+ 8 n) l2)的值是1
     ;当i为9时 (nth (+ 9 n) l2)的值是2
     ;当i为13时(nth (+ 13 n)l2)的值是6
  ;反方向
    ;当i为-1时(nth (+ -1 n)l2)的值是6
    ;当i为-2时(nth (+ -2 n)l2)的值是5
    ;当i为-7时(nth (+ -7 n)l2)的值是0
)




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

(setq l2(append l l l)) 可能扩展得还不够,假设表长1万,要求第1千万个,按你这思路那不是得先把这个表扩展1000次再说?  发表于 2023-1-7 16:05
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2023-1-7 18:28 | 显示全部楼层
本帖最后由 guosheyang 于 2023-1-7 18:31 编辑

这个只是针对闭合多段线 的圆角 倒角  角度标注等目的写的  其实就是解决点表第一点   最后一点的  上一点  上上点  下一点  下下点 的衔接问题    不需要那么多   前后重叠一个整表一般都用不到  一般不超过两个列表项
如果要无限循环 还是要用你的那个公式  但我是没遇到过需要无限循环的情况
 楼主| 发表于 2023-1-7 18:35 | 显示全部楼层
guosheyang 发表于 2023-1-7 18:28
这个只是针对闭合多段线 的圆角 倒角  角度标注等目的写的  其实就是解决点表第一点   最后一点的  上一点  ...

另外 这样短的代码 一两行 没必要  单独搞一个函数   搞成函数可能反而慢些   直接放到主函数中  有些内容 不必每次都运行   那样可能还快点
发表于 2023-1-6 22:24 | 显示全部楼层
xyp1964 发表于 2023-1-6 20:50
;; (abc '(0 1 2 3 4 5 6) 13) → 6
(defun abc (lst n / nn)
  (setq nn (length lst)  n (rem n nn))

加个取绝对值
;; (abc '(0 1 2 3 4 5 6) 13) → 6
(defun abc (lst n / nn)
  (setq nn (length lst)  n (rem (abs n) nn))
  (nth n lst)
)
发表于 2023-1-6 20:50 | 显示全部楼层
;; (abc '(0 1 2 3 4 5 6) 13) → 6
(defun abc (lst n / nn)
  (setq nn (length lst)  n (rem n nn))
  (nth n lst)
)
 楼主| 发表于 2023-1-6 23:54 | 显示全部楼层
kkq0305 发表于 2023-1-6 22:24
加个取绝对值
;; (abc '(0 1 2 3 4 5 6) 13) → 6
(defun abc (lst n / nn)

逆向回溯时  得到的值 不对头  看能否改动到与对应的值相同?
 楼主| 发表于 2023-1-6 23:55 | 显示全部楼层
xyp1964 发表于 2023-1-6 20:50
;; (abc '(0 1 2 3 4 5 6) 13) → 6
(defun abc (lst n / nn)
  (setq nn (length lst)  n (rem n nn))

院长  逆向回溯时  得到的值 好不对头哟   还需要修改下
发表于 2023-1-7 16:01 | 显示全部楼层
(defun tt(lst n / m)(nth(rem(+ n(setq m(length lst)))m)lst))
发表于 2023-1-8 07:13 | 显示全部楼层
谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-7 23:26 , Processed in 0.366591 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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