mp13119 发表于 2011-11-22 13:57:45

谁能解决这个问题

如图中所示,在选中其中一点的时候,能自动返回离改点最近的三个点,且选中的点在返回的三个点组成的三角形内!

weifai 发表于 2011-12-7 01:42:33

delauney问题可以解决

【KAIXIN】 发表于 2011-12-10 15:49:39

(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))
)

【KAIXIN】 发表于 2011-12-10 15:52:28

;最近点画线
(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:45

题目好像有漏洞,如果选择点集中外凸包线上的点,无论如何不可能满足“选中的点在返回的三个点组成的三角形内”这一条件。

mp13119 发表于 2012-3-3 00:22:28

vormittag 发表于 2011-12-14 17:59 static/image/common/back.gif
题目好像有漏洞,如果选择点集中外凸包线上的点,无论如何不可能满足“选中的点在返回的三个点组成的三角形 ...

选点时是手工点选,不选点集中外凸包线上的点。

moyu132 发表于 2012-3-3 11:43:02

可以按下面的步骤实现:1)通过指定点,最好按指定的半径范围获取点集;2)对获取的点集按照与指定点的距离按从小到大排序;3)最近的一点为所需的第一点;4)判断第二点是否与第一点和指定点在一条直线上,如果在,则判断下一点,直到不在一条直线,这一点就是所需的第二点;5)判断第三点与前两个已求点是否包住指定点,如果包住,则就是第三点
页: [1]
查看完整版本: 谁能解决这个问题