明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9042|回复: 17

[基础] [求助]如何画出圆弧的两个切线

    [复制链接]
发表于 2010-5-29 18:26:00 | 显示全部楼层 |阅读模式

已知一个多段线的圆弧,如何画出切线部分?(蓝色的两条直线),请高人给出lisp,多谢

本帖子中包含更多资源

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

x
发表于 2023-10-3 19:33:29 | 显示全部楼层
正是我想要的,赞一个
 楼主| 发表于 2010-5-29 18:46:00 | 显示全部楼层

给点帮助

;;;
;;;选择并计算曲线参数函数DimSelqx
;;;返回值:曲线参数(alfa[弧度] R[mm])
;;;
(defun DimSelqx( / wh ss ssLen i alfa R Ename vdata N p1 p2 bulge alfai XL Ri)

  (setq wh 1  ss nil)
  (while (and (= wh 1) (setq ss (ssget '((0 . "LWPOLYLINE")))) )
     (setq ssLen (sslength ss))
     (setq i 0  wh 0  R 0  alfa 0)
     (while (and (= wh 0) (< i ssLen))
        (setq Ename (ssname ss i))
        (setq vdata (entget Ename))
        (setq N (length vdata))
        (setq p1 (cdr (nth (- N 9) vdata))       ;第一个顶点
              p2 (cdr (nth (- N 5) vdata)))      ;第二个顶点
        (setq bulge (cdr (nth (- N 6) vdata)))   ;第一个顶点凸度
        (if (/= bulge 0)                    
           (progn (setq alfai (* 4 (atan (abs bulge)))          
                        XL (distance p1 p2)                         
                        Ri (ccfix (/ (/ XL 2) (sin (/ alfai 2))) 0))
                   (if (and (/= R Ri) (/= i 0))
                      (progn (redraw Ename 3)
                             (alert "曲线半径不同,请重新选择!")
                             (redraw Ename 4)
                             (setq wh 1)
                      )
                      (setq alfa (+ alfai alfa)   R  Ri)
                   )
           )
           (progn (redraw Ename 3)
                  (alert "虚显的巷道是直线,请重新选择!")
                  (redraw Ename 4)
                  (setq wh 1)
           )
        )
        (setq i (1+ i))
     )
  )
  (if (not ss) (exit) )
  (setq ss nil)
  
  (list alfa R)

);End DimSelqx

 楼主| 发表于 2010-5-31 08:47:00 | 显示全部楼层
沉的好快,自己顶顶,有哪位大侠给指点一下啊
发表于 2010-5-31 15:48:00 | 显示全部楼层

求出圆心,然后求出圆心和切点的角度,然后。。。。。出来了吧

 楼主| 发表于 2010-5-31 16:31:00 | 显示全部楼层

楼上的,我不会做啊,能给个lisp吗

发表于 2010-5-31 18:02:00 | 显示全部楼层
我这有一个程序,你可试试
  1. ;虚拟交点的绘制
  2. (defun C:XNJD (/ p1 p2 p3 p4 p5)
  3.   (setvar "cmdecho" 0)
  4.   (setq p1 (entsel "\n选取一段圆弧: "))
  5.   (if p1
  6.     (progn (setq p0 (entget (car p1)))
  7.     (setq p1 (cdr (assoc 0 p0)))
  8.     )
  9.   )
  10.   (if (/= p1 "ARC")
  11.     (prompt "\n选择的不是圆弧,请再试...")
  12.   )
  13.   (setq p1 (polar (cdr (assoc 10 p0))
  14.     (cdr (assoc 50 p0))
  15.     (cdr (assoc 40 p0))
  16.     )
  17. p2 (polar (cdr (assoc 10 p0))
  18.     (cdr (assoc 51 p0))
  19.     (cdr (assoc 40 p0))
  20.     )
  21. p3 (polar p1
  22.     (+ (/ pi 2) (cdr (assoc 50 p0)))
  23.     (cdr (assoc 40 p0))
  24.     )
  25. p4 (polar p2
  26.     (+ (/ pi 2) (cdr (assoc 51 p0)))
  27.     (cdr (assoc 40 p0))
  28.     )
  29. p5 (inters p1 p3 p2 p4 nil)
  30.   )
  31.   (if (not p5)
  32.     (prompt "\n没有交点...")
  33.     (progn
  34.       (if (> (distance p1 p5)
  35.       (* 2 (getvar "dimscale") (getvar "dimexo"))
  36.    )
  37. (command
  38.    "_.line"
  39.    (polar p1
  40.    (angle p1 p5)
  41.    (* (getvar "dimexo") (getvar "dimscale"))
  42.    )
  43.    (polar p5
  44.    (angle p1 p5)
  45.    (* (getvar "dimexe") (getvar "dimscale"))
  46.    )
  47.    ""
  48.    "_.line"
  49.    (polar p2
  50.    (angle p2 p5)
  51.    (* (getvar "dimexo") (getvar "dimscale"))
  52.    )
  53.    (polar p5
  54.    (angle p2 p5)
  55.    (* (getvar "dimexe") (getvar "dimscale"))
  56.    )
  57.    ""
  58. )
  59. (command
  60.    "_.line"
  61.    (polar p1 (angle p1 p5) (* 0.5 (distance p1 p5)))
  62.    (polar p5
  63.    (angle p1 p5)
  64.    (* (getvar "dimexe") (getvar "dimscale"))
  65.    )
  66.    ""
  67.    "_.line"
  68.    (polar p2 (angle p2 p5) (* 0.5 (distance p2 p5)))
  69.    (polar p5
  70.    (angle p2 p5)
  71.    (* (getvar "dimexe") (getvar "dimscale"))
  72.    )
  73.    ""
  74. )
  75.       )
  76.     )
  77.   )
  78.   (princ)
  79. )
发表于 2010-6-1 00:23:00 | 显示全部楼层

一个偏门的方法:

(command "fillet" "r" 0. "p" 选pl线)

 

 楼主| 发表于 2010-6-1 08:27:00 | 显示全部楼层

楼上的偏方倒是可以,但是,我要的是另外两条切线,用倒角的话会延长这两条线,而不是画两条新的切线,不过还是非常感谢你哦,这个思路也行,就是通过两条边画这个焦点切线

 楼主| 发表于 2010-6-1 08:30:00 | 显示全部楼层
感谢xianaihua问题是你的针对是圆弧,我这个是多段线构成的圆弧,怎么样修改一下你的程序呢,还有你的程序实际使用时,圆弧下凸就会有多余的部分,p3点计算出错
发表于 2010-6-1 08:52:00 | 显示全部楼层
以上的代码不错啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 07:23 , Processed in 0.197527 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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