lht 发表于 2018-5-7 19:17:18

有请黄明儒老师帮忙解决"判断点在多段线内"的问题

本帖最后由 lht 于 2018-5-7 19:19 编辑

在运行黄明儒老师的"判断点在多段线内"的函数,当点在边界外时,在命令行频显"边界不闭合,无效的选项关键字",拖慢了运行速度,将(setvar "cmdecho" 0)设为0也不行,能有什么办法关掉?

自贡黄明儒 发表于 2018-5-8 07:55:18

lht 发表于 2018-5-7 22:26
谢谢黄老师,可否提供函数?

都打包进《葵花宝典A》中了
;;164.40 [功能] 点在封闭多段线内返回T,其余nilBy 狂刀(见175)
;;本程序为狂刀思想,并非源程序
;;(PtInorOut1 ((HH:PtLists (car(entsel))) (getpoint))
(defun PtInorOut1 (pts pt / P1 P2)
(setq        pts (MAPCAR '(LAMBDA (p1 p2) (REM (- (ANGLE pt p1) (ANGLE pt p2)) PI))
                  (CONS (LAST pts) pts)
                  pts
          )
)
(equal (ABS (APPLY '+ pts)) PI)
)

自贡黄明儒 发表于 2018-5-7 20:46:21

既然点名了,不回复也不太好。1 你用的是哪个函数?2 多段线是否凸多边形?

lht 发表于 2018-5-7 22:00:03

黄教师,是你这个函数。
(defun HH_PtInCurve (p ss / E E0)
(cond ((equal (type ss) 'ENAME) (setq ss (ssadd ss (ssadd)))))
(setvar "nomutt" 1)
(setq e0 (entlast))
(APPLY 'bpoly (list p ss '(1 0)))
(while (not (equal (getvar "cmdnames") "")) (apply 'command (list "")))
(setvar "nomutt" 0)
(cond ((entnext e0) (while (setq e (entnext e0)) (entdel e)) T))
)

lht 发表于 2018-5-7 22:01:09

多段线是凸多边形

自贡黄明儒 发表于 2018-5-7 22:22:41

凸多边形无需用这个程序了。有一个程序,凸多边形各点到某点的夹角之和为360度。也可用射线法,判断交点为偶奇。

lht 发表于 2018-5-7 22:26:13

谢谢黄老师,可否提供函数?

自贡黄明儒 发表于 2018-5-7 22:47:03

尺有所短,寸有所长。例出的函数最适合的还是选择集,不适合追求速度。

lht 发表于 2018-5-7 23:24:15

谢谢黄老师耐心解答!

ntwison 发表于 2018-5-8 13:15:23

葵花宝典A有升级到B的计划吗?{:1_1:}
页: [1] 2
查看完整版本: 有请黄明儒老师帮忙解决"判断点在多段线内"的问题