明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2685|回复: 41

[函数] 画两个相离圆的相切线

[复制链接]
发表于 2022-12-27 14:30 | 显示全部楼层 |阅读模式
本帖最后由 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)
(setq  cir1(car(entsel "\n Click the first circle"))
cir2(car(entsel "\n Click the second circle"))

        c1(trans(cdr(assoc 10(entget cir1)))cir1 0)

        r1(cdr(assoc 40(entget cir1)))

        c2(trans(cdr(assoc 10(entget cir2)))cir2 0)

        r2(cdr(assoc 40(entget cir2)))

        a1 (angle c1 c2)

        b  (- r1 r2)

        bb  (+ r1 r2)

        c  (distance c1 c2)

        d  (sqrt (abs(- (* c c) (* b b))) )

            a2 (atan d b)

        dd (sqrt (- (* c c) (* bb bb)))

        a22 (atan dd bb))

(DEFUN F(a xs xs2)

  (entmakex(list(cons 0 "LINE")(cons 10(polar c1(+ a1(* XS A)) r1))(cons 11(polar c2(+ XS2 a1 (* XS A))r2)))))

  (f a22 1 pi)

  (f a22 -1 pi)

  (f a2 1 0)

  (f a2 -1 0)

)



      



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-12-29 17:06 | 显示全部楼层
  1. (defun acos(a);;;-1<=a<=1
  2.   (angle'(0 0)(list a(sqrt(- 1(* a a)))))
  3.    )
  4. (defun makeline(p1 p2)
  5.   (entmakex(list'(0 . "line")(cons 10 p1)(cons 11 p2))))
  6. (defun tt(e1 e2 / a c b r);;圆外公切线
  7.   (setq a(vl-sort(mapcar'(lambda(x)(mapcar'(lambda(y)(cdr(assoc y x)))'(40 10)))
  8.                          (mapcar'entget(list e1 e2)))
  9.                   (function(lambda(a b)(<(car a)(car b)))))
  10.         r(mapcar'car a)
  11.         c(mapcar'cadr a)
  12.         b(apply'angle c)
  13.         a(acos(/(*(car r)(apply'- r))(*(car r)(apply'distance c)))))
  14.   (mapcar(function(lambda(x)(apply'makeline(mapcar(function(lambda(y z)(polar y(+(* a x)b)z)))c r))))'(1 -1))
  15.   )

很多年前推算外公切线的,没推导内公切线
(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))))

)
回复 支持 1 反对 0

使用道具 举报

发表于 2022-12-27 20:00 | 显示全部楼层
本帖最后由 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))
发表于 2022-12-27 14:51 | 显示全部楼层
为什么你的最后登录时间是 1970-1-1?
发表于 2022-12-27 14:58 | 显示全部楼层
本帖最后由 tigcat 于 2022-12-27 15:14 编辑

看看楼主的办法
公切线有4条,两条外公切线,两条内公切线。
(command "line" "_tan" pause "_tan" pause "")
发表于 2022-12-27 15:08 | 显示全部楼层
支持一下,学习学习
 楼主| 发表于 2022-12-27 15:19 | 显示全部楼层
晨曦CAD 发表于 2022-12-27 14:51
为什么你的最后登录时间是 1970-1-1?

我也不知道   系统自动设置的
发表于 2022-12-27 16:14 | 显示全部楼层
666666666666666
发表于 2022-12-27 19:15 | 显示全部楼层
神啊,终于让我找到了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-12 08:41 , Processed in 0.155369 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表