QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
楼主: q542748861
收起左侧

[已解决] 求助,,cad画这个图,, 画出来发现不相切!

[复制链接]
发表于 2011-4-1 17:58:10 | 显示全部楼层 来自: 中国浙江温州
三点画圆
1 f: U. X6 A+ p0 C- P都在线上捕捉切点就可以了啊
 楼主| 发表于 2011-4-2 07:11:31 | 显示全部楼层 来自: 中国湖南永州
你试试   再截图给我看看,然后把图放大看看有没有过切 26# 625070723
发表于 2011-4-2 09:17:37 | 显示全部楼层 来自: 中国浙江杭州
用2010约束可以画出来
QQ截图未命名.jpg

评分

参与人数 1三维币 +3 收起 理由
woaishuijia + 3 技术讨论

查看全部评分

发表于 2011-4-2 10:05:19 | 显示全部楼层 来自: 中国广东深圳
用2007试了一下,没画出
 楼主| 发表于 2011-4-2 17:08:18 | 显示全部楼层 来自: 中国湖南永州
大家注意下,,不要用2009以上的版本画  ; l8 C' W$ J8 s
   那样就没意思了!
发表于 2011-4-3 13:28:39 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。
$ [4 N3 O$ ]' W. o) d用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。
+ W' e/ A, S) t: x, f: t# N5 M如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。
发表于 2011-4-3 13:33:42 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。$ c1 M- {/ r. O+ r" a" k* K
D.JPG
发表于 2011-4-3 16:57:22 | 显示全部楼层 来自: 中国江苏扬州
应该只有唯一解,大圆直径78.78,小圆直径16.27
发表于 2011-4-4 13:11:05 | 显示全部楼层 来自: 中国安徽合肥
32# 12fzj   W7 V4 T1 t9 A( Y  |, N* H3 e3 E; h% K

4 ?: g$ l/ i: q; i- R& v  W应该只有唯一的解,下图是用“破衣”画的。# x9 x: r% n8 b
快照1.png
发表于 2011-8-11 23:11:58 | 显示全部楼层 来自: 中国江苏
我画的给大家分享一下,具体如下:
0 P3 e, y" @% Z2 Q  K- C1、画一条中心线,然后以中心为镜像轴作镜像,具体如下图:; ~. _! n) d3 W0 H4 {* W/ Q( G; ~
无标题1.jpg     无标题2.jpg
! e& b7 i+ P# l! E2 o0 x4 q: Y2、以中间位置画圆(用相切、相切、相切画),具体如下图:& N( H' o  B8 p, m; m# Q
无标题3.png 3 L; v& a% @1 F) T' u
3、用相切、相切、相切画其它两个圆,如下图:8 |* q* I. f( g1 _$ u# O
无标题4.jpg " O+ g1 U. `6 j) m; X  e
完成尺寸如下图:/ m0 Q& C% }! k6 C% W4 M/ |
无标题5.jpg
发表于 2011-8-15 19:48:18 | 显示全部楼层 来自: 中国浙江金华
35# 唐依依 % ~) g/ E. S' t8 q7 n; @# u
高手果然高手,不过这样的几何题最好给个证明,不然实在看着吃力
发表于 2011-8-19 10:34:55 | 显示全部楼层 来自: 日本
用的日语cad,很多功能不会用。
8 V3 p* t* y5 E% m  d附件内容自己看吧,pdf和cad是同一个图。# N. a0 ]+ J4 L
用的几何画法,cad只是辅助,理论上任何画图软件用这方法都行。
6 k* S( H& D' A0 {( @6 T% J* w另外,4边形是我随便画的,任何尺寸的4边形用这方法都能作出你想要的那1大2小圆。8 N. H; j7 c2 R4 S; q. f+ F8 s
就是比较花时间。

方法.pdf

240.43 KB, 下载次数: 24

画图法.dwg

43.6 KB, 下载次数: 1

发表于 2011-8-19 15:06:12 | 显示全部楼层 来自: 中国北京
35# 唐依依
2 p7 e2 q8 }! l) s' d7 N8 e% N1 @- {3 M  W$ ]: {+ B7 q& w) Y
唐总,你的这个做法应该不是正解,你把精度设置成四位看看,差很多哦~( f+ K6 U# w! u1 S
) @% P# R; A' R- Y& L6 q) ?) Y
不过想了很久除了用CAD的约束功能也没用其他方法做出来,% x; g7 \# b  m4 i: Z# h0 [( ?1 h
等待高手解决。
发表于 2011-8-19 15:55:53 | 显示全部楼层 来自: 日本
嚓~~~大圆没点到圆心,失误
, s- O3 j: b0 M/ Z9 E改正后的图附上,应该ok了。
4 D: v* ]* A' p' J$ l7 G2 o用这办法,就是手工图也能在有圆规等画图工具的辅助下作出想要的大小圆。

