明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: tm20038175

能否根据起点终点定长定距等分曲线?

  [复制链接]
发表于 2012-12-1 22:29:49 | 显示全部楼层
针对99#的补充:
好像涉及到算法的问题.
  1. ;;---------------------------
  2. ;; 曲线分段测试
  3. ;; 要求: 中间按模数定尺划分n段
  4. ;;       两端对称
  5. ;; 公差delta=|两端尺寸-模数|
  6. ;;---------------------------
  7. (defun  c:test( / )
  8.         (div_curve 12600 1200.0 100.0)
  9. ;        (princ)
  10. )
  11. ;;---------------------------
  12. ;;  返回值: (n_mid n_edge mod dim_edge)
  13. ;;   n_mid: 中间标准模数分格数量
  14. ;;     mod: 标准分格尺寸
  15. ;;  n_edge: 两边分格数量(偶数)
  16. ;;dim_edge: 边部分格尺寸
  17. ;;---------------------------
  18. (defun  div_curve(Len mod delta / num left res nn m_edge)
  19.         (setq num (fix (/ Len mod)))
  20.         (setq left (- Len (* num mod)))
  21.         (if (<= left delta);;例如:10.05  0.05<0.1
  22.             (if (zerop left)
  23.                 (setq res (list num mod)) ;;;仅两个元素
  24.                 (progn
  25.                     (setq num (- num 2))
  26.                     (setq m_edge (/ (- Len (* num mod)) 2.0))
  27.                     (setq res (list num  2  mod  m_edge))
  28.                 )
  29.             )
  30.     ;|else|;(if (<= (abs (- left mod)) delta)
  31.                 (progn   ;;例如: 9.94  0.06<0.1
  32.                     (setq num (1- num))
  33.                     (setq m_edge (/ (- Len (* num mod)) 2.0))
  34.                     (setq res (list num  2  mod  m_edge))
  35.                 )
  36.                 (progn
  37.                     (setq n_max (fix (/ Len (- mod delta))))
  38.                     (setq n_max (1+ n_max))
  39.                     (setq num (1- num))
  40.                     (setq nn 2.0)
  41.                     (setq m_edge (/ (- Len (* num mod)) nn))
  42.                     [b](while
  43.                         (and (> (abs (- m_edge mod)) delta)
  44.                              (< nn n_max)
  45.                         )
  46.                         (setq num (1- num))
  47.                         (setq m_edge (/ (- Len (* num mod)) nn))
  48.                         (setq nn (+ 2 nn))
  49.                     )[/b]
  50.                     (setq nn (fix (- nn 2)))
  51.                     (setq res (list num nn  mod  m_edge))       
  52.                 )
  53.             )
  54.         )
  55.         res
  56. )
  57. ;;---------------------------
  58. ;;---------------------------
上面的while 循环有问题,贴上来,希望帮忙解决
发表于 2012-12-1 22:30:42 | 显示全部楼层
dear sir,

good
发表于 2012-12-2 17:55:48 | 显示全部楼层
看看G板的程序
发表于 2012-12-26 09:41:15 | 显示全部楼层
学习源代码,每天进步一点点
发表于 2013-1-4 09:00:31 | 显示全部楼层
谢谢楼主分享
发表于 2013-1-4 09:32:12 | 显示全部楼层
G版程序一定要看 ,学习
发表于 2013-1-4 21:29:30 | 显示全部楼层
看看效果如何!
发表于 2013-1-5 00:01:01 | 显示全部楼层
我来好好学习一下,谢谢了
发表于 2013-1-5 21:58:02 | 显示全部楼层
正需要,学习学习!
发表于 2013-1-6 14:25:00 | 显示全部楼层
Gu_xl 发表于 2012-3-26 18:59
;;等分曲线,返回点坐标
;;参数 Curve = 曲线图元名 p1 = 曲线上第一点 p2 = 曲线上第一点
;;     Flag ...

请教一下,怎么让pts直接以点显示在线上?谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 02:43 , Processed in 0.175032 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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