找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2295|回复: 13

[求助] [求助]:如何用LISP取得多义线上某点的斜率

[复制链接]
发表于 2006-9-27 13:40:15 | 显示全部楼层 |阅读模式

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

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

×
如何用LISP取得多义线上某点的斜率?
我想把由直线和相切圆弧组成的多义线,根据某个长度将多义线等分,然后在每个等分点分别画一条垂直于该等分点处斜率的直线段,请问如何能做到。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-9-27 21:24:04 | 显示全部楼层
可以求出多义线上某点的一阶导数的啦~!~呵呵~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-28 09:13:11 | 显示全部楼层
用下式对直线和圆弧组成的多义线测试,为什么结果不对呢?一阶导数就是斜率,为什么在直线段不同位置的测试结果不一样?请赐教。谢谢
(vlax-curve-getParamAtPoint (vlax-ename->vla-object (car(entsel))) (getpoint ))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-28 09:15:38 | 显示全部楼层
说的不是很清楚.在看看,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-28 09:15:38 | 显示全部楼层
说的不是很清楚.在看看,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-9-29 20:41:11 | 显示全部楼层
橄榄滋味你好~~
(ram (angle (vlax-curve-getParamAtPoint (vlax-ename->vla-object (car(entsel))) (getpoint )) '(0 0 0)) pi)
这样结果保证一样了啦~~
[sorry!上面的写错了.........fsxm2006/9/30]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-29 22:35:10 | 显示全部楼层
  1. [FONT=courier new];;;曲线等分线
  2. (defun c:test ()
  3.   (CMDLA0)
  4.   (setq        INT (UINT 7 "" "等分数" INT)
  5.         no1 (UREAL 7 "" "线长" no1)
  6.         ss  (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")))
  7.         i   -1
  8.   )
  9.   (while (setq s1 (ssname ss (setq i (1+ i))))
  10.     (xyp-CurveDivLine s1 int no1)
  11.   )
  12.   (CMDLA1)
  13. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-30 08:49:42 | 显示全部楼层
谢谢楼上指导,不过我想要的是经过多义线(LWPOLYLINE)上一点,这个点不是用鼠标点取,而是将此多义线按照一定长度等分得到的多个等分点,然后过这个点画一条垂直于多义线的直线,所以要找到多义线上该点处的斜率。另外我附上一个效果图,黑线为任意一条多义线,红线为垂直于多义线的直线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 7233个

财富等级: 富甲天下

发表于 2006-9-30 09:25:36 | 显示全部楼层
作一 Block [直線段 insert point=Mid]
執行divide
選項用 Block

Command: divide

Select object to divide:
Enter the number of segments or [Block]: b

Enter name of block to insert: LinePerp

Align block with object? [Yes/No] <Y>:

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

使用道具 举报

已领礼包: 7233个

财富等级: 富甲天下

发表于 2006-9-30 09:25:36 | 显示全部楼层
作一 Block [直线段 insert point=Mid]
执行divide
选项用 Block

Command: divide

Select object to divide:
Enter the number of segments or [Block]: b

Enter name of block to insert: LinePerp

Align block with object? [Yes/No] <Y>:

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

使用道具 举报

发表于 2006-9-30 13:56:17 | 显示全部楼层
;参考:
(defun x@-per (e pt len / pt fd len e)
  (setq pt (vlax-curve-getclosestpointto e pt)
        fd (vlax-Curve-GetFirstDeriv e (vlax-Curve-GetParamatDist e (vlax-curve-getDistAtPoint e pt)))
        ang (- (atan (cadr fd)(car fd)) (* 0.5 PI)))
  (if (and len (member (type len) '(INT REAL)))
    (vl-cmdf "line" pt (polar pt ang len) "")
  )
  (list ang (if (< ang 0)(+ (* PI 2) ang) ang) fd)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-9-30 20:22:12 | 显示全部楼层
这是偶写的给参考一下啦!

  1. (defun fs-curvedivide (en      n       di      /       ang     dist
  2.                        dist+   isclosed               endparam               len
  3.                        p       p1      p2      param   pi/2                      )
  4.   (setq isclosed (vl-catch-all-apply 'vlax-curve-isclosed (list en)))
  5.   (if (not (vl-catch-all-error-p isclosed))
  6.     (progn (setq endparam   (vlax-curve-getendparam en)
  7.                  len            (vlax-curve-getdistatparam en endparam)
  8.                  dist+            (/ len n)
  9.                  dist            0
  10.                  pi/2            (/ pi 2)
  11.            )
  12.            (repeat (if isclosed
  13.                      n
  14.                      (1- n)
  15.                    )
  16.              (setq dist         (+ dist dist+)
  17.                    p         (vlax-curve-getpointatdist en dist)
  18.                    param (vlax-curve-getparamatdist en dist)
  19.                    ang         (angle (vlax-curve-getfirstderiv en param) '(0 0 0))
  20.                    p1         (polar p (+ ang pi/2) di)
  21.                    p2         (polar p (- ang pi/2) di)
  22.              )
  23.              (entmake (list '(0 . "line") (cons 10 p1) (cons 11 p2)))
  24.            )
  25.     )
  26.   )
  27. )
  28. (defun c:test (/ di en i n ss)
  29.   (princ "\n请选取要等分的曲线集:")
  30.   (cond        ((setq ss (ssget))                ;可以加过滤不加也行
  31.          (setq n  (getint "\n请输入要等分的段数:")
  32.                di (getdist "\n请量入垂直等分线高:")
  33.                i  0
  34.          )
  35.          (repeat (sslength ss)
  36.            (setq en (ssname ss i))
  37.            (test en n di)
  38.            (setq i (1+ i))
  39.          )
  40.         )
  41.   )
  42.   (princ)
  43. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2006-10-8 09:20:57 | 显示全部楼层
非常感谢楼上指导,也怪我当时说的不清楚,我的目的远不止画垂直于多一线上点的直线,而是通过找到这个垂线后,将线段端点连接成一条折线。附图中中间兰线为初始多义线,上下两条黑线为与中间兰线等距离的线,绿线为根据楼上程序得到的线,我想要的是由红线组成的多义线,类似弹簧的折线,其中等分段数为初始多义线长度除以它到两边多义线距离的商。请看附图如下:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 06:20 , Processed in 0.295194 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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