针对99#的补充:
好像涉及到算法的问题.- ;;---------------------------
- ;; 曲线分段测试
- ;; 要求: 中间按模数定尺划分n段
- ;; 两端对称
- ;; 公差delta=|两端尺寸-模数|
- ;;---------------------------
- (defun c:test( / )
- (div_curve 12600 1200.0 100.0)
- ; (princ)
- )
- ;;---------------------------
- ;; 返回值: (n_mid n_edge mod dim_edge)
- ;; n_mid: 中间标准模数分格数量
- ;; mod: 标准分格尺寸
- ;; n_edge: 两边分格数量(偶数)
- ;;dim_edge: 边部分格尺寸
- ;;---------------------------
- (defun div_curve(Len mod delta / num left res nn m_edge)
- (setq num (fix (/ Len mod)))
- (setq left (- Len (* num mod)))
- (if (<= left delta);;例如:10.05 0.05<0.1
- (if (zerop left)
- (setq res (list num mod)) ;;;仅两个元素
- (progn
- (setq num (- num 2))
- (setq m_edge (/ (- Len (* num mod)) 2.0))
- (setq res (list num 2 mod m_edge))
- )
- )
- ;|else|;(if (<= (abs (- left mod)) delta)
- (progn ;;例如: 9.94 0.06<0.1
- (setq num (1- num))
- (setq m_edge (/ (- Len (* num mod)) 2.0))
- (setq res (list num 2 mod m_edge))
- )
- (progn
- (setq n_max (fix (/ Len (- mod delta))))
- (setq n_max (1+ n_max))
- (setq num (1- num))
- (setq nn 2.0)
- (setq m_edge (/ (- Len (* num mod)) nn))
- [b](while
- (and (> (abs (- m_edge mod)) delta)
- (< nn n_max)
- )
- (setq num (1- num))
- (setq m_edge (/ (- Len (* num mod)) nn))
- (setq nn (+ 2 nn))
- )[/b]
- (setq nn (fix (- nn 2)))
- (setq res (list num nn mod m_edge))
- )
- )
- )
- res
- )
- ;;---------------------------
- ;;---------------------------
上面的while 循环有问题,贴上来,希望帮忙解决 |