找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 17087|回复: 1
打印 上一主题 下一主题

请问在LISP中如何判断一条直线与一段圆弧或椭圆弧的交点?

[复制链接]
跳转到指定楼层
1
发表于 2005-11-29 15:00:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

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

x
请问在LISP中如何判断一条直线与一段圆弧或椭圆弧的交点?

[ 本帖最后由 SageShen 于 2005-11-29 07:38 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-11-29 16:36:35 | 只看该作者
info:
https://www.mjtd.com/bbs/dispbbs ... ;ID=8719&page=1

;;
;; Get all nodes of the LWPolyline, Polyline.
;;
(defun GetListOfPline (EntityName / SSE_Pline N newEntityName)
  (setq SSE_Pline (entget EntityName))
  (setq LastList nil)
  (if (= (cdr (assoc 0 SSE_Pline)) "LWPOLYLINE")
      (progn
        (setq LastList (LIST (LIST 0 0)))
        (setq N 0)
        (while (/= (nth N SSE_Pline) nil)
               (if (= (car (nth N SSE_Pline)) 10)
                   (setq LastList (append LastList (list (list (cadr (nth N SSE_Pline)) (caddr (nth N SSE_Pline)) )) ))
               )
               (setq N (+ N 1))
        )
        (setq LastList (cdr LastList))
      )
  )
  (if (= (cdr (ASSOC 0 SSE_Pline)) "POLYLINE")
      (PROGN
        (setq LastList (list (list 0 0)))
        (setq newEntityName (entnext EntityName))
        (while (= (cdr (assoc 0 (entget newEntityName))) "VERTEX")
               (setq LastList (append LastList (list (list (cadr (assoc 10 (entget newEntityName))) (caddr (assoc 10 (entget newEntityName))) ))))
               (setq newEntityName (entnext newEntityName))
        )
        (setq LastList (cdr LastList))
      )
  )
  (setq LastList LastList)
);_defun

;;
;; main function
;;
(defun c:getInsPtOfPl ( / ent_name1 pt_list1 ent_name2 pt_list2 i j pta0 pta1 ins_pt pt_ins_list)
  (setq ent_name1 (car (entsel "\nSelect first entity:")))
  (setq pt_list1 (GetListOfPline ent_name1))
  (setq ent_name2 (car (entsel "\nSecond entity:")))
  (setq pt_list2 (GetListOfPline ent_name2))

  (setq i 1 j 1)
  (setq pta0 (nth 0 pt_list1))
  (while (setq pta1 (nth i pt_list1))
    (setq ptb0 (nth 0 pt_list2))
    (while (setq ptb1 (nth j pt_list2))
      (if (and (setq ins_pt (inters pta0 pta1 ptb0 ptb1 t))
        (not (member ins_pt pt_ins_list))
   )
(progn
   (setq pt_ins_list (append pt_ins_list (list ins_pt)))
)
      );_if
      (setq ptb0 ptb1)
      (setq j (+ j 1))
    );_while
    (setq j 1)
    (setq pta0 pta1)
    (setq i (+ i 1))
  );_while
  pt_ins_list
);_defun
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-2-1 00:46 , Processed in 0.030648 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

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