找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 607|回复: 1

[每日一码] 纯数学方法的两个圆相关的函数

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2019-1-8 10:14:24 | 显示全部楼层 |阅读模式

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

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

×
  1. ;;;圆和圆的交点
  2. (defun c_int_c (ce1 r1 ce2 r2 / dis a b)
  3.   ;;by w_kai
  4.   (setq dis (distance ce1 ce2))
  5.   (cond ((equal dis (+ r1 r2))
  6.          (list (polar ce1 (angle ce1 ce2) r1))
  7.         )
  8.         ((equal dis (abs (- r1 r2)))
  9.          (if (minusp (- r1 r2))
  10.            (list (polar ce2 (angle ce2 ce1) r2))
  11.            (list (polar ce1 (angle ce1 ce2) r1))
  12.          )
  13.         )
  14.         ((and (> dis (abs (- r1 r2))) (< dis (+ r1 r2)))
  15.          (setq a (/ (- (+ (* dis dis) (* r1 r1)) (* r2 r2)) (* 2. dis)))
  16.          (setq b (sqrt (- (* r1 r1) (* a a))))
  17.          (list (polar (polar ce1 (angle ce1 ce2) a)
  18.                       (+ (angle ce1 ce2) (/ pi 2))
  19.                       b
  20.                )
  21.                (polar (polar ce1 (angle ce1 ce2) a)
  22.                       (- (angle ce1 ce2) (/ pi 2))
  23.                       b
  24.                )
  25.          )
  26.         )
  27.   )
  28. )



  1. ;;;
  2. ;;; 三点圆函数
  3. (defun 3pcircle (p0 p1 p2 / x0 y0 x1 y1 x2 y2 dx1 dy1 dx2 dy2 d 2d c1 c2 ce)
  4.   ;;by highflybird
  5.   (setq x0  (car p0)
  6.         y0  (cadr p0)
  7.         x1  (car p1)
  8.         y1  (cadr p1)
  9.         x2  (car p2)
  10.         y2  (cadr p2)
  11.         dx1 (- x1 x0)
  12.         dy1 (- y1 y0)
  13.         dx2 (- x2 x0)
  14.         dy2 (- y2 y0)
  15.   )
  16.   (setq d (- (* dx1 dy2) (* dx2 dy1)))
  17.   (if (/= d 0.0)
  18.     (progn (setq 2d (+ d d)
  19.                  c1 (+ (* dx1 (+ x0 x1)) (* dy1 (+ y0 y1)))
  20.                  c2 (+ (* dx2 (+ x0 x2)) (* dy2 (+ y0 y2)))
  21.                  ce (list (/ (- (* c1 dy2) (* c2 dy1)) 2d)
  22.                           (/ (- (* c2 dx1) (* c1 dx2)) 2d)
  23.                     )
  24.            )
  25.            (list ce (distance ce p0) (list p0 p1 p2))
  26.     )
  27.   )
  28. )


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

已领礼包: 40个

财富等级: 招财进宝

发表于 2019-1-8 10:30:51 | 显示全部楼层
使用ARX的几何库,就简洁的多

1、两圆交点

  1. (defun c_int_c (cen1 r1 cen2 r2 / g1 g2 mint ints)
  2.   (and (setq g1 (xdge::constructor "kcircarc3d" cen1 '(0 0 1) r1)) ;构建圆1几何实体
  3.        (setq g2 (xdge::constructor "kcircarc3d" cen2 '(0 0 1) r2)) ;构建圆2几何实体
  4.        (setq mint (xdge::constructor "kcurvecurveint3d" g1 g2)) ;构建求交几何实体
  5.        (setq ints (xdge::getpropertyvalue mint "intpoints"))
  6.   )
  7.   (xdrx_object_release g1 g2 mint)
  8.   ints
  9. )



2、三点圆
  1. (defun 3pcircle (p0 p1 p2 / data)
  2.   (and (setq g1 (xdge::constructor "kcircarc3d" p0 p1 p2)) ;构建圆1几何实体
  3.        (setq data (append (xdge::getpropertyvalue g1 "center" "radius") (list (list p0 p1 p2))))
  4.   )
  5.   (xdrx_object_release g1)
  6.   data
  7. )


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 20:11 , Processed in 0.350440 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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