xtjd
发表于 2023-3-23 14:57:45
x_s_s_1 发表于 2023-3-23 14:52
我在一楼添加了一个测试图形,您再试试
两个图形均测试过,没有问题
x_s_s_1
发表于 2023-3-23 15:06:24
本帖最后由 x_s_s_1 于 2023-3-23 15:07 编辑
xtjd 发表于 2023-3-23 14:57
两个图形均测试过,没有问题
这是测试图2的正确结果,三个蓝色的92边形和白色的应该是不等的
xtjd
发表于 2023-3-23 16:08:45
x_s_s_1 发表于 2023-3-23 15:06
这是测试图2的正确结果,三个蓝色的92边形和白色的应该是不等的
(defun c:t3 (/ en ss time)
(defun xtjd-test2(o)(vla-put-color o 1))
(setq en(car(entsel"\n拾取基准型:"))ss(ssget))
(setq time (getvar "millisecs"))
(mapcar 'xtjd-test2(xtjd-test3 en ss 1e-6))
(setq time (- (getvar "millisecs") time))
(print (strcat "经历时间为:" (itoa time) "毫秒"))
)
(defun xtjd-test3(en ss fuzz / s)
(defun get(o / a n s)
(setq a(vlax-get o 'Coordinates) n(length a) s '())
(repeat(/ n 2)(setq s(cons(list(car a)(cadr a))s)a(cddr a)))
(append
(list(vla-get-Length o)(vla-get-area o))
(mapcar(function(lambda(a b)(distance a b)))s(cddr s))
)
)
(setqs(get(vlax-ename->vla-object en)))
(vl-remove-if-not(function(lambda(x)(equal s(get x)fuzz)))
(mapcar 'vlax-ename->vla-object(vl-remove-if 'listp(mapcar 'cadr(ssnamex ss))))
)
)
mahuan1279
发表于 2023-3-23 16:24:48
x_s_s_1 发表于 2023-3-23 15:06
这是测试图2的正确结果,三个蓝色的92边形和白色的应该是不等的
不知浮点误差对判断结果影响大不大?
x_s_s_1
发表于 2023-3-23 16:36:12
mahuan1279 发表于 2023-3-23 16:24
不知浮点误差对判断结果影响大不大?
对角度影响大,长度影响不是蛮大
x_s_s_1
发表于 2023-3-23 16:47:11
本帖最后由 x_s_s_1 于 2023-3-23 16:53 编辑
xtjd 发表于 2023-3-23 16:08
(defun c:t3 (/ en ss time)
(defun xtjd-test2(o)(vla-put-color o 1))
(setq en(car(entsel"\n拾 ...
辛苦您了,但是对于起点不同图形判断还是不对,存在几种情况是要判断的:图形镜像了,图形绘制方向不同,图形绘制起点不同。
x_s_s_1
发表于 2023-3-23 17:05:40
mahuan1279 发表于 2023-3-23 16:24
不知浮点误差对判断结果影响大不大?
测试图2的结果不是浮点数误差的问题,是判断机制的问题,归结到几何问题就是全等多边形
mahuan1279
发表于 2023-3-23 18:31:21
x_s_s_1 发表于 2023-3-23 17:05
测试图2的结果不是浮点数误差的问题,是判断机制的问题,归结到几何问题就是全等多边形
用向量来判断呢?
x_s_s_1
发表于 2023-3-23 19:20:52
mahuan1279 发表于 2023-3-23 18:31
用向量来判断呢?
我写的就等同于用向量判断的,但是速度不行,撞大运,碰到起点方向相同的就很快
mahuan1279
发表于 2023-3-23 19:31:58
x_s_s_1 发表于 2023-3-23 19:20
我写的就等同于用向量判断的,但是速度不行,撞大运,碰到起点方向相同的就很快
为什么要比较起点方向呢?