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

挺好的程序感谢楼主分享
页: 1 [2] 3 4
查看完整版本: 多段线顶点过滤/顶点删除(多段线可以带圆弧)—源码分享(4月22日更新)