;;;*********************
;; No.2 数值符号 函数
;;;*********************
(defun aySign (fNumber / retResult)
(cond
((> fNumber 0.0) retResult 1)
((= fNumber 0.0) retResult 0)
((< fNumber 0.0) retResult -1)
);end_cond
);end_defun
;;;********************************
;;; No.3-1 角度转换函数 (度->弧度)
;;;********************************
(defun ayDtoR (deg / r)
(setq r (* deg (/ PI 180.0)))
);end_defun
;;;********************************
;;; No.3-2 角度转换函数 (弧度->度)
;;;********************************
(defun ayRtoD (rad / d)
(setq d (* rad (/ 180.0 PI)))
);end_defun
;;;********************************
;;; No.3-3 角度格式化函数 (°' ")
;;;********************************
(defun ayDMS (Rad / Str1)
(setq Str1 (angtos Rad 1 4))
(setq Str1 (vl-string-subst "%%d" "d" Str1));28°5'20"
);end_defun
;;;********************************
;;; No.3-4 角度格式化函数 (度分秒)
;;;********************************
(defun ayDMSN (Rad / Str1 Deg dd mm ss Sgn)
(setq Deg (* (/ 180.0 PI) Rad))
(if (< Deg 0.0) (setq Sgn -1) (setq Sgn 1))
(setq Deg (abs Deg))
(setq dd (fix Deg))
(setq Deg (* (- Deg dd) 60.0))
(setq mm (fix Deg))
(setq ss (* (- Deg mm) 60.0))
(setq Str1 (strcat (if (= Sgn 1) "" "-") (itoa dd) "."
(if (< mm 10.0) "0" "") (itoa mm)
(if (< ss 10.0) "0" "") (itoa (fix (* 100 ss))))
);end_setq
);end_defun
;;;**************************************
;;; No.3-5 角度转换函数 (度分秒->弧度)
;;;**************************************
(defun ayDMSNtoR (numDMS / fDMS Sgn dd mm SS1 deg rad)
(setq fDMS numDMS)
(if (< fDMS 0.0) (setq Sgn -1) (setq Sgn 1))
(setq fDMS (abs fDMS))
(setq dd (fix fDms))
(setq mm (fix (- (* fDms 100.0) (* dd 100.0))))
(setq SS1 (fix (- (* fDms 10000.0) (+ (* dd 10000.0) (* mm 100.0)))))
(setq deg (+ dd (/ mm 60.0) (/ SS1 3600.0)))
(setq rad (* deg (/ PI 180.0) Sgn))
);end_defun
;;;----------------------------------------------------;
;;;功能: 定义三点的行列式,即三点之倍面积 ;
;;;输入: 三点P1,P2,P3 ;
;;;输出: 这三点形成的三角形的面积的2倍,符号指示方向。 ;
;;;----------------------------------------------------;
(defun C:tt ()
(setq p1 (getPoint "\n请选择左侧O2圆心点:"))
(setq p2 (getPoint "\n请选择左侧O2圆心点:"))
(setq p3 (getPoint "\n请选择左侧O2圆心点:"))
(setq p ( - (* (- (car p2) (car p1)) (- (cadr p3) (cadr p1)))
(* (- (car p3) (car p1)) (- (cadr p2) (cadr p1)))
))
)
;;;----------------------------------------------------;
;;;功能: 用海伦公式(Heron's formula)求三角形面积 ;
;;;输入: 三角形的三个边长a,b,c ;
;;;输出: 三角形面积 ;
;;;----------------------------------------------------;
(defun TRI:Area (a b c / p)
(setq p (* 0.5 (+ a b c)))
(sqrt (* p (- p a) (- p b) (- p c)))
)
;;;----------------------------------------------------;
;;;功能: 计算已知空间三点的三角形面积 ;
;;;输入: 空间三点 P1,P2,P3 ;
;;;输出: 三角形面积 ;
;;;----------------------------------------------------;
(defun TRI:Area3D (p1 p2 p3 / v1 v2 d1 d2 d3)
(setq v1 (mapcar '- p2 p1))
(setq v2 (mapcar '- p3 p1))
(setq d1 (MAT:Det2 (car v1) (cadr v1) (car v2) (cadr v2)))
(setq d2 (MAT:Det2 (cadr v1) (caddr v1) (cadr v2) (caddr v2)))
(setq d3 (MAT:Det2 (caddr v1) (car v1) (caddr v2) (car v2)))
(* 0.5 (sqrt (+ (* d1 d1) (* d2 d2) (* d3 d3))))
)