画图法.dwg

43.48 KB, 下载次数: 8

发表于 2011-8-19 21:13:49 | 显示全部楼层 来自: 中国江苏无锡
可以用二次开发工具编程解决啊!如autolisp等

评分

参与人数 1三维币 +3 收起 理由
woaishuijia + 3 技术讨论

查看全部评分

发表于 2011-8-24 08:46:54 | 显示全部楼层 来自: 中国陕西西安
希望有高手找出答案。这个图技巧性很强。
发表于 2011-8-24 10:07:29 | 显示全部楼层 来自: 中国江苏苏州
35# 唐依依
1 @' o+ y$ m  k& A: o; @. C39# sylpw
( \8 F7 Z/ t* H, [0 Y  N. C# S" f" A. F
35楼,39楼均是正解,我自己试过了,高手啊!佩服
发表于 2011-8-25 13:36:43 | 显示全部楼层 来自: 中国香港
与时俱进嘛,既然高版本的能画出来,为什么还要用低版本的呢?
发表于 2011-8-27 13:36:04 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-8-27 13:41 编辑
* p: l8 Y3 p) V; S
" {9 l* i, |6 J6 A5 V7 y从代数式看,本图应该没有二维几何画法.上面几位朋友提供的方法也只是比较接近结果而已.% r3 W- m" N4 S  A
这个图,对于2010及以上版本可以用参数方法画出;对于2009及以下版本,可以使用逼近法:包括轨迹法,精确选点法和编程法等等.4 ^$ {4 a: K2 }2 f* Y
下面着重讨论轨迹法和编程法
6 x: n) ~5 M4 r5 E9 p1 B, ?+ R一.轨迹法
& K) N. r1 m: _9 P: _/ e首先画出四边形.再在左下角和右上角用"相切,相切,半径"方法分别画一个半径为5的小圆,再用"三相切"方法画出与两个小圆和底部水平直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为8的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为10的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆.再用"三点"方法通过三个大圆的圆心画出轨迹圆.如图7 P0 J' g( s# ^; Q; l3 l
Untitled-1.gif
- W  r; y' `" x; @! J6 L删除图形上所有的圆,画出上下两直线的角平分线.再以角平分线和轨迹圆交点为圆心画出与上下两直线均相切的大圆,再用"三相切"方法画出两个小圆.如图
& K% J* b  n) ]  B Untitled-2.gif ' K* Z7 w8 O# ?( q  \
用"特性"管理器分别查看两小圆的半径,结果分别为8.1363和8.1366.已经很接近了.
1 X" n; d6 F5 ^) P9 n如果认为精度不理想,可以用更接近这个结果的半径值重复上面的过程,就可以得到更精确的结果.
* }# P* J* K& t' P9 n% z6 t/ B& `  C: B! s& c; q9 Y4 Q
上面的方法中,除了用"三点"画圆方法得到轨迹外,还可以用样条曲线画轨迹.道理是一样的.( O* t7 l8 k8 y

0 }7 |! t4 c9 D' L" l二.编程法+ t( K! y: n  T
可以把编程法理解为自定义的参数画法.它实质上也是逼近法的一种,只是用自行编制的程序代替人工完成逼近过程.这种方法可以达到逼近的最大极限,其精度甚至比在电脑上用几何画法画出的的实际结果还要高.4 m) p4 _# A/ B3 ~' T1 G
下面的代码是用VBA编制的
  1. % h5 B' D0 c% f6 ^
  2.     Dim P1(2) As Double, P2(2) As Double, P As Variant0 Q1 ?' t9 b5 ?3 @5 Y' X/ j
  3.     Dim L1 As AcadLine, L2 As AcadLine, L3 As AcadLine, L4 As AcadLine
    7 W$ Y0 i6 W% V0 B' T3 n$ e
  4.     Dim L5 As AcadLine, L6 As AcadLine, L7 As AcadLine, L As Variant$ h2 V/ v  H/ L4 C
  5.     Dim C1 As AcadCircle, C2 As AcadCircle, C3 As AcadCircle
    ) X$ x+ v; j3 v- N
  6.     Dim R1 As Double, R2 As Double, R As Double
    - }. w* ~1 ^! x0 c
  7.     , x: ^6 X7 F4 ~+ c6 V0 @5 P
  8.     '初始化迭代运算的边界* }7 K  H/ p; F. @
  9.     '下面运算中R为小圆半径
    : N5 H5 [0 S! N( B
  10.     'R1为下边界,采用默认值0- c3 x) n6 b: [% M
  11.     'R2为上边界,根据本图实际情况采用20/ \  V: ^% k& ]4 z6 C7 j
  12.     R2 = 20
    # {; {/ M5 q" |& B1 D0 U, P
  13.     + L0 {0 G9 I. Z
  14.     With ThisDrawing% ]9 o: f$ ^0 M8 w! {. Q
  15.         '画四边形
    , B" Q+ Z+ q& `! Q
  16.         '  W2 l3 j! ~( P9 l; c
  17.         'P1为原点,采用默认值
    $ p6 M# q( L5 B6 N; R% ^" y+ d
  18.         'P2点赋值为(100,0),其中Y坐标和Z坐标都采用默认值
    6 M0 ^: K1 Z( h# g. L
  19.         P2(0) = 100! _8 I3 E# m: U* q: y/ u6 h
  20.         '画下方长度为100的水平直线L1,起点为原点P1,端点为P2(100,0): j" o; F/ P5 q3 h% g0 `8 V
  21.         Set L1 = .ModelSpace.AddLine(P1, P2)  d$ f# i# ^9 f5 J
  22.         '以P2(100,0)点为圆心,半径90画圆C1# K& V! u' J& N9 M. ^
  23.         Set C1 = .ModelSpace.AddCircle(P2, 90): w( j8 b' R1 r0 j  C
  24.         'P2点重新赋值为(0,70)) D+ l* ~, F# q7 F
  25.         P2(0) = 0: P2(1) = 70
    : ^# @8 m6 Y$ E  M# P* h, @
  26.         '画左侧长度为70的垂直直线L2,起点为原点P1,端点为P2(0,70)3 U- H: C5 F0 r# ~
  27.         Set L2 = .ModelSpace.AddLine(P1, P2)
    ( b7 C# j4 }' q, r
  28.         '以P2(0,70)为圆心,半径80画圆C2- G/ @' B. k  ]
  29.         Set C2 = .ModelSpace.AddCircle(P2, 80)
    2 a; j1 u9 ]/ q$ ^: R: J' o" d
  30.         '获得圆C1和圆C2的交点坐标数组P# M5 X. N. _  {, O8 F- z3 _
  31.         'C1与C2共有两个交点,因此数组P内共有6个元素# L6 g% Z, G( \) U* d) b
  32.         '前3个是其中一个交点的三坐标,后3个是另一个交点的三坐标
    # E" U: _8 Z8 [: \' u: n, m
  33.         P = C1.IntersectWith(C2, acExtendNone)
    ) ]) |* w2 a2 s- \9 B
  34.         '检查两个交点中哪一个的Y坐标较大,即将该交点坐标赋值给P2
    ) B2 B  E/ Y+ b: ~
  35.         If P(1) > P(4) Then7 `9 K$ l+ x* g
  36.             P2(0) = P(0): P2(1) = P(1)  h& h1 A+ Z  }, r3 e: g
  37.         Else
    & o! Z3 W6 l( x8 g/ f/ o1 D0 g
  38.             P2(0) = P(3): P2(1) = P(4)
    4 d. U* N8 A& O/ {3 B" C" F
  39.         End If2 g, A0 I: y% s2 J% {
  40.         '画右侧直线L3,起点为下方水平直线L1的端点,端点为两圆上方交点P2/ V; d! H+ a! n, e$ }1 D* G
  41.         Set L3 = .ModelSpace.AddLine(L1.EndPoint, P2)5 t; e$ F. q+ e4 j
  42.         '画上方直线L4,起点为左侧垂直直线L2的端点,端点为两圆上方交点P2( u. L- e( `3 T( R; l
  43.         Set L4 = .ModelSpace.AddLine(L2.EndPoint, P2)2 |: z! e- L0 z
  44.         '原位复制下方水平直线1,得到新直线L5
    ( x0 {% a: o% O( n
  45.         Set L5 = L1.Copy
    * g) Y, `6 [2 j/ d) Q
  46.         '旋转L5,以下方水平直线L1和上方直线L4的延长线交点为基点,旋转角为上方直线L4角度的一半
    & U! p2 u7 B6 i* w0 M
  47.         '此直线L5即为下方水平直线与上方直线L4之间的角平分线( \; s. ~. H4 [
  48.         L5.Rotate L1.IntersectWith(L4, acExtendBoth), L4.Angle / 2
    : v" N9 q9 F* j) x) G' L& f/ j$ W
  49.         '随便画一个圆L3备用(用作将来的大圆); [/ N, r# S! y4 e1 o: n# e& t
  50.         Set C3 = .ModelSpace.AddCircle(P1, 1)- A0 m' M7 I; f
  51.         '复制角平分线L5,得到新直线L6备用(用作两小圆圆心连线的垂直平分线)( {% [7 n3 x( c, b) w. {% q
  52.         Set L6 = L5.Copy
    * _& m8 S' J7 Y+ N- `8 d) \$ y
  53.         1 n  P; D+ D/ u1 S7 `: k8 o* w" ~  H" N
  54.         '下面迭代运算,寻找合适的圆
    7 I: ^! L1 d9 m7 Y5 W3 E' {3 n
  55.         Do4 `+ u) e& w! A  l
  56.             '以两个边界的平均(中间)值为小圆半径" N8 G" t, L; R2 o* j0 ~  [& n
  57.             R = (R1 + R2) / 2# R" y3 \! l- ^- ?7 u
  58.             '向上偏移下方水平直线L1,距离为R,得到新直线数组L  i1 X+ T* W- Z5 V8 F
  59.             '由于偏移直线只能得到一条新直线,所以数组L中只有一个元素即直线L(0)  s' e+ l' g$ k" F2 d
  60.             L = L1.Offset(R). b6 v( e3 i7 S
  61.             '将直线L(0)赋值给L72 |' \+ {' S/ F) j$ y$ ~* G
  62.             Set L7 = L(0)
    8 a4 w5 Z- E) p5 g: _
  63.             '向右偏移左侧垂直直线L2,距离为R,得到新直线数组L,其中新直线为L(0)" ], f) u7 ~' J- ^& g7 P$ d/ g
  64.             L = L2.Offset(-R)( b6 |4 [. A) H; z2 ?
  65.             '把圆C1的圆心移到偏移得到的两条新直线的交点' b) S& p& D6 ~9 h
  66.             C1.Center = L7.IntersectWith(L(0), acExtendNone)( J! D* i$ c0 K/ m7 y4 F9 l
  67.             '圆C1的半径改为R
    6 ]" c2 A4 r& E6 g
  68.             '此圆即为左下方半径为R的小圆
    7 u) b$ j% i% o7 O) g* {
  69.             C1.Radius = R
    : r3 H& \4 y: g
  70.             '删除两条偏移得到的新直线
    3 @1 E- `* N( p. g
  71.             L7.Delete
    ( S$ |! A0 }/ F* Z
  72.             L(0).Delete
    ! h& q8 v, l' t9 l3 X
  73.             '用同样的方法得到右上方半径为R的小圆,然后删除辅助线# v# \; I  N9 ~! ~: u  M! d+ C% K. t; h3 ]
  74.             L = L3.Offset(R)
    # s& p0 s: @  s) H
  75.             Set L7 = L(0): n+ |0 C  U$ q
  76.             L = L4.Offset(-R)
    ' M& [' P" x! @+ [
  77.             C2.Center = L7.IntersectWith(L(0), acExtendNone)
    5 W. u2 A. b6 f, S4 W
  78.             C2.Radius = R
    # b, H+ c0 X& {5 t/ L4 {9 D
  79.             L7.Delete
    5 e5 z! @0 u; q: n8 K# T+ s$ X) z
  80.             L(0).Delete! Z$ U) y% z0 z" v9 I+ u; Z
  81.             '将直线L6的起点移到左下方小圆C1的圆心& f1 q6 b7 E1 g* h0 r1 w9 E
  82.             L6.StartPoint = C1.Center  W) @" B; l5 [3 |& \- r
  83.             '将直线L6的端点移到右上方小圆C2的圆心% _. u, E- c5 ]7 d
  84.             L6.EndPoint = C2.Center% }5 a- x3 E* l; P$ A
  85.             '计算直线L6的中点并赋值给P2点4 O. q; j: c4 c% C
  86.             P2(0) = (L6.StartPoint(0) + L6.EndPoint(0)) / 2
    0 Z  f& m9 \9 _4 ^
  87.             P2(1) = (L6.StartPoint(1) + L6.EndPoint(1)) / 2
    , Z  v( v. a" S7 w4 d
  88.             '旋转直线L6,基点为其中点,角度90度+ @6 m3 _+ D( E* s! p. R. x8 N
  89.             '此直线即为两小圆圆心连线的垂直平分线) m' n, I( \  I9 k/ u: e- o
  90.             L6.Rotate P2, .Utility.AngleToReal(90, acDegrees)' b8 s3 s9 d7 T. D
  91.             '大圆C3圆心移到垂直平分线L6和角平分线L5的交点. T; |8 F' r! ]- }
  92.             C3.Center = L6.IntersectWith(L5, acExtendBoth)
    # o- D6 D& ]1 I. u" F
  93.             '大圆C3半径改为等于其圆心Y坐标,此时大圆C3与上下两直线相切) \7 @8 `6 J8 }6 V9 }
  94.             C3.Radius = C3.Center(1)
    . _, l. r2 Z$ R/ W3 ]! a# N
  95.             '获得大圆C3与左下方小圆C1的交点数组6 C5 `! Y5 m( w! B0 ?7 c9 X
  96.             P = C3.IntersectWith(C1, acExtendNone)
    , m' k! f3 b1 @) C
  97.             '检查大圆C3与左下方小圆C1是否只有一个交点(即相切)! O  J# l6 j4 j; I# U! t& h0 t
  98.             '同时检查迭代运算是否已到极限9 W/ n0 n+ K* y5 r5 i
  99.             If UBound(P) = 2 Or R = R1 Or R = R2 Then
    . r4 O9 w/ W! O% E: o; {0 `  ^
  100.                 '当两圆相切或迭代运算已到极限时结束循环' j& p) f5 d2 h9 [" X$ v3 ^
  101.                 Exit Do9 k) u! @1 n/ R0 r$ h
  102.             ElseIf UBound(P) = -1 Then
    " [5 \2 W8 J3 {& A' p  }3 D9 j( n
  103.                 '当两圆没有交点时说明小圆半径太小+ }6 a7 h) _$ P3 V: l& C9 J
  104.                 '把小圆半径做为新的迭代运算的下边界,重新尝试; Y7 m. D: e8 V% o8 ]- I- B1 D* p- p
  105.                 R1 = R7 ]  v( e. }+ s/ b
  106.             Else
    : `3 G2 q( ?2 Z+ A
  107.                 '当两圆有两个交点时说明小圆半径太大
    9 G2 u% ], ]5 w2 n- z
  108.                 '把小圆半径做为新的迭代运算的上边界,重新尝试
    ( C+ ]$ R8 i6 g" L( F
  109.                 R2 = R& [( o* ~) n, h& l, h; c( J
  110.             End If; m9 s& }7 H: F4 w4 \
  111.         Loop
    9 m- r+ s; Y+ V1 F8 ?! X
  112.         '图形完成后删除角平分线和垂直平分线5 S4 V# u. b" I* B
  113.         L5.Delete- @5 _. o% @* A+ u6 {
  114.         L6.Delete
    : |' S. `9 Y; ]* x8 r
  115.     End With5 f1 H+ c) s( X1 P" s
复制代码
运算上面的代码可以直接得到整个图形
! f+ b& ?: [+ T有兴趣的朋友可以用LISP或其它二次开发方法编制画本图的程序.有奖励哦
发表于 2011-8-30 10:08:21 | 显示全部楼层 来自: 中国江苏苏州
这个图低版本下画出确实蛮难的。
发表于 2011-10-30 20:28:54 | 显示全部楼层 来自: 中国广东深圳
估计这个画法还要点几何功底,我也试了很久没有试出来,用04的。应该是R和r直接的关系要利用好吧,不过现在几何忘记的差不多了
发表于 2011-10-30 20:51:20 | 显示全部楼层 来自: 中国广东深圳
39楼有误,两个大小不一样啊,不会截屏。自己测量就知道了
发表于 2011-10-30 21:01:43 | 显示全部楼层 来自: 中国广东深圳
确实,在PROE里用约束很快可以画出来,测出来和前面那位用Proe的结果一样
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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