找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: soly2006

[求助] 怎么判断两多段线相交点?只是接触、叠合不算,并标出相交处。

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-9-6 15:52:43 来自手机 | 显示全部楼层
求两线上所有交点,按param排序,两两判断跨越顶点的标记
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-9-6 20:14:11 | 显示全部楼层
本帖最后由 牢固 于 2013-9-6 20:20 编辑
soly2006 发表于 2013-9-6 15:29
版主麻烦看一下,就是这样的图,检查错误处

你要早给出这样的图,大家就知道你要干什么了!大家会根据你的需求给出不同的思路和方法!不要拿你解决问题的思路放上来提问,有可能你的思路根本就有问题!提问也是一门艺术,要学会怎样去提问!
我提供用面域法可以计算出两封闭区间的相交情况:
思路:
1、将多边形1 和多边形2转成面域,计算出面积s1 和 s2,
2、将面域1 和 面域2 做布尔和运算,得到新面域,计算出面积s3
3、分析 面积S3和 S1 + S2的关系,你自己画个图分析下,就能得出他们之间的逻辑关系!
这个帖子里有讨论:http://www.xdcad.net/forum/thread-667514-1-1.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2013-9-6 22:11:41 | 显示全部楼层
标高都不是问题,主要是算法,以上的思路,数据大了运行都很慢,且都不理想,我抛出这话题就是想引出个好的算法,看是不是我太笨没找到现存的函数,

点评

要考虑效率问题,进行大量数据的判断,那还是放弃Lisp吧,Lisp的效率问题是短板!  详情 回复 发表于 2013-9-6 23:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-9-6 23:04:46 | 显示全部楼层
soly2006 发表于 2013-9-6 22:11
标高都不是问题,主要是算法,以上的思路,数据大了运行都很慢,且都不理想,我抛出这话题就是想引出个好的 ...

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

使用道具 举报

发表于 2013-9-7 03:28:30 | 显示全部楼层
soly2006 发表于 2013-9-6 15:29
版主麻烦看一下,就是这样的图,检查错误处

CAD 2011+ and xdapi
  1. (defun c:tt (/ oldlyr)
  2.   (if (tblsearch "layer" "$tmpcheck")
  3.     (setq oldlyr (getvar "clayer"))
  4.     (progn
  5.       (setq oldlyr (getvar "clayer"))
  6.       (vl-cmdf ".layer" "m" "$tmpcheck" "c" "1" "" "")
  7.     )
  8.   )
  9.   (xdrx_undostart)
  10.   (vl-catch-all-apply
  11.     (function
  12.       (lambda (/ ss el e1 el1 e2 pts pams z1 z2 tf pams1 s)
  13. (if (setq ss (ssget '((0 . "*polyline") (8 . "JMD"))))
  14.    (progn
  15.      (setvar "clayer" "$tmpcheck")
  16.      (setvar "pdmode" 35)
  17.      (setvar "pdsize" 1)
  18.      (setq el (xdrx_pickset->ents ss))
  19.      (xdrx_setmark)
  20.      (while el
  21.        (setq e1 (car el)
  22.       el1 (cdr el)
  23.       z1 (getpropertyvalue e1 "Elevation")
  24.        )
  25.        (while el1
  26.   (setq e2 (car el1)
  27.         z2 (getpropertyvalue e2 "Elevation")
  28.   )
  29.   (if (/= z2 z1)
  30.     (progn
  31.       (setpropertyvalue e2 "Elevation" z1)
  32.       (setq tf t)
  33.     )
  34.   )
  35.   (if (setq pts (xdrx_curve_getinters e1 e2 0))
  36.     (progn
  37.       (setq
  38.         pams  (vl-remove
  39.          nil
  40.          (mapcar
  41.     '(lambda (x)
  42.        (vlax-curve-getparamatpoint e1 x)
  43.      )
  44.     pts
  45.          )
  46.        )
  47.         pams1 (mapcar
  48.          '(lambda (x)
  49.      (vlax-curve-getparamatpoint e2 x)
  50.           )
  51.          pts
  52.        )
  53.       )
  54.       (if (and pams pams1)
  55.         (mapcar
  56.    '(lambda (x y z)
  57.       (if
  58.         (not (or
  59.         (and (= (fix x) x) (/= (fix z) z))
  60.         (and (/= (fix x) x) (= (fix z) z))
  61.         (and (= (fix x) x) (= (fix z) z))
  62.       )
  63.         )
  64.          (xdrx_point_make y)
  65.       )
  66.     )
  67.    pams
  68.    pts
  69.    pams1
  70.         )
  71.       )
  72.     )
  73.   )
  74.   (if tf
  75.     (setpropertyvalue e2 "Elevation" z2)
  76.   )
  77.   (setq el1 (cdr el1)
  78.         tf  nil
  79.   )
  80.        )
  81.        (setq el (cdr el))
  82.      )
  83.      (if (setq s (xdrx_getss))
  84.        (sssetfirst nil s)
  85.      )
  86.    )
  87. )
  88.       )
  89.     )
  90.   )
  91.   (xdrx_undoend)
  92.   (setvar "clayer" oldlyr)
  93.   (princ)
  94. )

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 06:31 , Processed in 0.352236 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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