夜未眠 发表于 2006-4-15 16:57:00

[求助]最远和最近的2点

现在有A,B,C,D,,……,N共n个点,如何找出其中距离最远的2点和和最近的2点?

超然A 发表于 2006-4-15 17:39:00

<P>说一下你这些点是怎样获得的。</P>
<P>是从图面上选取呢?还是有点的坐标列表?&nbsp; 还是多段线的各个顶点?</P>

Ea 发表于 2006-4-16 11:21:00

http://www.xdcad.net/forum/showthread.php?s=&amp;threadid=452598

夜未眠 发表于 2006-4-20 13:27:00

Ea发表于2006-4-16 11:21:00static/image/common/back.gifhttp://www.xdcad.net/forum/showthread.php?s=&amp;threadid=452598

<BR>
<P><B>发生了一些微小的问题在 数据库.</B><BR>请重试<A href="<b>javascript</b> :window.location=window.location;" target="_blank" >刷新</A> 你的浏览器.</P>lll一封 E-Mail 已经发到我们的<A href="mailto:webmaster@xdcad.net" target="_blank" >技术人员</A>, 如果问题仍然存在,你可以联系它.
<P></P>
<P>我们感到非常抱歉.</P>

夜未眠 发表于 2006-4-20 13:29:00

超然A发表于2006-4-15 17:39:00static/image/common/back.gif
说一下你这些点是怎样获得的。
是从图面上选取呢?还是有点的坐标列表? 还是多段线的各个顶点?

<BR>都是用vla获得的线的交点

xyp1964 发表于 2006-4-20 14:21:00

;;;最近的2点
(defun min-pt2pt (ptlst / Min-dist pt0 pt dist-tmp ptn)
(setq Min-dist (distance (car ptlst) (cadr ptlst)))
(while (> (length ptlst) 1)
    (setq pt0 (car ptlst)
   ptlst (cdr ptlst)
    )
    (foreach pt ptlst
      (if (< (setq dist-tmp (distance pt0 pt)) Min-dist)
(setq ptn   (cons dist-tmp (list pt0 pt))
       Min-dist dist-tmp
)
      )
    )
)
ptn
)
;;;最远的2点
(defun max-pt2pt (ptlst / Min-dist pt0 pt dist-tmp ptn)
(setq Min-dist (distance (car ptlst) (cadr ptlst)))
(while (> (length ptlst) 1)
    (setq pt0 (car ptlst)
   ptlst (cdr ptlst)
    )
    (foreach pt ptlst
      (if (> (setq dist-tmp (distance pt0 pt)) Min-dist)
(setq ptn   (cons dist-tmp (list pt0 pt))
       Min-dist dist-tmp
)
      )
    )
)
ptn
)

夜未眠 发表于 2006-4-25 08:37:00

<P>楼上的程序有bug ,当只有2个点时出错。</P>

狂刀无痕 发表于 2006-4-26 00:33:00

以前写的
;|(xl-ptsmaxdist ptlst)求点集中最远,最近点表.-v1.1bautolsp)-by梁雄啸.2004.4
根据841594 和 snsj 部分代码修改而成
返回:(最远两点 最近两点)
(xl-ptsmaxdist (while (setq pt(getpoint)) (setq plst (cons pt plst)))))
->(((14857.8 -599.932 0.0) (26695.2 -3687.68 0.0)) ((15733.8 -3687.68 0.0) (15630.7 -3842.07 0.0)))
|;
(defun xl-ptsmaxdist (ptlst / pt d maxd mind maxl minl)
(setq minl (list (car ptlst)(cadr ptlst)) maxd 0 mind (apply 'distance minl))
(while (setq pt (car ptlst) ptlst (cdr ptlst))
    (foreach n ptlst
      (setq d (distance n pt))
      (cond ((< maxd d)(setq maxd d maxl (list n pt)))
   ((> mind d)(setq mind d minl (list n pt)))
      )
    )
)(list maxl minl)
)
;|测试程序--在屏幕取点后,画出最近/最远点的两条直线.
(defun c:test ( / pt ptlst)
(setq opd (getvar "pdmode"))
(setvar "pdmode" 3)
(while (setq pt (getpoint "\n取点:"))
    (vl-cmdf ".point" pt)(setq ptlst (cons pt ptlst))
)
(mapcar '(lambda (x)(vl-cmdf ".line" (car x)(cadr x) "")) (mlenpts ptlst))
(setvar "pdmode" opd)
(princ)
)      
|;
页: [1]
查看完整版本: [求助]最远和最近的2点