找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2008|回复: 4

[LISP函数]:一个求交点函数的问题

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-8-30 11:23:50 | 显示全部楼层 |阅读模式

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

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

×
以下函数是我从论坛中找到的, 用了多时,没有问题,可今天却出了点麻烦,
这里是函数

  1. (defun tt( / ent1 ent2 lst1 pt )
  2.    (setq ent1 (car (entsel "选择曲线1:")))
  3.    (setq ent2 (car (entsel "选择曲线2:")))
  4.    (print (setq lst1 (GetInterPoint ent1 ent2)))
  5.    (command "_pline")
  6.    (while (setq pt (car lst1))
  7.       (command pt)
  8.       (setq lst1 (cdr lst1))
  9.       )
  10.    (command "C")
  11.    (princ)
  12.    )

  13. (defun GetInterPoint ( ent1 ent2 / ax_ent_1 ax_ent_2 intpoints j disp)
  14.    (setq ax_ent_1 (vlax-ename->vla-object ent1)
  15.          ax_ent_2 (vlax-ename->vla-object ent2)
  16.    )
  17.    (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))
  18.    (setq intpoints (vlax-variant-value intpoints))
  19.    (setq disp nil)
  20.    (if (> (vlax-safearray-get-u-bound intpoints 1) 0)
  21.       (progn
  22.          (setq j 0)
  23.          (repeat
  24.            (/ (+ 1
  25.               (- (vlax-safearray-get-u-bound intpoints 1)
  26.                  (vlax-safearray-get-l-bound intpoints 1)
  27.               )
  28.               )
  29.               3
  30.            )
  31.            (setq disp (cons (list (vlax-safearray-get-element intpoints j)
  32.                                (vlax-safearray-get-element intpoints (+ 1 j))
  33.                                (vlax-safearray-get-element intpoints (+ 2 j)))
  34.                          disp);cons
  35.               j (+ j 3)
  36.            )
  37.          );repeat
  38.          ;(princ disp)
  39.       );progn
  40.       ;(princ "\n两曲线没有交点")
  41.    );if
  42.   disp
  43. )
下面是求出的交点
((59118.6 635315.0 0.0) (59198.6 635350.0 0.0) (59144.2 635351.0 0.0) (59144.2
635351.0 0.0) (59195.9 635351.0 0.0))
你再看看图形(图在附件中,解压后为一DWG图形)
(图中红线是用所求的交点画出来的,要注意的是,你把红色圆的圆心处放大、放大、再放大,就能看出问题了)

明明是四个义点,却求出五个来。
真搞不明白?。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-8-30 13:31:33 | 显示全部楼层
((59118.6 635315.0 0.0) (59198.6 635350.0 0.0) (59144.2 635351.0 0.0) (59144.2 635351.0 0.0) (59195.9 635351.0 0.0))
正常!3、4点为重复点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2006-8-31 07:42:52 | 显示全部楼层
楼上的斑竹,图形的交点明明只有四个,为什么会求出五个呢?
我传上来的图形是经过删剪的,原图中有许多线,是地形线,当我用一个矩形去切这些地形线时,所求出的交点大部分是正确的,可是总有几个求出来的有重复点,而且当矩形的位置有变化时,出现重复点的线条也会变化。
斑竹能不能说说出现这种情况的原因。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-31 08:19:00 | 显示全部楼层
vla-intersectwith有些问题是无法预计的,我已经遇到几次类似的情况了,楼上这种情况可以在求出交点后再去除重复项。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2006-8-31 08:40:26 | 显示全部楼层
楼上的,上面显示的3、4两项虽然一样,可实际不完全一样,那是因为显示时只显示了小数后一位,实际是:
(59118.57055237 635314.92479259 0)
(59198.56200259 635349.54895191 0)
(59144.19868994 635351.32391003 0)
(59144.19877101 635351.32391003 0)
(59195.89768931 635351.32391003 0)
我真的去找相同项,可又找不到了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 00:20 , Processed in 0.306198 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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