(vla-SetBulge plineObj vtx (LM:3p->bulge p1 p2 p3))
;; 3-Points to Bulge-M.R.
(defun MR:3p->bulge ( p1 p2 p3 / mid asin clockwise m12 m23 c r )
(defun mid ( p1 p2 )
(mapcar '(lambda ( a b ) (/ (+ a b) 2.0)) p1 p2)
)
(defun asin ( x )
(cond
((equal x 1.0 1e- (/ pi 2.0))
((equal x -1.0 1e- (* 3.0 (/ pi 2.0)))
((equal x 0.0 1e- 0.0)
((equal x -0.0 1e- pi)
((atan (/ x (sqrt (- 1.0 (* x x))))))
)
)
(defun clockwise ( p1 p2 p3 )
(minusp (- (* (- (car p2) (car p1)) (- (cadr p3) (cadr p1))) (* (- (car p3) (car p1)) (- (cadr p2) (cadr p1)))))
)
(setq m12 (mid p1 p2))
(setq m23 (mid p2 p3))
(setq c (inters m12 (polar m12 (+ (angle p1 p2) (* 0.5 pi)) 1.0) m23 (polar m23 (+ (angle p2 p3) (* 0.5 pi)) 1.0) nil))
(setq r (distance c p1))
(if (not (clockwise p1 p2 p3))
(if (<= (rem (+ pi pi (- (angle c p3) (angle c p1))) (+ pi pi)) pi)
((lambda ( a ) (/ (sin a) (cos a))) (/ (asin (/ (distance p1 p3) r 2.0)) 2.0))
((lambda ( b ) (/ 1.0 b)) ((lambda ( a ) (/ (sin a) (cos a))) (/ (asin (/ (distance p1 p3) r 2.0)) 2.0)))
)
(if (<= (rem (+ pi pi (- (angle c p1) (angle c p3))) (+ pi pi)) pi)
((lambda ( a ) (- (/ (sin a) (cos a)))) (/ (asin (/ (distance p1 p3) r 2.0)) 2.0))
((lambda ( b ) (- (/ 1.0 b))) ((lambda ( a ) (/ (sin a) (cos a))) (/ (asin (/ (distance p1 p3) r 2.0)) 2.0)))
)
)
)
如果p2是cp,并且凸起在p1和p3之间计算(p1和p3都在cp圆上),那么凸起公式是什么?
页:
1
[2]