找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3000|回复: 9

[几何] (XD::Geom:NumDiv)给定参数值,起始值,等分数,返回等分后的参数表

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-18 01:49:01 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Geom:NumDiv
调用格式: (XD::Geom:NumDiv num start div)
参数说明: num --- 数
start --起始数
div ---等分数
返回值:
函数简介: 给定参数值,起始值,等分数,返回等分后的参数表
函数来源: 原创
函数作者: Lispboy
适用版本: 不限 
最后更新时间: 2013-08-18
备注: 命令: (xd::geom:numdiv 10 2 10)
(2 2.8 3.6 4.4 5.2 6.0 6.8 7.6 8.4 9.2 10)
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
  1. ;|
  2. 等分数
  3. 参数:
  4.    num --- 数
  5.    start --起始数
  6.    div  ---等分数
  7. |;
  8. (defun XD::Geom:NumDiv (num start div / i numl num1)
  9.   (setq i 1 div (fix div) num1 (float (- num start)))
  10.   (repeat (- div 1)
  11.     (setq numl (cons (+ start (* i (/ num1 div))) numl)
  12.           i (1+ i)
  13.     )
  14.   )
  15.   (cons start (reverse (cons num numl)))
  16. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-8-18 09:07:25 | 显示全部楼层
想来想去这个函数有点什么问题,终于想明白了,输入参数应该是start、end、div,对于共用函数,num是无意义的,只要在某个范围内均分就可以了。
更实际的应用应该是在两点间均分和沿曲线均分。
两点间均分也不难,只是修改一下就可以了,沿曲线均分就不同了,涉及到ent、start、end和div。

点评

num 就是 end 啊  详情 回复 发表于 2013-8-18 09:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-18 09:28:07 | 显示全部楼层
ll_j 发表于 2013-8-18 09:07
想来想去这个函数有点什么问题,终于想明白了,输入参数应该是start、end、div,对于共用函数,num是无意义 ...

num 就是 end 啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-18 09:30:44 来自手机 | 显示全部楼层
一说参数就想到曲线,仔细一看LZ这个仅是"数"间均分,和曲线没关系!来自: Android客户端

点评

写这个就是为了和“曲线”发生关系啊 如果是线性曲线的,等分的数就是等分(距离)曲线的参数值 如果非线性的, 等分的数可以给起始的距离和终止的距离,那么等分的就是距离了, 把这个等分的数送  详情 回复 发表于 2013-8-18 10:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-8-18 10:07:30 | 显示全部楼层

不好意思,是我自己把自己绕糊涂了,有start、end的先入为主的次序,再加上曲线有“头”的顽固理念,num在头脑里就怎么也理不清了。{:soso_e110:}

点评

其实我把NUM写前面可能不太符合习惯吧,我的意思是等分”数",所以先给的END,如果start是0,就是等分这个给的“数”了。  详情 回复 发表于 2013-8-18 10:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-18 10:11:06 | 显示全部楼层
ll_j 发表于 2013-8-18 10:07
不好意思,是我自己把自己绕糊涂了,有start、end的先入为主的次序,再加上曲线有“头”的顽固理念,num ...

{:soso_e112:}

其实我把NUM写前面可能不太符合习惯吧,我的意思是等分”数",所以先给的END,如果start是0,就是等分这个给的“数”了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-18 10:14:04 | 显示全部楼层
st788796 发表于 2013-8-18 09:30
一说参数就想到曲线,仔细一看LZ这个仅是"数"间均分,和曲线没关系!

写这个就是为了和“曲线”发生关系啊{:soso_e112:}

如果是线性曲线的,等分的数就是等分(距离)曲线的参数值

如果非线性的, 等分的数可以给起始的距离和终止的距离,那么等分的就是距离了, 把这个等分的数送给 xdrx_getParamAtDist,xdrx_getPointAtDist就得到“等分点”了啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-26 17:40:34 | 显示全部楼层
库函数不是这个! 改下用法
  1. (defun XD::Geom:DivNumBy (lst / num start end spa v1 v ll len _len)
  2.   (setq num (car lst)
  3.         start (cadr lst)
  4.         end (caddr lst)
  5.         spa (cadddr lst)
  6.         len (- end start)
  7.   )
  8.   (if spa
  9.     (progn
  10.       (setq _len (/ (- len (* (1- num) spa)) num))
  11.       (if (> _len 0.)
  12.         (progn
  13.           (setq v1 (+ _len spa)
  14.                 v (list v1 v1)
  15.           )
  16.           (repeat (1- (fix num))
  17.             (if ll
  18.               (setq ll (cons (mapcar
  19.                                '-
  20.                                (car ll)
  21.                                v
  22.                              ) ll
  23.                        )
  24.               )
  25.               (setq ll (list (list (- end _len) end)))
  26.             )
  27.           )
  28.           (setq ll (cons (list start (+ start _len)) ll))
  29.         )
  30.       )
  31.     )
  32.     (progn
  33.       (setq _len (/ len num))
  34.       (repeat (1+ (fix num))
  35.         (if ll
  36.           (setq ll (cons (- (car ll) _len) ll))
  37.           (setq ll (list end))
  38.         )
  39.       )
  40.     )
  41.   )
  42.   ll
  43. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-12 19:46:23 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-9-12 19:48 编辑

保持原函数,增加一个功能,尾参数可以为表,适合在周期数内计算
  1. (defun XD::Geom:NumDiv (num start div / NumDiv tol lst)
  2.   (defun NumDiv        (num start div / i numl dis n m)
  3.     (setq i 0)
  4.     (if        (eq (type div) 'REAL)
  5.       (setq n        (/ (float (- num start)) div)
  6.             m        (if (>= n (fix n))
  7.                   (1+ (fix n))
  8.                   (fix n)
  9.                 )
  10.             dis        div
  11.       )
  12.       (setq m        (1+ div)
  13.             dis        (/ (float (- num start)) div)
  14.       )
  15.     )
  16.     (repeat (fix m)
  17.       (setq numl (cons (+ start (* i dis)) numl)
  18.             i         (1+ i)
  19.       )
  20.     )
  21.     (reverse numl)
  22.   )
  23.   (if (eq (type div) 'LIST)
  24.     (progn
  25.       (setq tol        (car div)
  26.             lst        (mapcar        '(lambda (x)
  27.                            (if (>= x tol)
  28.                              (- x tol)
  29.                              x
  30.                            )
  31.                          )
  32.                         (NumDiv        (+ tol (min num start))
  33.                                 (max num start)
  34.                                 (cadr div)
  35.                         )
  36.                 )
  37.       )
  38.       (if (< num start)
  39.         (reverse lst)
  40.         lst
  41.       )
  42.     )
  43.     (NumDiv num start div)
  44.   )
  45. )

原函数功能
_$ (XD::GEOM:NUMDIV 12 3 4)
(3.0 5.25 7.5 9.75 12.0)
_$ (XD::GEOM:NUMDIV 3 12 4)
(12.0 9.75 7.5 5.25 3.0)

新增功能
周期
_$ (XD::GEOM:NUMDIV 3 12 '(15 4))
(3.0 1.5 0.0 13.5 12.0)
_$ (XD::GEOM:NUMDIV 12 3 '(15 4))
(12.0 13.5 0.0 1.5 3.0)

实数步距
_$ (XD::GEOM:NUMDIV 12 3 0.5)
(3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0)

周期时步距
_$ (XD::GEOM:NUMDIV 3 12 '(15 0.5))
(3.0 2.5 2.0 1.5 1.0 0.5 0.0 14.5 14.0 13.5 13.0 12.5 12.0)
_$ (XD::GEOM:NUMDIV 12 3 '(15 0.5))
(12.0 12.5 13.0 13.5 14.0 14.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-13 08:43:30 | 显示全部楼层
漏了个情况,当 div 为 REAL num < start 时 n 为 负,m 需要 abs 且 dis 为负

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-13 21:32 , Processed in 0.199309 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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