- 积分
- 10393
- 明经币
- 个
- 注册时间
- 2021-1-6
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|

楼主 |
发表于 2022-4-6 16:40:10
|
显示全部楼层
如果遇到除数为0的错误,是因为三点共线的检测有个BUG。使用下面的这个函数替换之前的函数。
(defun ff:3pt_in_line (p1 p2 p3 ang1 / boln v1 v2 )
(setq boln nil)
(setq v1 (mapcar '- p1 p2) v2 (mapcar '- p2 p3))
(if (and
(equal (car v1) 0 1e-4)
(equal (car v2) 0 1e-4)
)
(setq boln T) ;当x1-x2=0,且x2-x3=0时,证明p1p2p3三点共线,且该线平行于y轴(斜率无穷大)
)
(if (and
(/= (car v1) 0)
(/= (car v2) 0)
(equal (/ (cadr v1) (car v1)) (/ (cadr v2) (car v2)) (/ (sin (angtof ang1)) (cos (angtof ang1))))
)
(setq boln T) ;当x1-x2≠0,且x2-x3≠0,且直线p1p2与直线p2p3的斜率在容差范围内相等时,证明p1p2p3三点共线。此处equal的容差取值为tanA
)
boln
)
(defun ff:check_3pt_in_line (p1 p2 p3 ang1 / boln v1 v2 )
(setq boln nil)
(setq v1 (mapcar '- p1 p2) v2 (mapcar '- p2 p3))
(if (and
(equal (car v1) 0 1e-4)
(equal (car v2) 0 1e-4)
)
(setq boln T) ;当x1-x2=0,且x2-x3=0时,证明p1p2p3三点共线,且该线平行于y轴(斜率无穷大)
)
(if (and
(/= (car v1) 0)
(/= (car v2) 0)
(equal (/ (cadr v1) (car v1)) (/ (cadr v2) (car v2)) (/ (sin (angtof ang1)) (cos (angtof ang1))))
)
(setq boln T) ;当x1-x2≠0,且x2-x3≠0,且直线p1p2与直线p2p3的斜率在容差范围内相等时,证明p1p2p3三点共线。此处equal的容差取值为tanA
)
boln
)
|
|