找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: bbswen

[求助] 统计圆的交集次数及填充

[复制链接]

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-24 12:51:05 | 显示全部楼层
csharp 发表于 2014-8-23 12:16
记录每个圆心位置,生成的 Region 的质心和圆心的距离与覆盖半径比较,有几个小于半径的就是在几个圆内
...

     由质心和圆心列表逐一比较找出小于半径的圆心数量和 Region 构造表
   对 Rgion 和数量表遍历
       由 Region 生成 Hatch
       由 数量 设置 Hatch 颜色

那我应该就是这里没有搞清楚了,

是不是可以理解为,这里的交集归属于谁,是由,组成的面域的质心到圆心的距离来判断的,
只要小于圆的半径,就可以视为这个面域就是在这个圆内了,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-24 13:01:23 | 显示全部楼层
非常感谢,
麻烦看下,我说的那个问题是怎么产生的,为什么会产生多余的面域

另外我有一想法,应该可以提高很高倍的速度,圆内点很多时应该很有用。

请高手尝试下,

在比较面域的质心和圆心时,增加一个圆心集合。

以当前面域的各顶点为圆心,以圆的半径为半径,添加到一个集合中,

判断时只与这个集合中和圆心进行比较,循环量就会只有一小部分,应该可以提高很多效率。

能否按这个修改下。

点评

有面域了,取质心很简单 xdrxapi的慢在了交点断开一步,其它步骤很快的  详情 回复 发表于 2014-8-24 15:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-24 15:05:36 来自手机 | 显示全部楼层
bbswen 发表于 2014-8-24 13:01
非常感谢,
麻烦看下,我说的那个问题是怎么产生的,为什么会产生多余的面域


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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2014-8-24 15:45:21 | 显示全部楼层
LISP交点打断速度只能这样了...没办法...我也这里慢....{:soso_e110:}

点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-24 15:51:42 来自手机 | 显示全部楼层
本帖最后由 csharp 于 2014-8-24 15:53 编辑
q3_2006 发表于 2014-8-24 15:45
LISP交点打断速度只能这样了...没办法...我也这里慢....


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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2014-8-24 16:10:33 | 显示全部楼层
....C#...不懂....没法比较...{:soso_e110:}

点评

C#定义的LispFunction和ARX定义lisp函数一样,效率比ARX差一点点,但比仅榜着alisp要强太多了!  详情 回复 发表于 2014-8-24 20:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-24 19:38:05 | 显示全部楼层
郁闷,家里的电脑,xp cad2007 无法加载xd的api

郁闷,无法测试到底要多长时间,

同样多的圆如试验图中的数量,lisp 的打断时间,500ms左右,眼睛都没眨下,就完了,

点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-24 19:46:39 来自手机 | 显示全部楼层
bbswen 发表于 2014-8-24 19:38
郁闷,家里的电脑,xp cad2007 无法加载xd的api

郁闷,无法测试到底要多长时间,

500ms ?你怎么打断的

点评

这是我在网上找到的程序再修改下这个程序是不是就可以提高点速度了,  详情 回复 发表于 2014-8-25 09:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-24 20:13:01 来自手机 | 显示全部楼层
q3_2006 发表于 2014-8-24 16:10
....C#...不懂....没法比较...

C#定义的LispFunction和ARX定义lisp函数一样,效率比ARX差一点点,但比仅榜着alisp要强太多了!

点评

E大也这样说...我太懒..没动力学....感觉LISP目前够用...  详情 回复 发表于 2014-8-25 08:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2014-8-25 08:02:32 | 显示全部楼层
csharp 发表于 2014-8-24 20:13
C#定义的LispFunction和ARX定义lisp函数一样,效率比ARX差一点点,但比仅榜着alisp要强太多了!

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

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-25 09:13:50 | 显示全部楼层
csharp 发表于 2014-8-24 19:46
500ms ?你怎么打断的

