- UID
- 169
- 积分
- 405
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-10
- 最后登录
- 1970-1-1
|
发表于 2002-9-14 22:40:49
|
显示全部楼层
原来是准备写一个小的内部函数,后来。没了兴趣//所以是没有完成的函数,呵呵,
有几个地方也懒的再进行改了
;;;(defun c:xx ()
;;; (prompt
;;; "\n 直线与圆弧的交点的Lisp函数库_由奥沃工作室编辑<前生>..!"
;;; )
;;; (setq fe nil
;;; se nil
;;; )
;;; (setq fe (entsel "\n 请选取一个实体<直线,圆,圆弧>:..."))
;;; (if fe
;;; (setq se (entsel "\n 请选取另一个实体<直线,圆,圆弧>:..."))
;;; (prompt "\n 第一个实体没有选择到,请重新选取")
;;; )
;;; (if (and fe se)
;;; (oursbe)
;;; (prompt "__程序已经退出!")
;;; )
;;;)
;;;(defun oursbe ()
;;; (setq fetype nil
;;; fename nil
;;; setype nil
;;; sename nil
;;; )
;;; (setq fe (car fe)
;;; se (cdr se)
;;; )
;;; (setq fetype (cdr (assoc -1 (entget fe)))
;;; fename (cdr (assoc 0 (entget fe)))
;;; setype (cdr (assoc -1 (entget se)))
;;; sename (cdr (assoc 0 (entget se)))
;;; )
;;;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;my 为主程.
;;;my1 为一个交点.my2为第二个点
;;;(defun my (linen arcen kg)
(defun my_I (linen arcen)
(setq my1 nil
my2 nil
)
;;;该程序判断pt1点是否在由pt2,pt3为端点的直线上
(defun js (pt1 pt2 pt3)
(setq mypt nil)
(if
;;; (equal (- (+ (distance pt1 pt2) (distance pt1 pt3))
;;; (distance pt2 pt3)
;;; )
;;; 0.005
;;; )
(<= (+ (distance pt1 pt2) (distance pt1 pt3))
(distance pt2 pt3)
)
(progn
(setq mypt pt1)
(alert "\n 该点在直线上!")
)
(progn
(alert "\n 该点是在直线的延伸线上!")
)
)
)
;;; 计算直线与圆弧一个交点时的情况;;;
(defun js1 ()
(setq my1 (js pp ls le))
)
;;; 计算直线与圆弧二个交点时的情况;;;
(defun js2 ()
(setq my1 (js pp ls le))
(setq my2 (js pp ls le))
)
;;;该程序判断p点是否arc这个圆上
(defun js2js ()
(setq my1 (js pp ls le))
(setq my2 (js pp ls le))
)
;;;该程序判断p点是否arc这个圆弧上
(Defun pa (p arc)
(setq earc nil
pafs nil
pafe nil
)
(setq earc (entget arc))
(setq pafs (cdr (assoc 50 earc)) ;起点
pafe (cdr (assoc 51 earc)) ;终点
pc (cdr (assoc 10 earc))
)
(setq paf (angle pc p))
(if (> pafe pafs)
(progn
(if (and (< paf pafe) (> paf pafs))
(alert " 是一个实际的交点!")
(alert " 是一个虚拟的交点!")
)
)
(progn
(if (and (< paf pafs) (> paf pafe))
(alert " 是一个实际的交点!")
(alert " 是一个虚拟的交点!")
)
)
)
)
;;;___________________________
(defun al ()
(setq afl nil
l nil
al1 nil
al2 nil
)
(setq afl (+ pi af))
(setq l (distance ax pp))
(setq l1 (sqrt (- (* ar ar) (* l l))))
(setq al1 (polar pp af l1))
(setq al2 (polar pp afl l1))
;;; (setq l nil l1 nil)
(setq str "")
(if al1
(setq str (strcat str (vl-prin1-to-string al1)))
)
(if al2
(setq str (strcat str "\n" (vl-prin1-to-string al2)))
)
(alert str)
)
;;;___________________________
(setq pp nil
le nil
ls NIL
my1 nil
my2 nil
)
(prompt "\n 直线与圆弧的交点的Lisp函数库")
(prompt "\n _由奥沃工作室编辑..!")
;;;注:_____linen为直线的实体名
(setq ls (cdr (assoc 10 (entget linen)))
le (cdr (assoc 11 (entget linen)))
)
(setq af (angle ls le))
(setq af1 (+ (* pi 0.5) af)
af2 (+ (* pi 1.5) af)
)
;;; (setq arcen (Car arcen))
;;;注:_____arcen为圆弧的实体名
(setq ax (cdr (assoc 10 (entget arcen)))
ar (cdr (assoc 40 (entget arcen)))
)
(setq as nil
ae nil
)
(setq p1 (polar ax af1 ar)
p2 (polar ax af2 ar)
)
(setq pp (inters p1 p2 ls le nil))
(setq d1 nil
d2 nil
d3 nil
)
(setq d1 (distance p1 pp)
d2 (distance p2 pp)
d3 (distance p1 p2)
;;; ddd 1
)
(if
(equal 0 (- d3 d1 d2) 0.000005)
;;; (> d3 (+ d1 d2))
(progn
(if (or (equal 0 (distance p1 pp) 0.005)
(equal 0 (distance p2 pp) 0.005)
)
(progn
(alert "直线与圆弧有一个交点")
; (js1)
)
(progn
(alert "直线与圆弧有二个交点")
(al)
(js2)
(js2js)
)
)
)
(alert "直线与圆弧没有交点")
)
) |
|