请教高手:为什么附件的两条多段线会出现两个交点?
本帖最后由 bluelover 于 2021-7-16 17:24 编辑我用 IntersectWith , acExtendNone 方法求附件两条多段线的交点时,显示得到两个交点。
明显只有一个交点啊。
这是为什么呢?
延伸还有一个 我取得交点时选择的模式是不延伸acExtendNone ,而且你可以看到这两个交点相隔很近。
实际上我用curve类 GetDistanceAtPoint测试的时候发现其中一个交点根本不在紫色线上……
实在是不懂问题在哪里。 求交点这个函数确实很多时候都有问题,我上个月也出现了跟你一样的问题,我直接创建的一个变量存放的第一个点,第二个点弃了 本帖最后由 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))
)
yshf 发表于 2021-10-26 22:40
坐标数值太大,将两对象往原点方向平移,减小坐标数值,再求交点,就不会有两点情况,得到交点,再将两对象 ...
我也碰到过类似的案例,似乎软件内部对于过大的坐标数值会采取类似科学计数法之内的方法,忽略了低位数的数值。我也是移动到小坐标数值范围,运算,然后再移动到原大坐标。
页:
[1]