明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1035|回复: 8

[提问] 求 autolisp 圆外一点画两条切线 并且修剪切线间的一段圆弧~

[复制链接]
发表于 2015-9-16 07:22 来自手机 | 显示全部楼层 |阅读模式
求 autolisp 圆外一点画两条切线 并且修剪切线间的一段圆弧~
发表于 2015-9-16 08:13 | 显示全部楼层
若发帖者的目的仅仅是为求编写程序,则请到论坛“编程申请”板块发帖
Ref:
http://bbs.mjtd.com/thread-100603-1-1.html
 楼主| 发表于 2015-9-16 08:35 | 显示全部楼层
Andyhon 发表于 2015-9-16 08:13
若发帖者的目的仅仅是为求编写程序,则请到论坛“编程申请”板块发帖
Ref:
http://bbs.mjtd.com/thread-1 ...

我是需求解决办法·通过几何计算的点得到的线不准确·
发表于 2015-9-16 08:54 | 显示全部楼层
已知条件:已知圆、园外一已知点
算法:1、以已知圆的圆心和已知点的连线为直径生成圆
         2、求已知圆和生成圆的交点(即切点)
         3、连接交点和已知点
发表于 2015-9-16 08:56 | 显示全部楼层
...通过几何计算的点得到的线不准确...

请上图 指明准确点该是如何方合需求

发表于 2015-9-16 13:07 | 显示全部楼层
  1. ;; tt(圆外点画两条切线且修剪切线间圆弧)
  2. (defun c:tt ()
  3.   (setvar "osmode" 0)
  4.   (setq s1 (car (entsel "\n选择圆: "))
  5.         p1 (getpoint "\n基点<退出>: ")
  6.         p0 (cdr (assoc 10 (entget s1)))
  7.         rr (cdr (assoc 40 (entget s1)))
  8.         r1 (angle p1 p0)
  9.         p2 (polar p0 (+ r1 (* pi 0.5)) rr)
  10.         p3 (polar p0 (- r1 (* pi 0.5)) rr)
  11.         p4 (polar p0 (+ r1 pi) rr)
  12.   )
  13.   (command "line" p1 "tan" p2 "")
  14.   (setq s2 (entlast))
  15.   (command "line" p1 "tan" p3 "")
  16.   (setq s3 (entlast))
  17.   (command "trim"  "" (list s1 p4) "")
  18.   (princ)
  19. )
发表于 2015-9-16 14:15 | 显示全部楼层
  1. ;; tt(圆外点画两条切线且修剪切线间圆弧)
  2. (defun c:tt ()
  3.   (setq en (entsel "\n选择圆: "))
  4.   (setq p1 (getpoint "\n基点<退出>: "))
  5.   (command "line" "non" p1 "tan" (cadr en) "")
  6.   (command "mirror" (setq s1 (entlast)) "" "non" p1 "cen" (cadr en) "")
  7.   (command "trim" s1 (entlast) "" (list (car en) p1) "")
  8. )
 楼主| 发表于 2015-9-16 14:47 | 显示全部楼层
感谢大家!!半径与圆外点到圆心的连线 公式列错了··多算了一次。



  1. (defun c:qq ()
  2.         (setq o (getpoint "\n点取圆心点"))
  3.         (setq r (getdist "\n输入圆半径"))
  4.         ;(command "circle" o r "")
  5.         (setq m (getpoint "\n点取圆外一点"))
  6.                        
  7.         (setq om (distance o m));获得底边右侧点与圆心距离
  8.         (setq ang1 (angle o m));获得om角度
  9.         (setq cosa (/ r om));获得余切值
  10.         (setq jd1  (atan (/ (sqrt (- 1 (* cosa cosa))) cosa)));获得半径与om的弧度
  11.         (setq ang (+ ang1  jd1 ))
  12.         (setq qd1 (polar o ang r));获得切点1坐标
  13.         ;切点2获得
  14.         (setq ang2 (- ang1 jd1))
  15.         (setq qd2 (polar o ang2 r))
  16.         (command "line" m qd1 "")
  17.   (command "line" m qd2 "")
  18.         (command "arc" qd1 "c" o qd2 "")
  19.        
  20. (princ)       
  21. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 13:10 , Processed in 0.344916 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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