QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

[复制链接]
发表于 2011-4-1 17:58:10 | 显示全部楼层 来自: 中国浙江温州
三点画圆
, F: O( n- x9 N% s% e都在线上捕捉切点就可以了啊
 楼主| 发表于 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以上的版本画  
! h' M  j; [8 d$ @  H- O, }: \   那样就没意思了!
发表于 2011-4-3 13:28:39 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。7 T4 R1 l7 j1 ], f0 x( r* P
用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。( b. G! C  J, F/ i' q$ _5 q* k
如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。
发表于 2011-4-3 13:33:42 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。
! @" z/ ]# D. {2 ~* w D.JPG
发表于 2011-4-3 16:57:22 | 显示全部楼层 来自: 中国江苏扬州
应该只有唯一解,大圆直径78.78,小圆直径16.27
发表于 2011-4-4 13:11:05 | 显示全部楼层 来自: 中国安徽合肥
32# 12fzj - x* G) l; w) a
0 S8 @) \# Z! K0 x/ V4 C
应该只有唯一的解,下图是用“破衣”画的。3 n  M8 Y! s: t! K" `# u6 _
快照1.png
发表于 2011-8-11 23:11:58 | 显示全部楼层 来自: 中国江苏
我画的给大家分享一下,具体如下:
, j9 y) E# K) s5 Z1、画一条中心线,然后以中心为镜像轴作镜像,具体如下图:& \& f3 J1 ]2 }$ e" Y$ Y, i9 N
无标题1.jpg     无标题2.jpg ; \( C9 E# X0 Q. k, l
2、以中间位置画圆(用相切、相切、相切画),具体如下图:. j, |8 i# p0 n2 f
无标题3.png % O1 x) O$ t7 {1 P/ }
3、用相切、相切、相切画其它两个圆,如下图:, b: W) \3 M8 x1 }
无标题4.jpg
+ A' F0 X' W8 w& h, Q完成尺寸如下图:7 P6 ^! R, ~) h) }5 P. p  J; q8 H
无标题5.jpg
发表于 2011-8-15 19:48:18 | 显示全部楼层 来自: 中国浙江金华
35# 唐依依
9 V) ~) H9 w, I7 f# M高手果然高手,不过这样的几何题最好给个证明,不然实在看着吃力
发表于 2011-8-19 10:34:55 | 显示全部楼层 来自: 日本
用的日语cad,很多功能不会用。6 p0 ?  b: @1 L! X3 h; s; W
附件内容自己看吧,pdf和cad是同一个图。5 d. j. ]/ ~* R" B# `: H5 u
用的几何画法,cad只是辅助,理论上任何画图软件用这方法都行。5 [& u% `+ H% N: P" s4 C
另外,4边形是我随便画的,任何尺寸的4边形用这方法都能作出你想要的那1大2小圆。
9 u2 ]' e9 d' g8 Q9 Z! u" M4 Q就是比较花时间。

方法.pdf

240.43 KB, 下载次数: 24

画图法.dwg

43.6 KB, 下载次数: 1

发表于 2011-8-19 15:06:12 | 显示全部楼层 来自: 中国北京
35# 唐依依 * U; |  F+ o$ t" N
( R! v+ u6 N* y: x6 {* U
唐总,你的这个做法应该不是正解,你把精度设置成四位看看,差很多哦~4 }6 D4 Z8 k( z2 b) T  e; }

0 ~. Z) `( c6 D5 d1 |不过想了很久除了用CAD的约束功能也没用其他方法做出来,& q3 ^8 A) m2 {" Q1 J) i0 E6 M
等待高手解决。
发表于 2011-8-19 15:55:53 | 显示全部楼层 来自: 日本
嚓~~~大圆没点到圆心,失误
9 r. H4 I2 G; S' H改正后的图附上,应该ok了。0 B) R8 a- B0 o5 g! [0 b! n
用这办法,就是手工图也能在有圆规等画图工具的辅助下作出想要的大小圆。

画图法.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# 唐依依 % Y; w, k4 b  ~% k- H% L3 i- J
39# sylpw
  Q1 k) r2 i% C% R3 ~' R  w* M& r6 b; _  h7 [
35楼,39楼均是正解,我自己试过了,高手啊!佩服
发表于 2011-8-25 13:36:43 | 显示全部楼层 来自: 中国香港
与时俱进嘛,既然高版本的能画出来,为什么还要用低版本的呢?
发表于 2011-8-27 13:36:04 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-8-27 13:41 编辑 - Y+ p8 u8 B( M# V2 J) L1 A

& b/ N& f+ P. j' K从代数式看,本图应该没有二维几何画法.上面几位朋友提供的方法也只是比较接近结果而已.
# K0 L; @  t  l! a这个图,对于2010及以上版本可以用参数方法画出;对于2009及以下版本,可以使用逼近法:包括轨迹法,精确选点法和编程法等等." A1 ^, s5 G- t2 C1 G6 R/ K
下面着重讨论轨迹法和编程法+ I! k" G4 s: R! n! J+ K; c
一.轨迹法  r6 d$ u4 E; e% h. u  y
首先画出四边形.再在左下角和右上角用"相切,相切,半径"方法分别画一个半径为5的小圆,再用"三相切"方法画出与两个小圆和底部水平直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为8的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为10的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆.再用"三点"方法通过三个大圆的圆心画出轨迹圆.如图& N) S  e+ g/ ^8 |# m
Untitled-1.gif
% l* [: |6 _+ r删除图形上所有的圆,画出上下两直线的角平分线.再以角平分线和轨迹圆交点为圆心画出与上下两直线均相切的大圆,再用"三相切"方法画出两个小圆.如图
, h- b8 \$ [! f6 m Untitled-2.gif
2 x& _: K. C% ?2 _6 Y; U& a! u3 x用"特性"管理器分别查看两小圆的半径,结果分别为8.1363和8.1366.已经很接近了.
! A$ G; P9 l" z4 q" G; S7 r* C如果认为精度不理想,可以用更接近这个结果的半径值重复上面的过程,就可以得到更精确的结果.' k- z  |5 n/ p& }

& j3 g* ^6 C* g+ d+ `/ _上面的方法中,除了用"三点"画圆方法得到轨迹外,还可以用样条曲线画轨迹.道理是一样的.( l0 B4 ?  Z9 h- Y) H

2 h6 u/ V  h6 i二.编程法1 D4 l; a+ H# f/ p
可以把编程法理解为自定义的参数画法.它实质上也是逼近法的一种,只是用自行编制的程序代替人工完成逼近过程.这种方法可以达到逼近的最大极限,其精度甚至比在电脑上用几何画法画出的的实际结果还要高.
, [+ a& `( N: o下面的代码是用VBA编制的
  1. 4 W8 ^, V0 f3 J9 e& C
  2.     Dim P1(2) As Double, P2(2) As Double, P As Variant+ N2 h3 k% g: p. f
  3.     Dim L1 As AcadLine, L2 As AcadLine, L3 As AcadLine, L4 As AcadLine" Q( K/ t3 \: H% b
  4.     Dim L5 As AcadLine, L6 As AcadLine, L7 As AcadLine, L As Variant! V! ?7 o6 X& @) J( R
  5.     Dim C1 As AcadCircle, C2 As AcadCircle, C3 As AcadCircle
    ( c$ O) l7 w$ Z4 Q. c
  6.     Dim R1 As Double, R2 As Double, R As Double
    3 H$ s, l& K8 \7 F2 R
  7.     4 Y# T: S/ w/ [" P& g# O: L3 C
  8.     '初始化迭代运算的边界
    " {% F* S8 s& n, {" q  Z0 W
  9.     '下面运算中R为小圆半径
    2 `( y0 I- Z' Z. V' D
  10.     'R1为下边界,采用默认值0
    7 ^! m. |' ]) {& ~) ^5 o( l, W
  11.     'R2为上边界,根据本图实际情况采用20
    2 E% k. q! n! R
  12.     R2 = 20" v7 b, ]$ d3 [' j+ J- ]
  13.    
    3 |$ l0 O+ j) t$ o
  14.     With ThisDrawing/ Q- N* i; [! B6 o1 A+ q5 r$ B, \
  15.         '画四边形2 T7 W5 s. s( U. x: C9 w+ U
  16.         '
    ; G/ Y$ X0 _( y7 m+ ]
  17.         'P1为原点,采用默认值) X& ]7 d8 o( t/ l) a" b
  18.         'P2点赋值为(100,0),其中Y坐标和Z坐标都采用默认值
    & `! i! q+ P! N; m
  19.         P2(0) = 1007 g: b6 s) }8 d' e+ o# t2 X
  20.         '画下方长度为100的水平直线L1,起点为原点P1,端点为P2(100,0)
    3 N& v# Z  }9 P" N4 V
  21.         Set L1 = .ModelSpace.AddLine(P1, P2)
    - W* X' {3 E9 c2 C: s8 x
  22.         '以P2(100,0)点为圆心,半径90画圆C1
    8 h4 z" k7 I( n+ r
  23.         Set C1 = .ModelSpace.AddCircle(P2, 90)
    8 `) R; j" h6 E$ P/ K: U
  24.         'P2点重新赋值为(0,70)
    2 E+ E# ]# J% ^5 y( q! l" Y
  25.         P2(0) = 0: P2(1) = 708 E7 B5 R8 c& W
  26.         '画左侧长度为70的垂直直线L2,起点为原点P1,端点为P2(0,70)
    ' ^- I0 e; v) C! P, X' V# I. X
  27.         Set L2 = .ModelSpace.AddLine(P1, P2)
    ( f$ E2 |) Q4 s9 H% E
  28.         '以P2(0,70)为圆心,半径80画圆C2; q2 `3 G+ n# |. y5 c  @& M4 \
  29.         Set C2 = .ModelSpace.AddCircle(P2, 80)1 ^7 Y& u! x8 J$ _3 l
  30.         '获得圆C1和圆C2的交点坐标数组P9 Y& [3 b' A( p, I; v2 Q5 P
  31.         'C1与C2共有两个交点,因此数组P内共有6个元素; T! m4 H* T( i# M3 t8 v; p4 ]
  32.         '前3个是其中一个交点的三坐标,后3个是另一个交点的三坐标5 q9 {3 [) p' {5 R6 j4 M; ?
  33.         P = C1.IntersectWith(C2, acExtendNone)# F) B( `- A+ C6 S& l
  34.         '检查两个交点中哪一个的Y坐标较大,即将该交点坐标赋值给P2
    0 r5 Y' \8 \5 _* [
  35.         If P(1) > P(4) Then
    % _; N: R: }0 {' V
  36.             P2(0) = P(0): P2(1) = P(1)5 f# {7 X5 w8 y& [' u% J
  37.         Else6 p) C. e+ p5 W- J
  38.             P2(0) = P(3): P2(1) = P(4)
    ( G- C5 n# B3 f( a5 m
  39.         End If
    ) G& h0 a- N- X) Y
  40.         '画右侧直线L3,起点为下方水平直线L1的端点,端点为两圆上方交点P2
    - o! ~8 q5 z2 J  {* g+ I
  41.         Set L3 = .ModelSpace.AddLine(L1.EndPoint, P2)' f$ b4 D) n, M5 ~  f9 i5 ~( L
  42.         '画上方直线L4,起点为左侧垂直直线L2的端点,端点为两圆上方交点P2
    $ Q4 v2 u4 s8 T+ Y$ b: e6 c
  43.         Set L4 = .ModelSpace.AddLine(L2.EndPoint, P2)6 y- q% N2 A& [& n5 s1 w1 a$ p; ~
  44.         '原位复制下方水平直线1,得到新直线L5
    2 N* N* ^$ D9 ?5 ^: R
  45.         Set L5 = L1.Copy
    , Q5 K6 O" F) w6 R5 ]; S( l  O
  46.         '旋转L5,以下方水平直线L1和上方直线L4的延长线交点为基点,旋转角为上方直线L4角度的一半, H  b7 a' V! K5 y1 L
  47.         '此直线L5即为下方水平直线与上方直线L4之间的角平分线
    $ n8 X; m, O: O! [
  48.         L5.Rotate L1.IntersectWith(L4, acExtendBoth), L4.Angle / 2
    * G8 N' M6 _$ h; n- @+ q; C( l4 D
  49.         '随便画一个圆L3备用(用作将来的大圆)- l  v+ @0 E* E
  50.         Set C3 = .ModelSpace.AddCircle(P1, 1)5 a3 _& Y) w1 M1 o$ ^, ^+ R
  51.         '复制角平分线L5,得到新直线L6备用(用作两小圆圆心连线的垂直平分线)- K' a3 b, Q; |1 L- p2 c
  52.         Set L6 = L5.Copy
    4 w* F3 G& ~0 c6 H! Z' i
  53.         
    4 j$ N' L: Z6 q$ j2 R
  54.         '下面迭代运算,寻找合适的圆, u8 ^9 o2 b8 q( e
  55.         Do$ ]1 k0 K6 b4 }3 w$ J: C4 X$ W- y
  56.             '以两个边界的平均(中间)值为小圆半径7 t0 E& t9 @4 V$ k" H
  57.             R = (R1 + R2) / 2
    6 s, \' P4 ]1 M5 l8 N, Y' Y; ^
  58.             '向上偏移下方水平直线L1,距离为R,得到新直线数组L5 p8 b# R+ O1 c* `- I5 A0 k0 C
  59.             '由于偏移直线只能得到一条新直线,所以数组L中只有一个元素即直线L(0)
    $ @9 y# O3 E, d' @' E5 [
  60.             L = L1.Offset(R)3 B% |0 v9 w' p4 ?9 t: S
  61.             '将直线L(0)赋值给L7
    ) G; _( J9 J# \' J# c. u
  62.             Set L7 = L(0)9 [0 A8 r0 K5 I
  63.             '向右偏移左侧垂直直线L2,距离为R,得到新直线数组L,其中新直线为L(0)
    ; I9 T  k( ?: {2 t
  64.             L = L2.Offset(-R)
    & K& k* ~% x' q) j  H
  65.             '把圆C1的圆心移到偏移得到的两条新直线的交点
    8 [+ ^! B/ H- z+ z1 A$ G5 z
  66.             C1.Center = L7.IntersectWith(L(0), acExtendNone)7 @1 a, l" H4 w2 z6 P
  67.             '圆C1的半径改为R
    4 S7 K- ?% s8 K3 V- T- Q3 ~3 E
  68.             '此圆即为左下方半径为R的小圆
    $ Y+ u) P: a, V8 p( v  E1 O
  69.             C1.Radius = R2 G4 s, _4 Y0 O2 f! N
  70.             '删除两条偏移得到的新直线4 ^2 T! J) b+ q8 d/ Q
  71.             L7.Delete
    ( Z; \0 h* ~. [
  72.             L(0).Delete
    4 D& N- S" q  |0 W
  73.             '用同样的方法得到右上方半径为R的小圆,然后删除辅助线
    # F$ E+ `* e" C1 D: U
  74.             L = L3.Offset(R)+ ^! N' g: Q  G$ Z/ }% I, o  Y
  75.             Set L7 = L(0)1 p% L$ d1 S4 i  ?- o. ^
  76.             L = L4.Offset(-R)
    0 r. v+ b/ v( x8 U0 F/ h
  77.             C2.Center = L7.IntersectWith(L(0), acExtendNone), l6 G( F2 X$ ^
  78.             C2.Radius = R' k) [6 s3 U% X0 B
  79.             L7.Delete
    ) A/ o) M- E; ]: \5 U
  80.             L(0).Delete
    ) ~- _( J  p& r1 A2 W' J
  81.             '将直线L6的起点移到左下方小圆C1的圆心
    1 u+ K7 y# C6 V
  82.             L6.StartPoint = C1.Center! U. C/ W$ `, n3 o5 \
  83.             '将直线L6的端点移到右上方小圆C2的圆心/ v6 t% m; l8 m( A  S4 P  O
  84.             L6.EndPoint = C2.Center2 Q. H) U6 N$ {2 J  P+ q8 `+ d- s
  85.             '计算直线L6的中点并赋值给P2点5 Y- C  v! q, \7 d( t
  86.             P2(0) = (L6.StartPoint(0) + L6.EndPoint(0)) / 2
    , [* P7 ~0 F, e! `& y
  87.             P2(1) = (L6.StartPoint(1) + L6.EndPoint(1)) / 2. a( @  v8 z- {
  88.             '旋转直线L6,基点为其中点,角度90度
    8 \6 Z. ^% i6 C0 |/ n) q4 |* W
  89.             '此直线即为两小圆圆心连线的垂直平分线
    + G0 n, C+ r" K0 ]# Y7 o
  90.             L6.Rotate P2, .Utility.AngleToReal(90, acDegrees)
    ( a4 W8 z" b- T3 i; ]
  91.             '大圆C3圆心移到垂直平分线L6和角平分线L5的交点
    . G9 K7 b1 K5 V' T6 z
  92.             C3.Center = L6.IntersectWith(L5, acExtendBoth)2 |+ }# S, z. l% S* R
  93.             '大圆C3半径改为等于其圆心Y坐标,此时大圆C3与上下两直线相切
    1 R. g6 o8 j% `9 `
  94.             C3.Radius = C3.Center(1)
    6 m  V% T# V: `" w7 u. n
  95.             '获得大圆C3与左下方小圆C1的交点数组
    ! p' K4 m+ M- F+ w  x+ P% T0 d* d. z
  96.             P = C3.IntersectWith(C1, acExtendNone)
    ( i* R' u! g1 G3 Q( |, b
  97.             '检查大圆C3与左下方小圆C1是否只有一个交点(即相切)4 E3 _1 X  O7 w0 \' f! q* o
  98.             '同时检查迭代运算是否已到极限+ I2 c; f1 B3 |. ], n7 a! [  o
  99.             If UBound(P) = 2 Or R = R1 Or R = R2 Then- ]2 C" a( j6 o% N
  100.                 '当两圆相切或迭代运算已到极限时结束循环4 q9 E1 H; D+ j2 M/ \4 t
  101.                 Exit Do% a9 h, T0 i2 S5 L  P
  102.             ElseIf UBound(P) = -1 Then' F. P5 C/ W* _& \
  103.                 '当两圆没有交点时说明小圆半径太小# u. {- {7 d2 V
  104.                 '把小圆半径做为新的迭代运算的下边界,重新尝试; n' \. L8 [& G
  105.                 R1 = R
    ! C% t. R1 R2 G
  106.             Else7 c* Z7 J" i3 @: o* Z6 ?
  107.                 '当两圆有两个交点时说明小圆半径太大
    $ @! T; `% m: Z% q7 ?! q( i/ W! y: m) P
  108.                 '把小圆半径做为新的迭代运算的上边界,重新尝试5 A$ D7 F! ~4 E1 o+ P3 Z0 M0 L
  109.                 R2 = R! |" ^) S# D: y0 y1 l3 m+ i
  110.             End If. A4 m+ [' w/ X
  111.         Loop% N5 D4 [6 p5 B5 v
  112.         '图形完成后删除角平分线和垂直平分线
    / R9 R( V2 d7 Y; i" c$ X! J
  113.         L5.Delete# w+ G0 r( l6 a9 T6 p
  114.         L6.Delete
    7 l" Y. s8 o3 L9 n/ e$ L
  115.     End With
    : c; M  T9 }: h" G
复制代码
运算上面的代码可以直接得到整个图形- M/ L# ~8 H+ m6 k: p- W! [9 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 )

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