找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 629|回复: 5

[求助] [求助]:过两点并与另一条线相切的圆

[复制链接]
发表于 2005-5-29 17:10:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
过两点并与另一条线相切的圆”,对这个类似几何的题,征求解法!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-5-29 18:04:18 | 显示全部楼层
(command "circle" "3p" "end" pause "end" pause "tan" pause)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-29 18:09:54 | 显示全部楼层
简单明了,不负“狂刀”的大名!多谢!
如果用几何方法怎么解决呢?有点钻牛角了,呵呵……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

发表于 2005-6-1 00:56:10 | 显示全部楼层
纯几何方法解决:


  1. ;;By Xiao_longxin
  2. ;;po_star 直线起点           po_end 直线终点
  3. ;;p1、p2 所要求的圆上两点


  4. (defun errexit (s)
  5.   (command "._undo" "_E")
  6.   (princ "\nError:  ")
  7.   (princ s)
  8. )

  9. (defun twopo_line_qieyuan (po_star    po_end         p1            p2
  10.                            /              cr_list         jd1 jd2   ang_zxcz
  11.                            ang1              ang2         ang3            ang4
  12.                            dist1      dist2         p1_zx            p2_zx
  13.                            p1p2              cr_pt         cr_r            ent
  14.                            oldcmdecho oldosmode bl_gd
  15.                           )

  16.   ;;(setq po_star (getpoint))
  17.   ;;(setq po_end (getpoint))
  18.   ;;(setq p1 (getpoint))
  19.   ;;(setq p2 (getpoint))
  20.   ;;(command "point" po_star)
  21.   ;;(command "point" po_end)
  22.   ;;(command "point" p1)
  23.   ;;(command "point" p2)
  24.   ;;(command "pline" po_star po_end "")

  25.   (setq oldcmdecho (getvar "cmdecho"))
  26.   (setvar "cmdecho" 0)
  27.   (setq oldosmode (getvar "osmode"))
  28.   (setvar "osmode" 0)

  29.   (setq ang1 (angle po_star po_end))        ;直线的方位角
  30.   (setq ang2 (angle p1 p2))                ;二点的方位角
  31.   (setq ang_zxcz (rem (+ ang1 (/ pi 2)) (* 2 pi))) ;与直线垂直的方位角

  32.   ;;求p1点与直线的垂距,以此判断是否在直线上
  33.   (setq jd1 (polar p1 ang_zxcz 100))
  34.   (setq jd1 (inters po_star po_end p1 jd1 nil))
  35.   (setq dist1 (distance p1 jd1))
  36.   (setq ang3 (angle jd1 p1))
  37.   (if (< dist1 0.001)
  38.     (setq p1_zx t)
  39.   )
  40.   ;;求p2点与直线的垂距,以此判断是否在直线上
  41.   (setq jd2 (polar p2 ang_zxcz 100))
  42.   (setq jd2 (inters po_star po_end p2 jd2 nil))
  43.   (setq dist2 (distance p2 jd2))
  44.   (setq ang4 (angle jd2 p2))
  45.   (if (< dist2 0.001)
  46.     (setq p2_zx t)
  47.   )
  48.                                         ;判断直线是否在两点间
  49.   (if (and (> (abs (- ang3 ang4)) 0.00000001)
  50.            (and (not p2_zx) (not p1_zx))
  51.       )
  52.     (setq p1p2 t)
  53.   )

  54.   (if (or p1p2 (and p2_zx p1_zx))
  55.     (progn                                ;如两点都在线上则中止程序
  56.       (prompt "\n两点在直线上或者点在直线两边,没有切圆")
  57.       (setvar "cmdecho" oldcmdecho)
  58.       (setvar "osmode" oldosmode)
  59.       (setq pr_list nil)
  60.     )
  61.     (progn
  62.       (cond
  63.         ((or (< (abs (- ang1 ang2)) 0.000005)
  64.              (and (< (abs (- ang1 ang2)) (+ pi 0.000005))
  65.                   (> (abs (- ang1 ang2)) (- pi 0.000005))
  66.              )
  67.          )                                ;p1、p2点的连线与直线平行
  68.          (setq dist1 (/ (distance p1 p2) 2))
  69.          (setq jd1 (polar p1 ang2 dist1))
  70.          (setq jd2 (polar jd1 ang_zxcz 100))
  71.          (setq jd1 (inters jd1 jd2 po_star po_end nil))
  72.          (command "._circle" "3p" p1 p2 jd1)
  73.          (setq ent (entget (entlast)))
  74.          (setq cr_pt (cdr (assoc 10 ent)))
  75.          (setq cr_r (cdr (assoc 40 ent)))
  76.          (setvar "cmdecho" oldcmdecho)
  77.          (setvar "osmode" oldosmode)
  78.          (setq cr_list (list cr_pt cr_r))
  79.         )                                ;end   p1、p2点的连线与直线平行
  80.         ((or p2_zx p1_zx)                ;p1、p2点有一点在直线上
  81.          (if p1_zx
  82.            (progn
  83.              (setq jd1 p1)
  84.              (setq jd2 p2)
  85.            )
  86.            (progn
  87.              (setq jd1 p2)
  88.              (setq jd2 p1)
  89.            )
  90.          )
  91.          (setq p1 (polar jd1 ang1 100))
  92.          (if (= 100 (setq dist2 (distance jd2 p1)))
  93.            (progn
  94.              (setq p1 (polar jd1 ang1 200))
  95.              (setq dist2 (distance p1 jd2))
  96.            )
  97.          )
  98.          (setq dist1 (distance p1 jd1))
  99.          (setq dist1 (/ (* dist1 dist1) dist2))
  100.          (setq ang3 (angle p1 jd2))
  101.          (setq p1 (polar p1 ang3 dist1))
  102.          (command "._circle" "3p" jd1 jd2 p1)
  103.          (setq ent (entget (entlast)))
  104.          (setq cr_pt (cdr (assoc 10 ent)))
  105.          (setq cr_r (cdr (assoc 40 ent)))
  106.          (setvar "cmdecho" oldcmdecho)
  107.          (setvar "osmode" oldosmode)
  108.          (setq cr_list (list cr_pt cr_r))
  109.         )                                ;end  p1、p2点有一点在直线上
  110.         (t                                ;一般情况
  111.          (setq jd1 (inters po_star po_end p1 p2 nil))
  112.          (setq dist1 (distance p1 jd1))
  113.          (setq dist2 (distance p2 jd1))
  114.          (setq dist1 (sqrt (* dist1 dist2)))
  115.          (if (or (< (abs (- ang_zxcz ang2)) 0.000000005)
  116.                  (and (< (abs (- ang_zxcz ang2)) (+ pi 0.000000005))
  117.                       (> (abs (- ang_zxcz ang2)) (- pi 0.000000005))
  118.                  )
  119.              )
  120.            (progn
  121.              (setq ang1 (angle jd1 po_star))
  122.              (setq jd2 (polar jd1 ang1 dist1))
  123.              (command "._circle" "3p" jd2 p2 p1)
  124.              (setq ent (entget (entlast)))
  125.              (setq cr_pt (cdr (assoc 10 ent)))
  126.              (setq cr_r (cdr (assoc 40 ent)))
  127.              (setq cr_list (list cr_pt cr_r))
  128.              (setq ang1 (+ ang1 pi))
  129.              (setq jd2 (polar jd1 ang1 dist1))
  130.              (command "._circle" "3p" jd2 p2 p1)
  131.              (setq ent (entget (entlast)))
  132.              (setq cr_pt (cdr (assoc 10 ent)))
  133.              (setq cr_r (cdr (assoc 40 ent)))
  134.              (setvar "cmdecho" oldcmdecho)
  135.              (setvar "osmode" oldosmode)
  136.              (setq cr_list (append cr_list (list cr_pt cr_r)))
  137.            )
  138.            (progn
  139.              (setq ang1 (angle jd1 jd2))
  140.              (setq jd2 (polar jd1 ang1 dist1))
  141.              (command "._circle" "3p" jd2 p2 p1)
  142.              (setq ent (entget (entlast)))
  143.              (setq cr_pt (cdr (assoc 10 ent)))
  144.              (setq cr_r (cdr (assoc 40 ent)))
  145.              (setvar "cmdecho" oldcmdecho)
  146.              (setvar "osmode" oldosmode)
  147.              (setq cr_list (list cr_pt cr_r))
  148.            )
  149.          )                                ;end if
  150.         )                                ;end 一般情况
  151.       )
  152.     )
  153.   )
  154. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-1 01:32:38 | 显示全部楼层
利用以上程序,可行:
[php]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:test ()
  (setq        pt1 (getpoint "\n线端点1 : ")
        pt2 (getpoint "\n线端点2 : ")
        pt3 (getpoint "\n点1 : ")
        pt4 (getpoint "\n点2 : ")
  )
  (twopo_line_qieyuan pt1 pt2 pt3 pt4)
  (princ)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

发表于 2005-6-1 09:11:39 | 显示全部楼层
请问版主,我如何把代码帖成你你这样子的php代码??
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 06:46 , Processed in 0.376921 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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