Q晋胡
发表于 2022-4-6 12:38:51
假如我矩形线上有多余的顶点的话,怎么去优化掉?
天天问
发表于 2022-4-6 14:37:55
Q晋胡 发表于 2022-4-6 12:38
假如我矩形线上有多余的顶点的话,怎么去优化掉?
测试了一下,矩形是封闭多段线,用这个命令处理,也能处理边上共线的多余顶点,但是最终的多段线会不闭合。您这个需求,用专门针对矩形多余顶点来处理会好一点。
Q晋胡
发表于 2022-4-6 15:04:44
天天问 发表于 2022-4-6 14:37
测试了一下,矩形是封闭多段线,用这个命令处理,也能处理边上共线的多余顶点,但是最终的多段线会不闭合 ...
为什么我测试显示,(错误;除数为零)而且就算不是矩形,但是转折90度以后也不行,只能是一条直线多余点才能成功
天天问
发表于 2022-4-6 16:37:04
Q晋胡 发表于 2022-4-6 12:38
转折的多段线不能优化顶点吗?
我发的这个是可以优化的,刚刚我也测试过。只是会遇到我上面说的那个问题。
对于不封闭的多段线就正常使用,对于矩形这种闭合多段线,就出现减点以后起点和终点不闭合的情况。
天天问
发表于 2022-4-6 16:40:10
Q晋胡 发表于 2022-4-6 15:04
为什么我测试显示,(错误;除数为零)而且就算不是矩形,但是转折90度以后也不行,只能是一条直线多余点 ...
如果遇到除数为0的错误,是因为三点共线的检测有个BUG。使用下面的这个函数替换之前的函数。
(defun ff:3pt_in_line (p1 p2 p3 ang1 / bolnv1 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 / bolnv1 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
)
Q晋胡
发表于 2022-4-6 18:00:37
天天问 发表于 2022-4-6 16:40
如果遇到除数为0的错误,是因为三点共线的检测有个BUG。使用下面的这个函数替换之前的函数。
(defun ff ...
能给个完成的函数吗?(新人,因为不知道之前的函数从哪里开始替换)
天天问
发表于 2022-4-6 20:01:50
Q晋胡 发表于 2022-4-6 18:00
能给个完成的函数吗?(新人,因为不知道之前的函数从哪里开始替换)
可以的,方便的话给我个邮箱,我发给你
Q晋胡
发表于 2022-4-9 00:34:19
316615172@qq.com
天天问
发表于 2022-4-9 15:39:03
Q晋胡 发表于 2022-4-9 00:34
已经发送,请注意查收
jxy308
发表于 2022-4-26 22:55:13
挺好的程序感谢楼主分享