马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×

- ;;参数4个坐标点ap1 ap2 bp1 bp2.(全2d or 全3d)
- ;;返回(向量ap1->ap2)与(向量bp1->bp2)所夹锐角角度.
- (defun xn-ang (ap1 ap2 bp1 bp2 / a-> b-> disa disb disa cosab^2 tan@ @)
- (setq a-> (mapcar '- ap1 ap2))
- (setq b-> (mapcar '- bp1 bp2))
- (setq disa (distance a-> '(0 0 0)))
- (setq disb (distance b-> '(0 0 0)))
- (setq cos@^2
- (expt (abs (/ (apply '+ (mapcar '* a-> b->)) (* disa disb)))
- 2
- )
- )
- (if (equal cos@^2 0)
- 90.0
- (setq tan@ (expt (/ (- 1 cos@^2) cos@^2) 0.5)
- @ (atan tan@)
- @ (/ (* @ 180) pi)
- )
- )
- )
- ;;引用例子空间两直线夹角:
- (defun l-ang (l1 l2 / lst1 lst2)
- (setq lst1 (entget l1))
- (setq lst2 (entget l2))
- (xn-ang
- (cdr (assoc 10 lst1))
- (cdr (assoc 11 lst1))
- (cdr (assoc 10 lst2))
- (cdr (assoc 11 lst2))
- )
- )
- ;;平行
- (defun l-px (l1 l2) (equal (l-ang l1 l2) 0))
- ;;垂直
- (defun l-cq (l1 l2) (equal (l-ang l1 l2) 90))
- ;;测试
- (defun c:test (/ e1 e2)
- (princ "\n选取第一条直线:")
- (setq e1 (car (entsel)))
- (princ "\n选取第二条直线:")
- (setq e2 (car (entsel)))
- (cond ((l-px e1 e2) (princ "\n 平行"))
- ((l-cq e1 e2) (princ "\n 垂直"))
- (t
- (princ "\n 角度为:")
- (princ (l-ang e1 e2))
- )
- )
- (princ)
- )
|