这是我在网上找到的程序
  1. ;;主函数
  2. (defun c:MBB (/ elist ssg n t0)
  3.   (VL-LOAD-COM)
  4. ;;;  (setq t0 (xdl-getutime))
  5.   (if (setq ssg (ssget '((0 . "line,arc,circle,ellipse"))))
  6.      (progn (setq t0 (xdl-getutime))
  7.     (vlax-for obj (vla-get-activeselectionset
  8.         (vla-get-activedocument (vlax-get-acad-object))
  9.       )
  10.       (setq elist (cons obj elist))  ; ssg->elist
  11.     )
  12.     )
  13.   )
  14.   (DoEntMake (InterSort (ssinter elist)))
  15.   (princ (strcat "\n*****找到交点"
  16.      (itoa n)
  17.      "个,交点断开操作共耗时"
  18.      (rtos (- (xdl-getutime) t0) 2 3)
  19.      "秒。*****"
  20.    )
  21.   )
  22.   (princ)
  23. )
  24. ;;求交点集函数-nth
  25. ;;经过测试,nth函数仅比assoc函数快一点点。
  26. ;;故此函数也可取消i,j变量,直接使用assoc函数
  27. (defun ssinter (el / el1 obj1 obj2 ipts pts list1 outlst i j)
  28.   (setq outlst (mapcar 'list el)
  29. i      -1   ;obj1位置指针
  30. n      0   ;交点数计数器
  31.   )
  32.   (while el
  33.     (setq obj1 (car el)
  34.    list1 (nth (setq i (1+ i)) outlst) ;obj1已有的交点列表
  35.    el (cdr el)
  36.    el1 el
  37.    j i   ;obj2位置指针
  38.     )
  39.     (while el1
  40.       (setq obj2 (car el1)
  41.      el1  (cdr el1)
  42.      j  (1+ j)
  43.       )
  44.       ;;取交点
  45.       (if (and (setq ipts (vla-intersectwith obj1 obj2 0))
  46.         (setq ipts (vlax-variant-value ipts))
  47.         (> (vlax-safearray-get-u-bound ipts 1) 0)
  48.    )
  49. (progn
  50.    (setq ipts (vlax-safearray->list ipts)
  51.   pts  '()  ;obj1,obj2交点临时列表变量
  52.    )
  53.    (while (> (length ipts) 0)
  54.      (setq pts  (cons (list (car ipts)
  55.        (cadr ipts)
  56.        (caddr ipts)
  57.         )
  58.         pts
  59.          )
  60.     ipts (cdddr ipts)
  61.      )
  62.    )
  63.    (setq list1 (append list1 pts) ;存obj1交点表,循环结束后再更新
  64.   n     (+ n (length pts)) ;交点计数累加
  65.    )
  66.    ;;obj2的交点列表立即更新
  67.    (setq
  68.      outlst (subst (append (nth j outlst) pts)
  69.      (nth j outlst)
  70.      outlst
  71.      )
  72.    )
  73. )
  74.       )
  75.     )
  76.     ;;当obj1存在交点,且非封闭曲线,添加两端点
  77.     (if (and (cdr list1) (not (vlax-curve-isClosed obj1)))
  78.       (setq list1 (append list1
  79.      (list (vlax-curve-getEndPoint obj1))
  80.      (list (vlax-curve-getStartPoint obj1))
  81.     )
  82.       )
  83.     )
  84.     (setq outlst (subst list1 (nth i outlst) outlst)) ;更新obj1交点列表
  85.   )
  86.   outlst
  87. )
  88. ;;点集排序及删除重复点函数
  89. (defun InterSort (el / obj1 pts plst outlst)
  90.   (setq outlst '())   ;empty list
  91.   (foreach item el
  92.     (setq obj1 (car item)
  93.    pts  (cdr item)
  94.    plst '()   ;empty list
  95.     )
  96.     (if pts    ;若无交点,则不修改该实体
  97.       (progn
  98. ;;交点排序,列表为逆序
  99. (setq
  100.    pts (vl-sort
  101.   pts
  102.   (function (lambda (p1 p2)
  103.        (< (vlax-curve-getParamAtPoint obj1 p1)
  104.           (vlax-curve-getParamAtPoint obj1 p2)
  105.        )
  106.      )
  107.   )
  108.        )
  109. )
  110. ;;剔除重复点并将列表顺序转正
  111. (foreach p pts
  112.    (if plst
  113.      (if (not (equal p (car plst) 0.00001))
  114.        (setq plst (cons p plst))
  115.      )
  116.      (setq plst (cons p plst))
  117.    )
  118. )
  119. ;;闭合曲线需再添加首个交点以使新实体完全封闭
  120. (if (vlax-curve-isClosed obj1)
  121.    (setq plst (cons (last plst) plst))
  122. )
  123. (setq plst   (cons (vlax-vla-object->ename obj1) plst)
  124.        outlst (cons plst outlst)
  125. )
  126.       )
  127.     )
  128.   )
  129.   outlst
  130. )
  131. ;;调用entmake生成新实体
  132. (defun DoEntMake (el / obj objlst objname objcen objratio objaxis)
  133.   (foreach e el
  134.     (setq obj   (car e)
  135.    objlst  (entget obj)
  136.    objlst  (vl-remove (assoc -1 objlst) objlst) ;去除图元名
  137.    objlst  (vl-remove (assoc 330 objlst) objlst) ;去除id
  138.    objlst  (vl-remove (assoc 5 objlst) objlst) ;去除句柄
  139.    objname (cdr (assoc 0 objlst))
  140.     )
  141.     (cond
  142.       ((= objname "LINE")
  143.        (repeat (- (length e) 2)
  144.   (setq e (cdr e))
  145.   (setq objlst (subst (cons 10 (car e)) (assoc 10 objlst) objlst))
  146.   (setq objlst (subst (cons 11 (cadr e)) (assoc 11 objlst) objlst))
  147.   (entmake objlst)
  148.        )
  149.        (entdel obj)
  150.       )
  151.       ((= objname "CIRCLE")
  152.        (setq objcen (cdr (assoc 10 objlst)))
  153.        (setq objlst (subst (cons 0 "ARC") (assoc 0 objlst) objlst))
  154.        (setq objlst (append objlst
  155.        (list (cons 100 "AcDbArc")
  156.       (cons 50 0.0)
  157.       (cons 51 0.0)
  158.        )
  159.       )
  160.        )
  161.        (repeat (- (length e) 2)
  162.   (setq e (cdr e))
  163.   (setq objlst (subst (cons 50 (angle objcen (cadr e)))
  164.         (assoc 50 objlst)
  165.         objlst
  166.         )
  167.   )
  168.   (setq objlst (subst (cons 51 (angle objcen (car e)))
  169.         (assoc 51 objlst)
  170.         objlst
  171.         )
  172.   )
  173.   (entmake objlst)
  174.        )
  175.        (entdel obj)
  176.       )
  177.       ((= objname "ARC")
  178.        (setq objcen (cdr (assoc 10 objlst)))
  179.        (repeat (- (length e) 2)
  180.   (setq e (cdr e))
  181.   (setq objlst (subst (cons 50 (angle objcen (cadr e)))
  182.         (assoc 50 objlst)
  183.         objlst
  184.         )
  185.   )
  186.   (setq objlst (subst (cons 51 (angle objcen (car e)))
  187.         (assoc 51 objlst)
  188.         objlst
  189.         )
  190.   )
  191.   (entmake objlst)
  192.        )
  193.        (entdel obj)
  194.       )
  195.       ((= objname "ELLIPSE")
  196.        ;;椭圆圆心
  197.        (setq objcen (cdr (assoc 10 objlst)))
  198.        ;;相对于中心的长轴矢量
  199.        (setq objaxis (cdr (assoc 11 objlst)))
  200.        ;;短轴与长轴的比例
  201.        (setq objratio (cdr (assoc 40 objlst)))
  202.        (repeat (- (length e) 2)
  203.   (setq e (cdr e))
  204.   (setq objlst (subst (cons 41 (pt->param (cadr e) objcen objaxis objratio))
  205.         (assoc 41 objlst)
  206.         objlst
  207.         )
  208.   )
  209.   (setq objlst (subst (cons 42 (pt->param (car e) objcen objaxis objratio))
  210.         (assoc 42 objlst)
  211.         objlst
  212.         )
  213.   )
  214.   (entmake objlst)
  215.        )
  216.        (entdel obj)
  217.       )
  218.     )
  219.   )
  220. )
  221. ;;计算耗时
  222. (defun xdl-getutime ()
  223.   (* 86400 (getvar "tdusrtimer"))
  224. )
  225. ;;求椭圆曲线参数
  226. (defun pt->param (pt cen axis ratio / ang param)
  227.   (setq ang (- (angle cen pt) (angle '(0. 0. 0.) axis)))
  228.   (cond ((= (cos ang) 0.0)  ;防止分母cos为零出错
  229.   (if (> (sin ang) 0.0)
  230.     (setq param (* 0.5 PI))
  231.     (setq param (* 1.5 PI))
  232.   )
  233. )
  234. ((= (sin ang) 0.0)
  235.   (if (> (cos ang) 0.0)
  236.     (setq param 0.0)
  237.     (setq param PI)
  238.   )
  239. )
  240. (T
  241.   (setq param (atan (/ (sin ang) (* (cos ang) ratio))))
  242.   (if (< (cos ang) 0.0)
  243.     (setq param (+ pi param))
  244.   )
  245. )
  246.   )
  247.   param
  248. )
  249. (princ)
再修改下这个程序是不是就可以提高点速度了,麻烦整合下,呵呵
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-26 16:14:30 | 显示全部楼层
有人测试过这没有?

点评

以前写过 Curve 的 Ssbrk ,Lisp 没法再快了,借助 ARX C# 或者直接用 ARX C# 才能更快  详情 回复 发表于 2014-8-26 17:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-8-26 17:56:12 | 显示全部楼层
bbswen 发表于 2014-8-26 16:14
有人测试过这没有?

以前写过 Curve  的 Ssbrk (源码在本论坛),Lisp 没法再快了,借助 ARX C# 或者直接用 ARX C# 才能更快

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

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 12:20 , Processed in 0.248493 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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