画两个相离圆的相切线
本帖最后由 guosheyang 于 2022-12-28 12:19 编辑给大家分享个画两相离圆的公切线代码,请大家测试反馈,谢谢!
; Function: Draw the common tangent of two separated circles
; yangguoshe(ygs-羊羊羊)2022.12.27
(defun c:tt(/ A1 A2 A22 B BB C C1 C2 CIR1 CIR2 D DD R1 R2)
(setqcir1(car(entsel "\n Click the first circle"))
**** Hidden Message *****
(defun acos(a);;;-1<=a<=1
(angle'(0 0)(list a(sqrt(- 1(* a a)))))
)
(defun makeline(p1 p2)
(entmakex(list'(0 . "line")(cons 10 p1)(cons 11 p2))))
(defun tt(e1 e2 / a c b r);;圆外公切线
(setq a(vl-sort(mapcar'(lambda(x)(mapcar'(lambda(y)(cdr(assoc y x)))'(40 10)))
(mapcar'entget(list e1 e2)))
(function(lambda(a b)(<(car a)(car b)))))
r(mapcar'car a)
c(mapcar'cadr a)
b(apply'angle c)
a(acos(/(*(car r)(apply'- r))(*(car r)(apply'distance c)))))
(mapcar(function(lambda(x)(apply'makeline(mapcar(function(lambda(y z)(polar y(+(* a x)b)z)))c r))))'(1 -1))
)
很多年前推算外公切线的,没推导内公切线
(defun c:tt( / e1 e2)
(while(and(setq e1(ssget":E:S"'((0 . "CIRCLE"))))
(setq e1(ssname e1 0))
(setq e2(ssget":E:S"'((0 . "CIRCLE"))))
(setq e2(ssname e2 0))
(tt e1 e2))))
) 本帖最后由 liunian0524 于 2022-12-27 20:03 编辑
查看隐藏内容,我一直在用的:
(defun c:1c()(princ"直线相切于圆/圆弧")(setvar "cmdecho" 0) (command "line" "tan" pause "tan" pause "")(princ))
(defun c:2c()(princ"快速圆三相切")(setvar "cmdecho" 0)(command "circle" "3p" "tan" pause "tan" pause "tan" pause)(princ))
为什么你的最后登录时间是 1970-1-1? 本帖最后由 tigcat 于 2022-12-27 15:14 编辑
看看楼主的办法
公切线有4条,两条外公切线,两条内公切线。
(command "line" "_tan" pause "_tan" pause "") 支持一下,学习学习 晨曦CAD 发表于 2022-12-27 14:51
为什么你的最后登录时间是 1970-1-1?
我也不知道 系统自动设置的 666666666666666 看看{:1_1:} 神啊,终于让我找到了! :handshake:handshake:handshake:handshake:handshake