找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2268|回复: 11

[求助] 求教 CAD 画圆弧方法 (已知圆上2点和半径)

[复制链接]
发表于 2014-9-16 08:40:48 | 显示全部楼层 |阅读模式

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

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

×
已知圆上 两点 A, B 以及R,求2个 圆心,并画圆弧。请问 圆心 该如何算,谢谢 。有没有现成的代码 ? 如果直接用公式算 太复杂了,还有一种方法是转换坐标系简化计算公式。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-9-16 13:29:52 | 显示全部楼层
QQ截图20140916132828.png

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

使用道具 举报

 楼主| 发表于 2014-9-18 08:24:28 | 显示全部楼层
好的 谢谢你  我在编一下

点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-9-18 08:36:21 | 显示全部楼层
本帖最后由 csharp 于 2014-9-18 09:28 编辑
yarana 发表于 2014-9-18 08:24
好的 谢谢你  我在编一下


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

使用道具 举报

发表于 2014-9-19 22:19:49 | 显示全部楼层
我也想学 有时候施工现场 的不规则圆弧 我们怎么去画了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-9-20 00:21:55 | 显示全部楼层
本帖最后由 newer 于 2014-9-20 00:23 编辑

呵呵,简单的看了看XDGE几何库,你要用VBA的画,自己看着改。

xdge_circle_tow.gif

  1. (defun c:tt ()
  2.   (if (and
  3.         (setq p1 (getpoint "\n第一点<推出>:"))
  4.         (setq p2 (getpoint p1 "\n第二点<退出>:"))
  5.         (setq len (/ (distance p1 p2) 2.0))
  6.       )
  7.     (progn
  8.       (setq tf t)
  9.       (while (and
  10.                tf
  11.                (setq r (getreal (strcat "\n输入半径(大于" (rtos len 2 2) ") <退出>:")))
  12.              )
  13.         (if (< r (/ len 2.0))
  14.           (princ "\n半径无效!")
  15.           (setq tf nil)
  16.         )
  17.       )

  18.       (setq an (xdrx_math_acos (/ len r))
  19.             an1 (+ (angle p1 p2) an)
  20.             an2 (- (angle p1 p2) an)
  21.             cen1 (polar p1 an1 r)
  22.             cen2 (polar p1 an2 r)
  23.       )
  24.       (setq ge (xdge::constructor "kCircArc3d" cen1 '(0.0 0.0 1.0) r))
  25.       (xdrx_setmark)
  26.       (xdge::entity:make ge)
  27.       (xdrx_line_make p1 p2)
  28.       (xdrx_line_make p1 cen1)
  29.       (xdrx_line_make p2 cen1)
  30.       (xdrx_entity_setcolor (xdrx_getss) 1)

  31.       (setq ge (xdge::constructor "kCircArc3d" cen2 '(0.0 0.0 1.0) r))
  32.       (xdrx_setmark)
  33.       (xdge::entity:make ge)
  34.       (xdrx_line_make p1 p2)
  35.       (xdrx_line_make p1 cen2)
  36.       (xdrx_line_make p2 cen2)
  37.       (xdrx_entity_setcolor (xdrx_getss) 2)

  38.     )
  39.   )
  40.   (princ)
  41. )


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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-9-20 07:03:25 来自手机 | 显示全部楼层
本帖最后由 csharp 于 2014-9-20 07:14 编辑

都知道了就不绕弯子直接Make Db

用Ge库的话只需计算出第三点然后构造三点弧再由弧取center
r -sqrt (r * r - d* d/4) ,两点中点向两侧中垂线找这个距离点,然后三点构造kCircArc3d
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-9-20 07:58:18 | 显示全部楼层

完全利用 Ge  库
  1. (defun c:tt (/ p1 p2 pc ge1 r ge2 gcc n p pc1 pc2)
  2.   (if (and (setq p1 (getpoint "\nFirst Point: "))
  3.            (setq p2 (getpoint p1 "\nSecond Point: "))
  4.            (setq r (getdist p1 "\nRadius: "))
  5.            (setq ge1 (xdge::constructor "kCircArc3d" p1 '(0. 0. 1.) r))
  6.            (setq ge2 (xdge::constructor "kCircArc3d" p2 '(0. 0. 1.) r))
  7.            (setq gcc (xdge::constructor "kCurveCurveInt3d" ge1 ge2))
  8.            (setq n (xdge::getpropertyvalue gcc "numIntPoints"))
  9.       )
  10.     (progn
  11.       (cond
  12.         ((zerop n) (princ "\nNo Circle!"))
  13.         ((= n 1);_相切时numIntPoints 为 1 ,但 API的 intPoint 为 nil 需改进
  14.          (xdrx_point_make (xdrx_line_midp p1 p2))
  15.          (xdrx_circle_make (xdrx_line_midp p1 p2) r)
  16.         )
  17.         ((= n 2)
  18.          (setq pc1 (xdge::getpropertyvalue gcc "intPoint" 0)
  19.                pc2 (xdge::getpropertyvalue gcc "intPoint" 1)
  20.          )
  21.          (xdrx_point_make pc1)
  22.          (xdrx_point_make pc2)
  23.          (xdrx_circle_make pc1 r)
  24.          (xdrx_circle_make pc2 r)
  25.         )
  26.         (t)
  27.       )
  28.     )
  29.   )
  30.   (princ)
  31. )

点评

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

使用道具 举报

发表于 2014-9-20 09:54:15 | 显示全部楼层

这样也不错
  1. (defun c:tt (/ p1 p2 radius dis circle1 circle2 intpts pt1 pt2)
  2.   (if (and (setq p1 (getpoint "\nFirst Point: "))
  3.            (setq p2 (getpoint p1 "\nSecond Point: "))
  4.            (setq radius (getdist p1 "\nRadius: "))
  5.            (setq dis (distance p1 p2))
  6.            (>= radius (/ dis 2.))
  7.       )
  8.     (if        (equal radius (/ dis 2.0) 1e-8)
  9.       (vlax-invoke (fy:acspace) 'AddCircle (fy:midp p1 p2) radius)
  10.       (progn
  11.         (setq circle1 (vlax-invoke (fy:acspace) 'AddCircle p1 radius)
  12.               circle2 (vlax-invoke (fy:acspace) 'AddCircle p2 radius)
  13.               intpts  (vlax-invoke circle1 'IntersectWith circle2 0)
  14.               pt1     (list (car intpts) (cadr intpts) 0.)
  15.               pt2     (list (nth 3 intpts) (nth 4 intpts) 0.)
  16.         )
  17.         (vlax-invoke circle1 'Move p1 pt1)
  18.         (vlax-invoke circle2 'Move p2 pt2)
  19.       )
  20.     )
  21.   )
  22.   (princ)
  23. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-9-20 12:56:22 | 显示全部楼层
eachy 发表于 2014-9-20 07:58
完全利用 Ge  库

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

使用道具 举报

 楼主| 发表于 2014-9-22 21:01:43 | 显示全部楼层
太高深了。。。GE库。。哪里调出来的 我只会用VBA编:'(
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 12:33 , Processed in 0.429379 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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