明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3166|回复: 6

谁能解决这个问题

[复制链接]
发表于 2011-11-22 13:57:45 | 显示全部楼层 |阅读模式
如图中所示,在选中其中一点的时候,能自动返回离改点最近的三个点,且选中的点在返回的三个点组成的三角形内!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-12-7 01:42:33 | 显示全部楼层
delauney问题可以解决
发表于 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))
)
发表于 2011-12-10 15:52:28 | 显示全部楼层
  1. ;最近点画线
  2. (DEFUN C:KK ()
  3. (SETVAR "CMDECHO" 0)
  4. (SETQ OLDOS (GETVAR "OSMODE"))
  5. (PRINC "\nSelect Points :")
  6. (IF (SETQ SS (SSGET '((0 . "POINT")))) (PROGN
  7.   (SETQ I -1 PTL (LIST))
  8.   (REPEAT (SSLENGTH SS)
  9.    (SETQ PTL (CONS (CDR (ASSOC 10 (ENTGET (SSNAME SS (SETQ I (1+ I)))))) PTL))
  10.   )
  11.   (SETQ PTL (REVERSE PTL) I -1 TMP (LIST) PT1 (LIST 0 0) PSL (LENGTH PTL))
  12.   (WHILE (< I (- PSL 2))
  13.    (SETQ J I K nil DIS 1E8)
  14.    (WHILE (< J (1- PSL))
  15.     (SETQ PT2 (NTH (SETQ J (1+ J)) PTL) DS1 (DISTANCE PT2 PT1))
  16.     (IF (< DS1 DIS) (SETQ DIS DS1 K J))
  17.    )
  18.    (IF K
  19.     (SETQ PT (NTH (SETQ I (1+ I)) PTL) PT1 (NTH K PTL)
  20.           PTL (SUBST (LIST 'AA) PT1 PTL)
  21.           PTL (SUBST PT1 PT PTL)
  22.           PTL (SUBST PT (LIST 'AA) PTL))
  23.     (SETQ I (1+ I))
  24.    )
  25.   )
  26.   (SETVAR "OSMODE" 0)
  27.   (SETQ I 0)
  28.   (COMMAND "PLINE" (NTH 0 PTL))
  29.   (REPEAT PSL
  30.    (SETQ PT (NTH (SETQ I (1+ I)) PTL))
  31.    (COMMAND PT)
  32.   )
  33.   (COMMAND "")
  34. ))
  35. (SETVAR "OSMODE" OLDOS)
  36. (SETVAR "CMDECHO" 1)
  37. (PRINC)
  38. )
复制代码
发表于 2011-12-14 17:59:45 | 显示全部楼层
题目好像有漏洞,如果选择点集中外凸包线上的点,无论如何不可能满足“选中的点在返回的三个点组成的三角形内”这一条件。
 楼主| 发表于 2012-3-3 00:22:28 | 显示全部楼层
vormittag 发表于 2011-12-14 17:59
题目好像有漏洞,如果选择点集中外凸包线上的点,无论如何不可能满足“选中的点在返回的三个点组成的三角形 ...

选点时是手工点选,不选点集中外凸包线上的点。
发表于 2012-3-3 11:43:02 | 显示全部楼层
可以按下面的步骤实现:1)通过指定点,最好按指定的半径范围获取点集;2)对获取的点集按照与指定点的距离按从小到大排序;3)最近的一点为所需的第一点;4)判断第二点是否与第一点和指定点在一条直线上,如果在,则判断下一点,直到不在一条直线,这一点就是所需的第二点;5)判断第三点与前两个已求点是否包住指定点,如果包住,则就是第三点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-24 02:54 , Processed in 0.168361 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表