谁能解决这个问题
如图中所示,在选中其中一点的时候,能自动返回离改点最近的三个点,且选中的点在返回的三个点组成的三角形内! delauney问题可以解决 (defun DC-Get-NearestPt ($PT $LST / $LST1)(setq
$LST1 (vl-sort $LST
(function (lambda (x y)
(< (distance x $PT)
(distance y $PT)
)
)
)
)
)
(list (car $LST1) (last $LST1))
) ;最近点画线
(DEFUN C:KK ()
(SETVAR "CMDECHO" 0)
(SETQ OLDOS (GETVAR "OSMODE"))
(PRINC "\nSelect Points :")
(IF (SETQ SS (SSGET '((0 . "POINT")))) (PROGN
(SETQ I -1 PTL (LIST))
(REPEAT (SSLENGTH SS)
(SETQ PTL (CONS (CDR (ASSOC 10 (ENTGET (SSNAME SS (SETQ I (1+ I)))))) PTL))
)
(SETQ PTL (REVERSE PTL) I -1 TMP (LIST) PT1 (LIST 0 0) PSL (LENGTH PTL))
(WHILE (< I (- PSL 2))
(SETQ J I K nil DIS 1E8)
(WHILE (< J (1- PSL))
(SETQ PT2 (NTH (SETQ J (1+ J)) PTL) DS1 (DISTANCE PT2 PT1))
(IF (< DS1 DIS) (SETQ DIS DS1 K J))
)
(IF K
(SETQ PT (NTH (SETQ I (1+ I)) PTL) PT1 (NTH K PTL)
PTL (SUBST (LIST 'AA) PT1 PTL)
PTL (SUBST PT1 PT PTL)
PTL (SUBST PT (LIST 'AA) PTL))
(SETQ I (1+ I))
)
)
(SETVAR "OSMODE" 0)
(SETQ I 0)
(COMMAND "PLINE" (NTH 0 PTL))
(REPEAT PSL
(SETQ PT (NTH (SETQ I (1+ I)) PTL))
(COMMAND PT)
)
(COMMAND "")
))
(SETVAR "OSMODE" OLDOS)
(SETVAR "CMDECHO" 1)
(PRINC)
)
题目好像有漏洞,如果选择点集中外凸包线上的点,无论如何不可能满足“选中的点在返回的三个点组成的三角形内”这一条件。 vormittag 发表于 2011-12-14 17:59 static/image/common/back.gif
题目好像有漏洞,如果选择点集中外凸包线上的点,无论如何不可能满足“选中的点在返回的三个点组成的三角形 ...
选点时是手工点选,不选点集中外凸包线上的点。 可以按下面的步骤实现:1)通过指定点,最好按指定的半径范围获取点集;2)对获取的点集按照与指定点的距离按从小到大排序;3)最近的一点为所需的第一点;4)判断第二点是否与第一点和指定点在一条直线上,如果在,则判断下一点,直到不在一条直线,这一点就是所需的第二点;5)判断第三点与前两个已求点是否包住指定点,如果包住,则就是第三点
页:
[1]