QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

楼主: q542748861
收起左侧

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

[复制链接]
发表于 2011-4-1 17:58:10 | 显示全部楼层 来自: 中国浙江温州
三点画圆! A0 }- t" A/ U& ^: o! ?9 t) ~$ Y
都在线上捕捉切点就可以了啊
 楼主| 发表于 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以上的版本画  
) B: k* n+ f) k+ Z   那样就没意思了!
发表于 2011-4-3 13:28:39 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。0 F: a( K9 ?! t
用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。
6 Z+ k! v  \6 H2 k' `如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。
发表于 2011-4-3 13:33:42 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。
+ y, Z0 ?/ u8 O3 a+ t1 M4 Q D.JPG
发表于 2011-4-3 16:57:22 | 显示全部楼层 来自: 中国江苏扬州
应该只有唯一解,大圆直径78.78,小圆直径16.27
发表于 2011-4-4 13:11:05 | 显示全部楼层 来自: 中国安徽合肥
32# 12fzj ! t3 ^3 Q2 G+ L9 q, l5 M
9 X) [& B) C4 C. ^. M8 C7 Y
应该只有唯一的解,下图是用“破衣”画的。
; w" S' D3 z- i: S, F( i 快照1.png
发表于 2011-8-11 23:11:58 | 显示全部楼层 来自: 中国江苏
我画的给大家分享一下,具体如下:
3 Z5 g5 \8 q: h. W1 {3 Y6 i1、画一条中心线,然后以中心为镜像轴作镜像,具体如下图:8 B. g! C/ X0 z5 z) s7 E
无标题1.jpg     无标题2.jpg / W& S1 q5 J2 }0 h) p
2、以中间位置画圆(用相切、相切、相切画),具体如下图:: q- j7 A: K. O; z. H# ~9 u7 U
无标题3.png
- X$ e+ f. O* c3、用相切、相切、相切画其它两个圆,如下图:5 W* U8 ]5 C( B- w  \7 x
无标题4.jpg 5 j3 R& i& Z4 w0 @
完成尺寸如下图:, x+ e# l# f, O) }2 f0 j) U  _
无标题5.jpg
发表于 2011-8-15 19:48:18 | 显示全部楼层 来自: 中国浙江金华
35# 唐依依
' V1 I" ?$ S2 K$ b1 A3 T高手果然高手,不过这样的几何题最好给个证明,不然实在看着吃力
发表于 2011-8-19 10:34:55 | 显示全部楼层 来自: 日本
用的日语cad,很多功能不会用。
, N* G% T* \- T/ |附件内容自己看吧,pdf和cad是同一个图。0 Y9 |  b4 r' E5 O) Z
用的几何画法,cad只是辅助,理论上任何画图软件用这方法都行。  h" T0 B: |. C7 E
另外,4边形是我随便画的,任何尺寸的4边形用这方法都能作出你想要的那1大2小圆。- `) B. W0 v' M" p; A* J
就是比较花时间。

方法.pdf

240.43 KB, 下载次数: 24

画图法.dwg

43.6 KB, 下载次数: 1

发表于 2011-8-19 15:06:12 | 显示全部楼层 来自: 中国北京
35# 唐依依
8 p. }/ O' }; d, O7 {8 m# i5 ]; o. _; u9 @. A+ I' t
唐总,你的这个做法应该不是正解,你把精度设置成四位看看,差很多哦~# c3 f4 Z  Y$ v4 s& ^! H6 Z: ]+ @( h

# H. |" k5 d2 k1 d* K* i3 u不过想了很久除了用CAD的约束功能也没用其他方法做出来,
8 f" z5 M& x- p# w$ n' g, x等待高手解决。
发表于 2011-8-19 15:55:53 | 显示全部楼层 来自: 日本
嚓~~~大圆没点到圆心,失误
8 s7 s7 b0 _0 T- C) v改正后的图附上,应该ok了。
  {  r) \. W, l" c! T用这办法,就是手工图也能在有圆规等画图工具的辅助下作出想要的大小圆。

画图法.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# 唐依依 - z7 g) B+ Z/ w
39# sylpw 0 N+ E/ F* n" D6 r+ v# V
0 z; w! m3 k5 Q7 [) q; h2 @
35楼,39楼均是正解,我自己试过了,高手啊!佩服
发表于 2011-8-25 13:36:43 | 显示全部楼层 来自: 中国香港
与时俱进嘛,既然高版本的能画出来,为什么还要用低版本的呢?
发表于 2011-8-27 13:36:04 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-8-27 13:41 编辑 & G% y8 M: \9 ]+ q9 d
/ a4 {# e4 R: z1 Y- b# }% _6 ^* P
从代数式看,本图应该没有二维几何画法.上面几位朋友提供的方法也只是比较接近结果而已.
4 l$ \4 m( M5 I- F2 s* ?' l这个图,对于2010及以上版本可以用参数方法画出;对于2009及以下版本,可以使用逼近法:包括轨迹法,精确选点法和编程法等等.* M. N7 B6 K# z
下面着重讨论轨迹法和编程法
3 ^+ h3 d' [" T/ D6 X一.轨迹法6 e6 l9 D/ W; [2 [9 a6 f, [6 L  ^
首先画出四边形.再在左下角和右上角用"相切,相切,半径"方法分别画一个半径为5的小圆,再用"三相切"方法画出与两个小圆和底部水平直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为8的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为10的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆.再用"三点"方法通过三个大圆的圆心画出轨迹圆.如图/ y0 X1 s% e7 C+ U6 k* q. ^
Untitled-1.gif * {- q) j7 ~& l
删除图形上所有的圆,画出上下两直线的角平分线.再以角平分线和轨迹圆交点为圆心画出与上下两直线均相切的大圆,再用"三相切"方法画出两个小圆.如图
: ~) t! ?: _6 `  o Untitled-2.gif 5 m) |2 s% l, |1 l0 p
用"特性"管理器分别查看两小圆的半径,结果分别为8.1363和8.1366.已经很接近了.
+ q* y+ `( D/ G& ?0 G如果认为精度不理想,可以用更接近这个结果的半径值重复上面的过程,就可以得到更精确的结果.
6 ^! q' `, U7 a7 C0 ]
0 d8 k( r* y& f; x! t上面的方法中,除了用"三点"画圆方法得到轨迹外,还可以用样条曲线画轨迹.道理是一样的.
- x7 B3 R8 C' a. p) J5 V8 i* G. J( H5 y% G6 f( ]% p
二.编程法% e+ a) P6 i! Z/ J( |
可以把编程法理解为自定义的参数画法.它实质上也是逼近法的一种,只是用自行编制的程序代替人工完成逼近过程.这种方法可以达到逼近的最大极限,其精度甚至比在电脑上用几何画法画出的的实际结果还要高.9 E) P  ~2 @( J# E7 J, P
下面的代码是用VBA编制的

  1. 0 }0 y3 o2 V& M* O9 d0 R) {
  2.     Dim P1(2) As Double, P2(2) As Double, P As Variant2 _) I; g' K- L  w8 ~+ J# W
  3.     Dim L1 As AcadLine, L2 As AcadLine, L3 As AcadLine, L4 As AcadLine
    7 b7 {1 m1 d6 Z4 ]
  4.     Dim L5 As AcadLine, L6 As AcadLine, L7 As AcadLine, L As Variant  C- g5 }: I: \
  5.     Dim C1 As AcadCircle, C2 As AcadCircle, C3 As AcadCircle
    6 p) R" R9 c1 R0 T. k* {0 C3 d
  6.     Dim R1 As Double, R2 As Double, R As Double5 ]7 R! v: v: _: j* I+ \
  7.    
    ( t8 ]+ ?% U' s/ t/ t/ f& D4 w, F
  8.     '初始化迭代运算的边界) _# A5 J7 @$ w) k4 q+ L( f. _- G8 v
  9.     '下面运算中R为小圆半径2 b3 ^- {4 N+ c2 k
  10.     'R1为下边界,采用默认值09 |9 w/ S3 k7 e. S  J1 F
  11.     'R2为上边界,根据本图实际情况采用20, ^6 c, N: d' ?5 C8 K+ ?6 x
  12.     R2 = 20
    - P, n2 j4 h6 \1 _; w# K2 s
  13.     6 I, K1 Z( _' X  a4 J! A
  14.     With ThisDrawing1 L- d8 q- T2 s3 S5 s
  15.         '画四边形$ @5 {& @* P, n5 Q* I
  16.         '3 M9 _8 ~0 N0 F8 \2 y! s
  17.         'P1为原点,采用默认值0 H+ u' v2 d& B! h; ~6 p8 b
  18.         'P2点赋值为(100,0),其中Y坐标和Z坐标都采用默认值
    % D/ p( v! w. T; y2 K
  19.         P2(0) = 100$ V# _8 }  _* C+ d' w
  20.         '画下方长度为100的水平直线L1,起点为原点P1,端点为P2(100,0)5 g& X, j3 Q4 T# d+ i
  21.         Set L1 = .ModelSpace.AddLine(P1, P2)7 Q/ Q; i  U* k# p
  22.         '以P2(100,0)点为圆心,半径90画圆C1
    6 T, g& F  g  o. L* q
  23.         Set C1 = .ModelSpace.AddCircle(P2, 90)0 K# j9 K1 ^+ H1 D
  24.         'P2点重新赋值为(0,70)0 n/ R" M+ f2 R- r( }
  25.         P2(0) = 0: P2(1) = 70
    0 p) K6 f4 z1 q7 x* m' S% g
  26.         '画左侧长度为70的垂直直线L2,起点为原点P1,端点为P2(0,70)
    # Q) I. L; N  Z5 M1 A& q1 E2 Y
  27.         Set L2 = .ModelSpace.AddLine(P1, P2)( j$ t# N# Y% v- F1 W6 v* v) ^. D. u0 P
  28.         '以P2(0,70)为圆心,半径80画圆C2
    4 `5 b6 d; h/ W
  29.         Set C2 = .ModelSpace.AddCircle(P2, 80)0 E- I# G7 K- [1 E
  30.         '获得圆C1和圆C2的交点坐标数组P$ l5 o8 ]: A5 I7 s* b+ P, p$ n
  31.         'C1与C2共有两个交点,因此数组P内共有6个元素% n3 U3 }$ g  }& Q; O! H
  32.         '前3个是其中一个交点的三坐标,后3个是另一个交点的三坐标
    $ ^+ f5 P+ j  {$ E
  33.         P = C1.IntersectWith(C2, acExtendNone)
    + G8 F( U5 |3 L  B# `9 |
  34.         '检查两个交点中哪一个的Y坐标较大,即将该交点坐标赋值给P27 N/ {* L8 q- R6 s
  35.         If P(1) > P(4) Then' J3 \# ^% e5 L' Q7 R& g
  36.             P2(0) = P(0): P2(1) = P(1)
    % H* e/ y$ E2 \. Q( [7 P
  37.         Else
    ' I3 \; e7 ?  j: \: x9 \, \8 }
  38.             P2(0) = P(3): P2(1) = P(4)% }" _2 g' _: [1 c5 N8 L8 f
  39.         End If! I/ V/ j& {# F7 J
  40.         '画右侧直线L3,起点为下方水平直线L1的端点,端点为两圆上方交点P2
    9 u5 J* C% {: k( t
  41.         Set L3 = .ModelSpace.AddLine(L1.EndPoint, P2)  c) K% V! M' G, n# A, r
  42.         '画上方直线L4,起点为左侧垂直直线L2的端点,端点为两圆上方交点P2, e/ \/ Z* N: k* I) [
  43.         Set L4 = .ModelSpace.AddLine(L2.EndPoint, P2)
    ( c3 \# ^2 s0 _) q# L8 w
  44.         '原位复制下方水平直线1,得到新直线L59 ~; ^7 S1 W* n4 D2 {
  45.         Set L5 = L1.Copy
    & O' I9 |3 H+ x1 s7 V' T
  46.         '旋转L5,以下方水平直线L1和上方直线L4的延长线交点为基点,旋转角为上方直线L4角度的一半
    $ T$ Q1 f- H- V) b( J
  47.         '此直线L5即为下方水平直线与上方直线L4之间的角平分线  Z* u* m( P5 _" S0 ~5 ], _
  48.         L5.Rotate L1.IntersectWith(L4, acExtendBoth), L4.Angle / 2# W* d9 W7 U- {; y1 u1 E2 R
  49.         '随便画一个圆L3备用(用作将来的大圆)
    2 n7 |) Q6 P! @
  50.         Set C3 = .ModelSpace.AddCircle(P1, 1)* G, d3 H( J- x) Z1 N
  51.         '复制角平分线L5,得到新直线L6备用(用作两小圆圆心连线的垂直平分线), d4 Y' g, P" Z$ t$ P
  52.         Set L6 = L5.Copy! Z' A% B/ x/ m( }% }+ A
  53.         7 ^8 p. b2 \; Q7 _7 L
  54.         '下面迭代运算,寻找合适的圆
    4 ^6 c0 Y8 F; @4 n/ C
  55.         Do& a: k) a5 \4 _$ R8 j
  56.             '以两个边界的平均(中间)值为小圆半径
    * W/ c( ?. t/ k5 p1 W% n3 @3 a# z. Q
  57.             R = (R1 + R2) / 26 S0 D5 a+ c$ {
  58.             '向上偏移下方水平直线L1,距离为R,得到新直线数组L
      J  p: I" n' p7 d6 ~
  59.             '由于偏移直线只能得到一条新直线,所以数组L中只有一个元素即直线L(0)$ F4 a2 p+ Y+ A. S: X3 c/ k
  60.             L = L1.Offset(R)" X6 ]. Q  A' |4 a* s
  61.             '将直线L(0)赋值给L75 G, @! l5 q$ |, L+ J
  62.             Set L7 = L(0)
    - o# s4 c5 j! Y9 A& n
  63.             '向右偏移左侧垂直直线L2,距离为R,得到新直线数组L,其中新直线为L(0)
    ' J8 e! P9 Q2 Q0 p  f5 r# z
  64.             L = L2.Offset(-R)+ t7 |* J: ]0 v, j% s
  65.             '把圆C1的圆心移到偏移得到的两条新直线的交点' v% V2 A! T9 T/ P
  66.             C1.Center = L7.IntersectWith(L(0), acExtendNone)# n1 ^- O0 @1 Q. P+ g: x# ~8 d
  67.             '圆C1的半径改为R, H6 ]7 V; h) f
  68.             '此圆即为左下方半径为R的小圆
    ' _) x$ g; ^1 o4 l8 T5 C& m. o7 b5 r
  69.             C1.Radius = R3 Z1 Q4 u/ A0 @5 ]0 R8 [
  70.             '删除两条偏移得到的新直线! X, |+ V. E0 p4 s# [! z
  71.             L7.Delete
    " J- ]) y# z5 K/ o( ]$ B# H- T
  72.             L(0).Delete
    3 K% g  D' O  d5 ]" N" G
  73.             '用同样的方法得到右上方半径为R的小圆,然后删除辅助线
    ( b5 y5 r6 T1 o0 u) ?
  74.             L = L3.Offset(R)  D) v+ ~) M9 o5 p4 O( p  C4 S
  75.             Set L7 = L(0)
    ' ^4 o  s: }: D/ i5 |
  76.             L = L4.Offset(-R)9 `5 ?$ M7 b: @8 h0 S
  77.             C2.Center = L7.IntersectWith(L(0), acExtendNone)
    % k3 U4 z% v, v" B% Y- B8 M. X  n
  78.             C2.Radius = R2 {' J& J( R. Q8 x! W1 \
  79.             L7.Delete/ r: ^0 N4 {0 U' X) n! S
  80.             L(0).Delete8 L5 l; a+ m6 r
  81.             '将直线L6的起点移到左下方小圆C1的圆心, `& g: a% A8 e+ ?& n
  82.             L6.StartPoint = C1.Center
    * f/ `, y( O3 r. o  ^$ q
  83.             '将直线L6的端点移到右上方小圆C2的圆心! l4 W4 o; q, `- F' @  Z  w+ y, V
  84.             L6.EndPoint = C2.Center; k/ n9 p5 z3 ^8 ]
  85.             '计算直线L6的中点并赋值给P2点) S' w0 v8 A7 {' o  s7 @! @7 v
  86.             P2(0) = (L6.StartPoint(0) + L6.EndPoint(0)) / 2
    8 a7 T2 v' ~- H3 {7 l8 L0 ?
  87.             P2(1) = (L6.StartPoint(1) + L6.EndPoint(1)) / 2& n, G9 o4 m& y5 F
  88.             '旋转直线L6,基点为其中点,角度90度
    / u  ^: ?9 A. H
  89.             '此直线即为两小圆圆心连线的垂直平分线) A+ R8 U8 X5 h; N0 I0 i( \
  90.             L6.Rotate P2, .Utility.AngleToReal(90, acDegrees)
    - }) j5 F5 m, Q. D  t8 z
  91.             '大圆C3圆心移到垂直平分线L6和角平分线L5的交点
    ) V* l* f! U! z+ d0 n; p) {7 T- V
  92.             C3.Center = L6.IntersectWith(L5, acExtendBoth)
    4 |" N' k# C" e* P: ^
  93.             '大圆C3半径改为等于其圆心Y坐标,此时大圆C3与上下两直线相切
    " d( I" R5 J2 i# v6 N; s
  94.             C3.Radius = C3.Center(1)  C9 X- k% V& x' F7 ]
  95.             '获得大圆C3与左下方小圆C1的交点数组
    4 I, T# ^" l$ M) d
  96.             P = C3.IntersectWith(C1, acExtendNone)3 ^$ y3 M7 d8 J) a) r! j, d
  97.             '检查大圆C3与左下方小圆C1是否只有一个交点(即相切)
    ) ~0 s! A5 y# u1 T3 R
  98.             '同时检查迭代运算是否已到极限
    5 |9 ?+ {5 y' o% i, X+ Q$ k
  99.             If UBound(P) = 2 Or R = R1 Or R = R2 Then
    7 l& R5 I0 {+ n& t# q/ g1 ~
  100.                 '当两圆相切或迭代运算已到极限时结束循环( z) [8 P4 Q- g  i; w9 D% T
  101.                 Exit Do9 y+ K& w7 w5 u
  102.             ElseIf UBound(P) = -1 Then- J, v1 P9 M6 k% i1 O
  103.                 '当两圆没有交点时说明小圆半径太小
    ( j- l" i  p" G) d& @6 q4 H
  104.                 '把小圆半径做为新的迭代运算的下边界,重新尝试. w6 g1 v  a6 |- H' X! N
  105.                 R1 = R, g- b- ]0 u( h( c9 E# G! @
  106.             Else- G' K7 }; P5 Q  j: @
  107.                 '当两圆有两个交点时说明小圆半径太大
    / g" U9 p! x' H# f* z! O
  108.                 '把小圆半径做为新的迭代运算的上边界,重新尝试. y7 l5 Y0 x4 `! V% M% ?; G% z9 `
  109.                 R2 = R
    * r+ m2 q& e4 Z; R5 J1 W
  110.             End If
    1 p% l( M* V& P+ t& w  I) s& o
  111.         Loop9 A# f1 o: c- F! p7 |( l
  112.         '图形完成后删除角平分线和垂直平分线
    7 k* W8 B! }; t$ k& i
  113.         L5.Delete  r, ^8 l/ W  U
  114.         L6.Delete
    # q4 L+ u" t% u8 S/ a9 A% G
  115.     End With
    5 i# J  j) ?# |# f0 s% a) t
复制代码
运算上面的代码可以直接得到整个图形
4 ]: g2 D0 _5 i/ [; H% O有兴趣的朋友可以用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 )

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