两圆相交
<P>两圆相交,如何用LISP来捕捉交点?以前曾见到这样一个题,给出三角形三边长让画出这个三角形,正常做图时要做两个圆做辅助线,当然,也有的人是算出来数据后画的。如果用LISP算着当然也不成问题,但如果想不算,先画出一线两圆,再捕捉交点,以交点为点画线。但我却遇到一个问题,就是不知道如何捕捉交点,它有两个交点,应该怎么解决?还请高手指点:</P><P>我写的程序是(不过运行结果不正确还请高手帮忙解决一下):<BR>(defun iadd();选择集的应用。<BR> (setq ss(ssadd(entlast)))<BR>)<BR>(defun c:aaaa()<BR> (setq p(getpoint "\n基点:")<BR> x(car p) y(cadr p)<BR> a(getdist "\n第一条线段长:")<BR> b(getdist "\n第二条线段长:")<BR> c(getdist "\n第三条线段长:")<BR> p1(list (+ x a) y)<BR> )<BR> (vl-cmdf "line" p p1 "") <BR> (vl-cmdf "circle" p b "")(iadd)<BR> (vl-cmdf "circle" p1 c "")(iadd)<BR> (vl-cmdf "line" p (osnap ss "_int") p1 "") ;捕捉交点<BR> (vl-cmdf "erase" ss "" );把两圆删除<BR> (vl-cmdf "zoom" "e")<BR>)</P> <P> 看看吧~不知道是不是你要的~</P>
<P>(setq pp1 (getpoint "\n 第1点:" ))<BR>(setq cd1 (getdist "\n 第1点半径:" ))<BR>(command "_.circle" pp1 cd1 ) <BR>(setq circ1 (vlax-ename->vla-object (entlast )))</P>
<P>(setq pp2 (getpoint pp1 "\n 第2点" ))<BR>(setq cd2 (getdist "\n 第2点半径:" ))<BR>(command "_.circle" pp2 cd2 ) <BR>(setq circ2 (vlax-ename->vla-object (entlast )))</P>
<P>(setq int_points (vlax-invoke circ1 'Intersectwith circ2 acextendnone))<BR>;;求出两圆交点,產生共两组资料</P> <P>那如果想用这两组资料怎么用呀?我是新手,还请高手不吝赐教。</P> 你在试试这完成的程序吧
不过不知道是不是你要的
(defunc:test ()
(setq en (car(entsel "\n 选三角形底边线:"))
ob (entget en)
ob-10 (cdr(ASSOC 10 ob))
ob-11 (cdr(ASSOC 11 ob))
)
(setq pt (getpoint "\n 设三角形顶点位置:"))
(setq dt (DISTANCE ob-10 ob-11))
(setq vla-obj (vlax-ename->vla-object en))
(setq cd1 (getdist "\n 三角形第1斜边距离距离:" ))
(command "_.circle" ob-10 cd1 )
(setq circ1 (vlax-ename->vla-object (entlast )))
(setq cd2 (getdist "\n 三角形第2斜边距离距离:" ))
(command "_.circle" ob-11 cd2)
(setq circ2 (vlax-ename->vla-object (entlast)))
(setq int_points (vlax-invoke circ1 'Intersectwith circ2 acextendnone))
(setq pt_list nil)
(while (caddr int_points)
(setq pt_list (cons (list (car int_points) (cadr int_points) (caddr int_points)) pt_list )
int_points (cdddr int_points)
))
(vla-delete circ1)
(vla-delete circ2)
(if (< (distance (nth 0 pt_list) pt ) (distance (nth 1 pt_list) pt ) )
(setq pp4 (nth 0 pt_list) )
(setq pp4 (nth 1 pt_list) )
)
(vl-cmdf "line" ob-10 "non" pp4 "")
(vl-cmdf "line" ob-11 "non" pp4 "")
)
果然是高手,谢谢呀!
页:
[1]