找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 767|回复: 11

[编程申请]:求解交点个数的程序!

[复制链接]
发表于 2003-8-22 11:17:37 | 显示全部楼层 |阅读模式

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

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

×
我在工作中最费劲的就是数许多直线交点个数,请问那位高手可以编制此类LISP,ARX程序给我帮忙一下?感激不尽!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-8-22 11:38:21 | 显示全部楼层
该不是所有直线的所有交点吧!你应该贴张图说明一下,到底是什么样的直线,什么样的交点,是哪个专业方面的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-8-22 13:29:43 | 显示全部楼层

Re: [编程申请]:求解交点个数的程序!

最初由 lisp730 发布
[B]我在工作中最费劲的就是数许多直线交点个数,请问那位高手可以编制此类LISP,ARX程序给我帮忙一下?感激不尽! [/B]


用XDRX_API 函数xdrx_getinters 一个函数搞定一切

  1. [font=courier]
  2. 86. xdrx_getinters

  3. 功能:1.求两个AcDbCurve(曲线)实体的交点.
  4.       2.求一个AcDbCurve(曲线)实体和一个选择集中所有AcDbCurve(曲线)的交点。
  5.       3.求一个选择集中所有AcDbCurve(曲线)实体的交点.
  6.       4.求一个选择集SS1中的所有AcDbCurve实体和另个选择集SS2所有AcDbCurve实体的交点。
  7.       
  8. 调用格式: 1. (xdrx_getinters <实体图元1> <实体图元2> [扩展方式])
  9.           2. (xdrx_getinters <实体图元名> <选择集> [扩展方式])
  10.           2. (xdrx_getinters <选择集> [扩展方式])
  11.           3. (xdrx_getinters <选择集1> <选择集2> [扩展方式])
  12.           4. (xdrx_getinters (<pt1>...<ptn>) <曲线实体名> [扩展方式])
  13.           5. (xdrx_getinters (<pt1>...<ptn>) <选择集> [扩展方式])
  14.           6. (xdrx_getinters (<pt1>...<ptn>) (<pt1>...<ptn>) [扩展方式])

  15. 说明:1.程序能求AcDbCurve(包括:AcDbLine、AcDbArc、AcDbCircle、AcDbEllipse、AcDbSpline、
  16.        AcDbPolyline(lwpolyline)交点。
  17.      2.参数[扩展方式]:
  18.        对于1种情况:
  19.          0:不延伸实体
  20.          1:延伸第一个实体
  21.          2:延伸第二个实体
  22.          3: 两个都延伸
  23.        对于第二、三、四种情况(选择集):
  24.          0: 不延伸实体
  25.          1: 两个都延伸

  26. 示例: 1. 求天正建筑软件轴线层上,所有轴线的交点
  27.       (if (setq ss (ssget "x" (list (cons 8 (xdrx_getlyrname "轴线")) '((0 . "line")))))
  28.          (progn
  29.              (setq intl (xdrx_getinters ss))
  30.          )
  31.       )
  32.       
  33.       2. 点取一根轴线,然后求出与这个轴线相交的所有轴线交点。
  34.       (setq lyr (xdrx_getlyrname "轴线"))
  35.       (if (setq en (xdrx_entsel "\n请点取一个轴线<退出>:" (list (cons 8 lyr) '(0 . "line"))))
  36.          (progn
  37.             (xdrx_setentodb)
  38.             (setq p1 (xdrx_getentdxf 10)
  39.                   p2 (xdrx_getentdxf 11)
  40.                   ss (ssget "f" p1 p2 (list (cons 8 lyr) '(0 . "line")))
  41.             )
  42.             (if (setq intl (xdrx_getinters (car en) ss))
  43.                (progn
  44.                   .....;;intl中为交点表
  45.                )
  46.             )
  47.          )
  48.       )         

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

使用道具 举报

发表于 2003-8-22 17:43:14 | 显示全部楼层
请教:
        如何用lisp建立选择范围内的所有交点选择集(多条直线与1条spline线)。
       谢谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-8-22 18:01:29 | 显示全部楼层
最初由 agang198 发布
[B]请教:
        如何用lisp建立选择范围内的所有交点选择集(多条直线与1条spline线)。
       谢谢谢 [/B]


获得直线选择集SS,SPLINE实体名e

那么:

(setq ints (xdrx_getinters e ss))

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

使用道具 举报

 楼主| 发表于 2003-8-23 09:10:07 | 显示全部楼层
我的意思是:在机械制图绘制换热器排管图中要求计算换热管数量,如何能够以求多条直线交点数量的办法获得!
  麻烦各位高人了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-8-23 09:16:23 | 显示全部楼层
最初由 lisp730 发布
[B]我的意思是:在机械制图绘制换热器排管图中要求计算换热管数量,如何能够以求多条直线交点数量的办法获得!
  麻烦各位高人了! [/B]

  1. (setq ss (ssget '((0 . "line"))));;构造直线选择集
  2. (setq ints (xdrx_getinters ss 0)) ;;选择直线内的所有交点
  3. (princ (strcat "\交点数量 = " (itoa (length ints))))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-8-23 11:40:17 | 显示全部楼层
要R14版求多条直线交点数量-难道真的不存在高人吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-25 18:00:05 | 显示全部楼层
参考:
SweepLine.lsp by Daniele Piazza.
This is a "SWEEPLINE algorithm to compute all intersection points of n line segments"
(Preparata & Shamos - Computational Geometry: an introduction)
This is again academic code and should be used if you expect a huge number of lines to intersect and you are looking for all intersection points. (sweepline) should run in O(n*logn), but the shell sort in AutoLISP is too slow.


;;; Otherwise a greedy method like this is sufficient:
;;; O(n*2),  exactly: O(n*(n-1))
;;; test each line with all other lines
;;; segments: ((p1 p2)(p1 p2)...)
(defun greedy-all-intersections (segments / seg1 rest seg2 pt pts)
  (setq rest segments)
  (foreach seg1 segments
    (setq rest (cdr rest))
    (foreach seg2 rest
      (if (setq pt (inters (car seg1)(cadr seg1)(car seg2)(cadr seg2) T))
        (setq pts (cons pt pts)))))
  pts
)

Extensions:
It is possible to add bulged segments too by extending the data structure "segment" with (p1 p2 bulge) for curved segments and use a line-arc resp. arc-arc intersection method for those. Then a straight segment is still representable with (p1 p2)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-8-25 19:34:50 | 显示全部楼层
最初由 lisp730 发布
[B]要R14版求多条直线交点数量-难道真的不存在高人吗? [/B]

R14下不用ARX或者Vlisp,仅用Lisp求交点(spline、含弧的pline、ellipse、arc),没戏。
LUCAS贴过一个求选择集交点的函数(ActiveX方法)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-8-27 08:31:17 | 显示全部楼层
问英雄何处?聚晓东空间否,高人何处?呜乎哀哉!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-20 13:54 , Processed in 0.460735 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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