找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1307|回复: 5

[求助] 求教各位老师,怎么用LISP写一个求两个圆的交点的代码

[复制链接]
发表于 2021-8-14 16:33:05 | 显示全部楼层 |阅读模式

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

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

×
最近刚学lisp,想用程序画一个已知三边长的任意三角形,我的思路是先画L1直线,然后在L1直线的起点跟终点分别画半径为L2和L3的圆,然后找到两个圆的交点,然后把3个点连起来,再把圆删掉就完成了,现在就是求两个圆的交点的程序不知道怎么写,希望各位老师能提点我一下,谢谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 586个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 2963个

财富等级: 家财万贯

发表于 2021-8-28 16:28:12 | 显示全部楼层
  1. ;声明:(原创)调用或修改请保留信息行
  2. ;求两个曲线的交点表. ----无痕.2004.2
  3. ;调用方法:(x@_int (car (entsel)) (car(entsel)))
  4. (defun x@_int (e1 e2 / ptlst ptints)
  5.     (setq obj1 (vlax-ename->vla-object e1)
  6.         obj2 (vlax-ename->vla-object e2)
  7.               ptlst (xl-div (vlax-invoke obj1 'IntersectWith obj2 0) 3))
  8.             ;;此版本未提供2dpolyline正确的自身交点过滤方法,请自行加入.
  9. )
  10. ;按项数分割列表.
  11. (defun xl-div (lst x / lst2)
  12.     (foreach n lst
  13.         (if (and    lst2 (/= x (length (car lst2))))      
  14.         (setq lst2 (cons (append (car lst2) (list n)) (cdr lst2)))
  15.         (setq lst2 (cons (list n) lst2))
  16.         )
  17.     )(reverse lst2)
  18. )




  19. (defun x_inters (ename1 ename2)
  20.   (setq ptlst (vlax-safearray->list   (vlax-variant-value     (vla-intersectwith (vlax-ename->vla-object ename1) (vlax-ename->vla-object ename2) acextendnone)   )
  21.   )
  22.   )
  23.   (if (> (length ptlst) 3)   (progn (setq #ptlst '())   (repeat (/ (length ptlst) 3)     (setq x   (car ptlst)    ptlst  (cdr ptlst)    y   (car ptlst)    ptlst  (cdr ptlst)    z   (car ptlst)    ptlst  (cdr ptlst)    pt0   (list x y z)    #ptlst (cons pt0 #ptlst)     )   )   (setq #ptlst (reverse #ptlst))   )
  24.   )
  25.   #ptlst
  26. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2021-10-11 14:52:51 | 显示全部楼层
  1. (defun c:triangle (/ a aa b bb c cc code pt1 pt2 pt3)
  2.   (setq        pt1  (getpoint "输入三角形的插入点")
  3.         code T
  4.         )
  5.   (while code
  6.     (initget 7)
  7.     (setq a (getreal "输入三角形第1条边的长度"))
  8.     (initget 7)
  9.     (setq b (getreal "输入三角形第2条边的长度"))
  10.     (initget 7)
  11.     (setq c (getreal "输入三角形第3条边的长度"))
  12.     (if        (or (<= (+ a b) c) (<= (+ a c) b) (<= (+ c b) a))
  13.       (alert "输入的3条边长无法满足三角形的几何条件!")
  14.       (setq code nil)
  15.       )
  16.     )
  17.   (setq        pt2 (polar pt1 0.0 a)
  18.         aa  (* a a)
  19.         bb  (* b b)
  20.         cc  (* c c)
  21.         )
  22.   (cond
  23.     ((= (+ aa bb) cc)
  24.      (setq pt3 (polar pt2 1.5708 b))
  25.      )
  26.     ((> (+ aa bb) cc)
  27.      (setq code        (/ (- (+ aa cc) cc) (* 2 a))
  28.            pt3        (polar pt1 0.0 code)
  29.            code        (expt (- cc (* code code)) 0.5)
  30.            pt3        (polar pt3 1.5708 code)
  31.            )
  32.      )
  33.     (T
  34.      (setq code        (/ (- cc (+ aa bb)) (* 2 a))
  35.            pt3        (polar pt2 0.0 code)
  36.            code        (expt (- bb (* code code)) 0.5)
  37.            pt3        (polar pt3 1.5708 code)
  38.            )
  39.      )
  40.     )
  41.   (setq a (list pt1 pt2 pt3))
  42.   (entmake (append (list '(0 . "LWPOLYLINE")
  43.                          '(100 . "AcDbEntity")
  44.                          '(100 . "AcDbPolyline")
  45.                          (cons 90 3)
  46.                          '(70 . 1)
  47.                          )
  48.                    (mapcar '(lambda (pt) (cons 10 pt)) a)
  49.                    )
  50.            )
  51.   (princ)
  52.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2021-10-11 15:11:33 | 显示全部楼层
  1. ((> (+ aa bb) cc)
  2.      (setq code        (/ (- (+ aa cc) cc) (* 2 a))
  3.            pt3        (polar pt1 0.0 code)
  4.            code        (expt (- cc (* code code)) 0.5)
  5.            pt3        (polar pt3 1.5708 code)
  6.            )
  7.      )

这一段代码写错了,本来打算直接修改,系统却说有不合法参数,直接无语了,应该是
  1. ((> (+ aa bb) cc)
  2.      (setq code        (/ (- (+ aa cc) bb) (* 2 a))
  3.            pt3        (polar pt1 0.0 code)
  4.            code        (expt (- cc (* code code)) 0.5)
  5.            pt3        (polar pt3 1.5708 code)
  6.            )
  7.      )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 03:45 , Processed in 0.175840 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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