封闭多段线节点序号向前后各续一个循环周期 不用if条件判断 让i连续变化求值的方法
本帖最后由 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
)
本帖最后由 guosheyang 于 2023-1-7 18:31 编辑
这个只是针对闭合多段线 的圆角 倒角角度标注等目的写的其实就是解决点表第一点 最后一点的上一点上上点下一点下下点 的衔接问题 不需要那么多 前后重叠一个整表一般都用不到一般不超过两个列表项
如果要无限循环 还是要用你的那个公式但我是没遇到过需要无限循环的情况 :lol guosheyang 发表于 2023-1-7 18:28
这个只是针对闭合多段线 的圆角 倒角角度标注等目的写的其实就是解决点表第一点 最后一点的上一点...
另外 这样短的代码 一两行 没必要单独搞一个函数 搞成函数可能反而慢些 直接放到主函数中有些内容 不必每次都运行 那样可能还快点 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)
) ;; (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)
) kkq0305 发表于 2023-1-6 22:24
加个取绝对值
;; (abc '(0 1 2 3 4 5 6) 13) → 6
(defun abc (lst n / nn)
逆向回溯时得到的值 不对头看能否改动到与对应的值相同? 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))
院长逆向回溯时得到的值 好不对头哟 还需要修改下 (defun tt(lst n / m)(nth(rem(+ n(setq m(length lst)))m)lst))
谢谢楼主分享
页:
[1]
2