找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1047|回复: 3

[编程申请]:如何求直线与弧及圆的交点?

[复制链接]
发表于 2002-9-14 14:43:33 | 显示全部楼层 |阅读模式

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

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

×
如何求直线与弧及圆的交点?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-14 14:47:15 | 显示全部楼层

Re: [编程申请]:如何求直线与弧及圆的交点?

最初由 s-95 发布
[B]如何求直线与弧及圆的交点? [/B]


1、使用VL,利用ActiveX的实体求交interSectWith方法

2、使用XDRX_API,提供了好几个这个方面的函数,xdrx_getinters
    xdrx_entity_interSect.....

3、自己写方程,求解。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-9-14 16:14:38 | 显示全部楼层
推荐前两种,如果你装了xdrx_api,用第二种功能更强
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

发表于 2002-9-14 22:40:49 | 显示全部楼层
原来是准备写一个小的内部函数,后来。没了兴趣//所以是没有完成的函数,呵呵,
有几个地方也懒的再进行改了


;;;(defun c:xx ()
;;;  (prompt
;;;    "\n 直线与圆弧的交点的Lisp函数库_由奥沃工作室编辑<前生>..!"
;;;  )
;;;  (setq        fe nil
;;;        se nil
;;;  )
;;;  (setq fe (entsel "\n 请选取一个实体<直线,圆,圆弧>:..."))
;;;  (if fe
;;;    (setq se (entsel "\n 请选取另一个实体<直线,圆,圆弧>:..."))
;;;    (prompt "\n 第一个实体没有选择到,请重新选取")
;;;  )
;;;  (if (and fe se)
;;;    (oursbe)
;;;    (prompt "__程序已经退出!")
;;;  )
;;;)

;;;(defun oursbe ()
;;;  (setq        fetype nil
;;;        fename nil
;;;        setype nil
;;;        sename nil
;;;  )
;;;  (setq        fe (car fe)
;;;        se (cdr se)
;;;  )
;;;  (setq        fetype (cdr (assoc -1 (entget fe)))
;;;        fename (cdr (assoc 0 (entget fe)))
;;;        setype (cdr (assoc -1 (entget se)))
;;;        sename (cdr (assoc 0 (entget se)))
;;;  )
;;;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;my 为主程.
;;;my1 为一个交点.my2为第二个点
;;;(defun my (linen arcen kg)
(defun my_I (linen arcen)
  (setq        my1 nil
        my2 nil
  )
;;;该程序判断pt1点是否在由pt2,pt3为端点的直线上
  (defun js (pt1 pt2 pt3)
    (setq mypt nil)
    (if
;;;        (equal (- (+ (distance pt1 pt2) (distance pt1 pt3))
;;;                  (distance pt2 pt3)
;;;               )
;;;               0.005
;;;        )
      (<= (+ (distance pt1 pt2) (distance pt1 pt3))
          (distance pt2 pt3)
      )
       (progn
         (setq mypt pt1)
         (alert "\n 该点在直线上!")
       )
       (progn
         (alert "\n 该点是在直线的延伸线上!")
       )
    )
  )
;;; 计算直线与圆弧一个交点时的情况;;;
  (defun js1 ()
    (setq my1 (js pp ls le))
  )
;;; 计算直线与圆弧二个交点时的情况;;;
  (defun js2 ()
    (setq my1 (js pp ls le))
    (setq my2 (js pp ls le))
  )
;;;该程序判断p点是否arc这个圆上
  (defun js2js ()
    (setq my1 (js pp ls le))
    (setq my2 (js pp ls le))
  )
;;;该程序判断p点是否arc这个圆弧上
  (Defun pa (p arc)
    (setq earc nil
          pafs nil
          pafe nil
    )
    (setq earc (entget arc))
    (setq pafs (cdr (assoc 50 earc))        ;起点
          pafe (cdr (assoc 51 earc))        ;终点
          pc   (cdr (assoc 10 earc))
    )
    (setq paf (angle pc p))
    (if        (> pafe pafs)
      (progn
        (if (and (< paf pafe) (> paf pafs))
          (alert " 是一个实际的交点!")
          (alert " 是一个虚拟的交点!")
        )
      )
      (progn
        (if (and (< paf pafs) (> paf pafe))
          (alert " 是一个实际的交点!")
          (alert " 是一个虚拟的交点!")
        )
      )
    )
  )
;;;___________________________
  (defun al ()
    (setq afl nil
          l   nil
          al1 nil
          al2 nil
    )
    (setq afl (+ pi af))
    (setq l (distance ax pp))
    (setq l1 (sqrt (- (* ar ar) (* l l))))
    (setq al1 (polar pp af l1))
    (setq al2 (polar pp afl l1))
;;;    (setq l   nil l1  nil)
    (setq str "")
    (if        al1
      (setq str (strcat str (vl-prin1-to-string al1)))
    )
    (if        al2
      (setq str (strcat str "\n" (vl-prin1-to-string al2)))
    )
    (alert str)
  )
;;;___________________________
  (setq        pp  nil
        le  nil
        ls  NIL
        my1 nil
        my2 nil
  )
  (prompt "\n 直线与圆弧的交点的Lisp函数库")
  (prompt "\n _由奥沃工作室编辑..!")
;;;注:_____linen为直线的实体名
  (setq        ls (cdr (assoc 10 (entget linen)))
        le (cdr (assoc 11 (entget linen)))
  )
  (setq af (angle ls le))
  (setq        af1 (+ (* pi 0.5) af)
        af2 (+ (* pi 1.5) af)
  )
;;;  (setq arcen (Car arcen))
;;;注:_____arcen为圆弧的实体名
  (setq        ax (cdr (assoc 10 (entget arcen)))
        ar (cdr (assoc 40 (entget arcen)))
  )
  (setq        as nil
        ae nil
  )
  (setq        p1 (polar ax af1 ar)
        p2 (polar ax af2 ar)
  )
  (setq pp (inters p1 p2 ls le nil))
  (setq        d1 nil
        d2 nil
        d3 nil
  )
  (setq        d1 (distance p1 pp)
        d2 (distance p2 pp)
        d3 (distance p1 p2)
;;;        ddd 1
  )
  (if
    (equal 0 (- d3 d1 d2) 0.000005)
;;;    (> d3 (+ d1 d2))
     (progn
       (if (or (equal 0 (distance p1 pp) 0.005)
               (equal 0 (distance p2 pp) 0.005)
           )
         (progn
           (alert "直线与圆弧有一个交点")
                                        ;  (js1)
         )
         (progn
           (alert "直线与圆弧有二个交点")
           (al)
           (js2)
           (js2js)
         )
       )
     )
     (alert "直线与圆弧没有交点")
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 02:26 , Processed in 0.173599 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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