三点画圆弧
利用高飞鸟大师的求外心的程序,做了一个三点画圆弧的(defun drarc3pt(pt1 pt2 pt3)
(setq gfret(cir:ppp pt1 pt2 pt3)
cent(car gfret)
ang1 (angle cent pt1)
ang2(angle cent pt3)
)
(setq xzfx(clockw pt1 pt2 pt3))
(cond ((= xzfx 1)
(entmake (list (cons 0"ARC")
(cons 10 cent)
(cons 40 (cadr gfret))
(cons 50 ang1) (cons 51 ang2))))
((= xzfx -1)
(entmake (list (cons 0"ARC")
(cons 10 cent)
(cons 40 (cadr gfret))
(cons 50 ang2) (cons 51 ang1))))
((= xzfx 0)
(princ "出错:三点共线")))
)
(defun clockw(pt1 pt2 pt3);;;;判断三点的旋转方向
(setq keyjd(-(*(- (car pt2) (car pt1))(-(cadr pt3)(cadr pt2)))
(*(-(cadr pt2)(cadr pt1))(- (car pt3) (car pt2)))))
(cond ((> keyjd 0)(setq clock 1))
((< keyjd 0)(setq clock -1))
((= keyjd 0)(setq clock 0)))
clock)
(defun CIR:PPP (P0 P1 P2 / X0 Y0 X1 Y1 X2 Y2 DX1 DY1 DX2 DY2 D 2D C1 C2 CE);;;;三角形外心--来自高飞鸟
(setq X0(carP0)
Y0(cadr P0)
X1(carP1)
Y1(cadr P1)
X2(carP2)
Y2(cadr P2)
DX1 (- X1 X0)
DY1 (- Y1 Y0)
DX2 (- X2 X0)
DY2 (- Y2 Y0)
)
(setq D (- (* DX1 DY2) (* DX2 DY1)))
(if (equal D 0 1e-14)
nil
(progn
(setq 2D (+ D D)
C1 (+ (* DX1 (+ X0 X1)) (* DY1 (+ Y0 Y1)))
C2 (+ (* DX2 (+ X0 X2)) (* DY2 (+ Y0 Y2)))
CE (List (/ (- (* C1 DY2) (* C2 DY1)) 2D)
(/ (- (* C2 DX1) (* C1 DX2)) 2D)
)
)
(list CE (distance CE P0))
)
)
)
(defun make-arc(p1 p2 p3 / cn lm:clockwise-p lst m1 m2)
;; Clockwise-p-Lee Mac
;; Returns T if p1,p2,p3 are clockwise oriented
(defun LM:Clockwise-p ( p1 p2 p3 )
(< (* (- (carp2) (carp1)) (- (cadr p3) (cadr p1)))
(* (- (cadr p2) (cadr p1)) (- (carp3) (carp1)))
)
)
(setq
p1(trans p1 1 0)
p2(trans p2 1 0)
p3(trans p3 1 0)
m1 (mid p1 p2)
m2 (mid p2 p3)
)
(if(setq cn
(inters
m1 (polar m1 (+ (angle p1 p2) (/ pi 2.)) 1.0)
m2 (polar m2 (+ (angle p2 p3) (/ pi 2.)) 1.0)
nil
)
)
(progn
(setq lst(append (list cn)
(if (LM:Clockwise-p p1 p2 p3)
(list (angle cn p3) (angle cn p1))
(list (angle cn p1) (angle cn p3))
)
(list (distance cn p1))
)
)
(entmake (append '((0 . "ARC")) (mapcar 'cons '(10 50 51 40) lst)))
)
)
) 自贡黄明儒 发表于 2016-9-22 08:36
输入units,有一个时针方向,不知道影响画弧方向否?
应该是不影响的,程序里面用的是向量叉乘法来确定顺逆时针 这个程序很好。 好算法。好,好,好。 输入units,有一个时针方向,不知道影响画弧方向否? 前生 发表于 2016-9-22 03:03
好算法。好,好,好。
谢谢支持 前生 发表于 2016-9-22 03:03
好算法。好,好,好。
谢谢滋磁! 这个算法不错。一直不想使用Command "arc" p1 p2 p3.个人感觉,能用entmake生成就用entmake生成。 陨落 发表于 2016-9-22 12:35
谢谢滋磁!
你是做什么方面的,我是做冲压模具的。
前生 发表于 2016-9-22 21:23
你是做什么方面的,我是做冲压模具的。
我是建筑结构的
页:
[1]
2