明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 999|回复: 5

请教高手:为什么附件的两条多段线会出现两个交点?

[复制链接]
发表于 2021-7-16 17:18:15 | 显示全部楼层 |阅读模式
本帖最后由 bluelover 于 2021-7-16 17:24 编辑

我用 IntersectWith , acExtendNone 方法求附件两条多段线的交点时,显示得到两个交点。
明显只有一个交点啊。
这是为什么呢?

本帖子中包含更多资源

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

x
发表于 2021-7-16 22:18:20 | 显示全部楼层
延伸还有一个
 楼主| 发表于 2021-7-16 22:30:52 | 显示全部楼层
我取得交点时选择的模式是不延伸acExtendNone ,而且你可以看到这两个交点相隔很近。
实际上我用curve类 GetDistanceAtPoint测试的时候发现其中一个交点根本不在紫色线上……
实在是不懂问题在哪里。
发表于 2021-10-26 18:13:37 | 显示全部楼层
求交点这个函数确实很多时候都有问题,我上个月也出现了跟你一样的问题,我直接创建的一个变量存放的第一个点,第二个点弃了
发表于 2021-10-26 22:40:38 | 显示全部楼层
本帖最后由 yshf 于 2021-10-26 23:33 编辑

坐标数值太大,将两对象往原点方向平移,减小坐标数值,再求交点,就不会有两点情况,得到交点,再将两对象移回原位,交点加上平移量就是正确解。;|
   ;返回两图元所有实际交点所组成的列表(避免坐标数值较大时出现bug)
   ;Xobj1 -- 求交点的第1个VLA对象
   ;Xobj2 -- 求交点的第2个VLA对象
   ;返回值:((x1 y1 z1) (x2 y2 z2) ...)
   ;示例:
   (setq jdlb (MyIntersectWith (vlax-ename->vla-object (car (entsel "\n第1个图元:")))
                               (vlax-ename->vla-object (car (entsel "\n第2个图元:")))
              )
   )
|;
(defun MyIntersectWith(Xobj1 Xobj2 / p1 p2 p3 p4 ptmin jdb fhz)
    (vlax-invoke-method Xobj1 "GetBoundingBox" 'p1 'p2)
    (vlax-invoke-method Xobj2 "GetBoundingBox" 'p3 'p4)
    (setq ptmin (apply 'mapcar (cons 'min (list (setq p1 (vlax-safearray->list p1))
                                                (setq p3 (vlax-safearray->list p3))
                                          )
                               )
                )
    )
    ;将求交点两对象往原点方向平移
    (vla-Move Xobj1 (vlax-3d-point ptmin) (vlax-3d-point 0 0 0))
    (vla-Move Xobj2 (vlax-3d-point ptmin) (vlax-3d-point 0 0 0))
    (setq jdb (vlax-invoke Xobj1 "intersectwith" Xobj2 acextendnone))
    ;将求交点两对象平移回原位
    (vla-Move Xobj1 (vlax-3d-point 0 0 0) (vlax-3d-point ptmin))
    (vla-Move Xobj2 (vlax-3d-point 0 0 0) (vlax-3d-point ptmin))
    (setq fhz nil)
    (while jdb
        (setq fhz (cons (list (car jdb) (cadr jdb) (caddr jdb)) fhz))
        (setq jdb (cdr (cdr (cdr jdb))))
    )
    (setq fhz (reverse fhz))
    (setq fhz (mapcar '(lambda(pt)(mapcar '+ ptmin pt)) fhz))
)


发表于 2021-10-27 09:01:10 | 显示全部楼层
yshf 发表于 2021-10-26 22:40
坐标数值太大,将两对象往原点方向平移,减小坐标数值,再求交点,就不会有两点情况,得到交点,再将两对象 ...

我也碰到过类似的案例,似乎软件内部对于过大的坐标数值会采取类似科学计数法之内的方法,忽略了低位数的数值。我也是移动到小坐标数值范围,运算,然后再移动到原大坐标。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-22 18:26 , Processed in 0.182697 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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