Grrr 发表于 2022-7-5 16:30:57

不确定SetBulge和GetBulge方法是否与42组码保持相同的值,但随着LM:3p->bulge,任务变得更加简单:
 
(vla-SetBulge plineObj vtx (LM:3p->bulge p1 p2 p3))

marko_ribar 发表于 2022-7-5 16:35:11


;; 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)))
       )
   )
)

Grrr 发表于 2022-7-5 16:38:29

如果p2是cp,并且凸起在p1和p3之间计算(p1和p3都在cp圆上),那么凸起公式是什么?
 

gsc 发表于 2022-7-5 16:45:29

页: 1 [2]
查看完整版本: 折线凸出转换?