明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3087|回复: 10

请来围观,一张奇怪的图,交点数量异常

[复制链接]
发表于 2012-7-6 22:53 | 显示全部楼层 |阅读模式
本帖最后由 VBALISPER 于 2012-7-7 09:11 编辑

一张奇怪的图,交点数量异常
应该是6个交点的,但却求出12个交点.
麻烦找到原因的朋友说一下原因.
这里下载.3楼可以看到直观图


附求交点的LISP代码
(defun C:tt (/ SSL                ;length of SS
                   PTS                        ;returning list
                   AOBJ1                ;Object 1
                   AOBJ2                ;Object 2
                   N1                        ;Loop counter
                   N2                        ;Loop counter
                   IPTS                        ;intersects
                   A N NN HOLDOSMODE
                  )
  (vl-load-com)
  (command "_.UNDO" "_GROUP")
  (setq HOLDOSMODE (getvar "OSMODE"))
  ;(setvar "OSMODE" 0)
  (setq SS (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
  (setq        N1  0                                ;index for outer loop
        SSL (sslength SS)
  )                                        ; Outer loop, first through second to last
  (while (< N1 (1- SSL))                ; Get object 1, convert to VLA object type
    (setq AOBJ1        (ssname SS N1)
          AOBJ1        (vlax-ename->vla-object AOBJ1)
          N2        (1+ N1)
    )                                        ;index for inner loop
;;; Inner loop, go through remaining objects
    (while (< N2 SSL)                        ; Get object 2, convert to VLA object
      (setq AOBJ2 (ssname SS N2)
            AOBJ2 (vlax-ename->vla-object AOBJ2)
;;;Find intersections of Objects
            IPTS  (vla-intersectwith
                    AOBJ1
                    AOBJ2
                    0
                  )                        ; variant result
            IPTS  (vlax-variant-value IPTS)
      )
;;;Variant array has values?
      (if (> (vlax-safearray-get-u-bound IPTS 1) 0)
        (progn                                ;array holds values, convert it
          (setq        IPTS                        ;to a list.
                 (vlax-safearray->list IPTS)
          )
;;;Loop through list constructing points
          (while (> (length IPTS) 0)
            (setq PTS  (cons (list (car IPTS)
                                   (cadr IPTS)
                                   (caddr IPTS)
                             )
                             PTS
                       )
                  IPTS (cdddr IPTS)
            )
          )
        )
      )
      (setq N2 (1+ N2))
    )                                        ;inner loop end
    (setq N1 (1+ N1))
  )                                        ;outer loop end
  (print PTS)
  (princ (strcat "\n交点个数是:" (rtos (vl-list-length PTS) 2 0)))
  (setvar "OSMODE" HOLDOSMODE)
  ;(command "_.UNDO" "_END")
  (princ)
)


该贴已经同步到 VBALISPER的微博

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-7-6 23:10 | 显示全部楼层
明明就是有十二个交点,为什么说是六个呢!往往你表面看到的并不代表是真实的!你把线一根一根挪开来看!
发表于 2012-7-6 23:17 | 显示全部楼层
本帖最后由 xyp1964 于 2012-7-6 23:19 编辑

六个:

;; 伪源码需要e派工具箱(XCAD)的支持

  1. (defun c:tt ()
  2.   (setq ptn (xyp-Get-CurveIntersLeng
  3.        (setq s1 (car (entsel "\n选择: ")))
  4.        3
  5.      )
  6.   )
  7.   (foreach pt ptn (xyp-Cross pt 3 0))
  8.   (princ)
  9. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2012-7-7 09:09 | 显示全部楼层
Gu_xl 发表于 2012-7-6 23:10
明明就是有十二个交点,为什么说是六个呢!往往你表面看到的并不代表是真实的!你把线一根一根挪开来看!

G版,我确实一根一根挪开看过,都是一根线.我也放大看了,只可能有6个交点.这张图是别人测量提交的地形图的一部分.我就是觉得奇怪.还有很怪的是.把这些线全部选中,移动到坐标0,0附近,就只能找到6个交点了.如果移动量很少,还是求得12个交点.我在想是不是因为多段线的节点靠近那条直线,因为捕捉的原因,导致多求出几个点.结果关了捕捉还是一样.
发表于 2012-7-7 11:22 来自手机 | 显示全部楼层
有重合的也没关系,将点表除重就可以了!
 楼主| 发表于 2012-7-7 17:11 | 显示全部楼层
本帖最后由 VBALISPER 于 2012-7-7 17:11 编辑
Gu_xl 发表于 2012-7-7 11:22
有重合的也没关系,将点表除重就可以了!


交点和直线左端点求距离后,得到这样12个长度
(24.4122 24.4121 21.2369 21.2369 18.074 18.0741 11.9268 11.9283 5.08129 5.08122
1.66892 1.66917),可以看出相邻两个点的坐标不完全一样,好消重吗?怎么设置容差.怎么消重我也不会.烦请指点一下.
发表于 2012-7-20 23:21 | 显示全部楼层
vla-intersectwith  函数的问题。
 楼主| 发表于 2012-7-21 15:50 | 显示全部楼层
zml84 发表于 2012-7-20 23:21
vla-intersectwith  函数的问题。

那你的意思是VLISP的BUG ? 另外请教一下,怎么求外观交点的坐标呢?如果上图中的线不在同一个水平面上,这样的交点坐标怎么求得.
发表于 2012-7-30 09:12 | 显示全部楼层
VBALISPER 发表于 2012-7-21 15:50
那你的意思是VLISP的BUG ? 另外请教一下,怎么求外观交点的坐标呢?如果上图中的线不在同一个水平面上,这样 ...

http://zml84.blog.sohu.com/102716208.html
 楼主| 发表于 2012-8-4 15:57 | 显示全部楼层
zml84 发表于 2012-7-30 09:12
http://zml84.blog.sohu.com/102716208.html

谢谢了.十分感谢.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 01:18 , Processed in 0.299252 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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