本帖最后由 ayl1004 于 2013-6-10 21:37 编辑
 -
- (defun xdrx_3ptoarc (pt1 pt2 pt3 / pt4 Radius cpt sAng eAng lst)
- (setq Radius nil cpt nil sAng nil eAng nil lst nil)
- ;;计算半径
- (defun EvaRadius (L H)
- (/ (+ (* L L) (* H H)) H 2.0)
- )
- ;;调用
- (setq Pt4 (mapcar '* (mapcar '+ Pt1 Pt3) '(0.5 0.5 0.5)))
- (and
- ;;判断三点是否共线
- (not (equal (distance pt4 pt2) 0 0.00001))
- (equal (distance pt1 pt2) (distance pt2 pt3) 0.00001)
- ;;半径
- (setq Radius (EvaRadius (distance pt1 Pt4) (distance pt2 Pt4)))
- ;;圆心
- (setq cpt (polar pt2 (angle pt2 pt4) Radius))
- (setq sAng (angle cpt pt1))
- (setq eAng (angle cpt pt3))
- (setq lst (list cpt pt1 pt2))
- (setq lst (vl-sort
- (vl-sort lst '(lambda (x y) (< (car x) (car y))))
- '(lambda (x y) (< (cadr x) (cadr y)))
- )
- )
- (setq lst (mapcar 'angle lst (cons (last lst) lst)))
- (setq lst (vl-every '< lst (cdr lst)))
- )
- (list lst cpt Radius sAng eAng)
- )
|