QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

[复制链接]
发表于 2011-4-1 17:58:10 | 显示全部楼层 来自: 中国浙江温州
三点画圆) B+ n. S& z. X" U
都在线上捕捉切点就可以了啊
 楼主| 发表于 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以上的版本画  
: r- p& H' Q* K0 ^   那样就没意思了!
发表于 2011-4-3 13:28:39 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。
1 P+ w% u' y6 k2 d5 n用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。
& m+ d; _  b4 L& J如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。
发表于 2011-4-3 13:33:42 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。0 n: d& ~1 k  Y4 t5 W- Y6 c$ u
D.JPG
发表于 2011-4-3 16:57:22 | 显示全部楼层 来自: 中国江苏扬州
应该只有唯一解,大圆直径78.78,小圆直径16.27
发表于 2011-4-4 13:11:05 | 显示全部楼层 来自: 中国安徽合肥
32# 12fzj
' t& C: ~/ @, Q2 z: H3 [- X! V/ g+ v  q6 I& Z/ d8 m/ V7 m' m
应该只有唯一的解,下图是用“破衣”画的。
0 C: _8 [2 ^/ h2 C; Y; T+ b4 L 快照1.png
发表于 2011-8-11 23:11:58 | 显示全部楼层 来自: 中国江苏
我画的给大家分享一下,具体如下:) `0 u4 N8 I1 m( S2 ^1 x+ Y
1、画一条中心线,然后以中心为镜像轴作镜像,具体如下图:8 G# I$ ^* Z1 @. R9 r1 w
无标题1.jpg     无标题2.jpg
  X- _4 N( n$ o2、以中间位置画圆(用相切、相切、相切画),具体如下图:
; T' x* B# F6 u5 h5 i9 e( {: F# D9 r 无标题3.png   X2 j: ?' Y3 n7 X1 F1 A
3、用相切、相切、相切画其它两个圆,如下图:
! }' M5 T3 _8 W: Z 无标题4.jpg
9 o- X! s# V- B( P) t1 x完成尺寸如下图:
9 V0 }3 r. ~. c$ V6 U 无标题5.jpg
发表于 2011-8-15 19:48:18 | 显示全部楼层 来自: 中国浙江金华
35# 唐依依
: H6 F2 M, \* v) Q高手果然高手,不过这样的几何题最好给个证明,不然实在看着吃力
发表于 2011-8-19 10:34:55 | 显示全部楼层 来自: 日本
用的日语cad,很多功能不会用。
7 v- h, N& ^0 N5 J附件内容自己看吧,pdf和cad是同一个图。
9 c; d0 V% n0 V# I( c$ S3 B! L; E, H用的几何画法,cad只是辅助,理论上任何画图软件用这方法都行。/ L8 V5 C% i7 W- j
另外,4边形是我随便画的,任何尺寸的4边形用这方法都能作出你想要的那1大2小圆。
6 m' ^. ^0 I2 Q% H就是比较花时间。

方法.pdf

240.43 KB, 下载次数: 24

画图法.dwg

43.6 KB, 下载次数: 1

发表于 2011-8-19 15:06:12 | 显示全部楼层 来自: 中国北京
35# 唐依依 . W$ L  E6 M; Q- ^5 z

) U, N0 W6 R9 a; ?" b, t' R唐总,你的这个做法应该不是正解,你把精度设置成四位看看,差很多哦~
/ P* l5 w% B* u  b0 b% [5 J7 u( j9 Z
不过想了很久除了用CAD的约束功能也没用其他方法做出来,
$ q0 A  W' G% `: }' W% Z! c' h等待高手解决。
发表于 2011-8-19 15:55:53 | 显示全部楼层 来自: 日本
嚓~~~大圆没点到圆心,失误 5 ?1 a1 @" w' `' U5 M4 D4 R+ d
改正后的图附上,应该ok了。' V6 U9 O1 a  Z8 c$ n8 {
用这办法,就是手工图也能在有圆规等画图工具的辅助下作出想要的大小圆。

画图法.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# 唐依依 + A; }. J* g; G- f' Z
39# sylpw
7 O( Z. j& |( `/ e9 _* z4 ~$ ]
& a; T2 z; r2 W1 [% ], ~1 i5 o' q35楼,39楼均是正解,我自己试过了,高手啊!佩服
发表于 2011-8-25 13:36:43 | 显示全部楼层 来自: 中国香港
与时俱进嘛,既然高版本的能画出来,为什么还要用低版本的呢?
发表于 2011-8-27 13:36:04 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-8-27 13:41 编辑 5 `* a* K# B- L( Y; Q7 F

, Y' d) f1 u8 n" w. m从代数式看,本图应该没有二维几何画法.上面几位朋友提供的方法也只是比较接近结果而已.2 _4 U- h$ g! V; Z0 G* m2 {  ?
这个图,对于2010及以上版本可以用参数方法画出;对于2009及以下版本,可以使用逼近法:包括轨迹法,精确选点法和编程法等等., y  y. E2 [: S" h
下面着重讨论轨迹法和编程法
* x( @% ~) s& K* K4 V9 q一.轨迹法
# W: U1 h3 N8 Z* ~首先画出四边形.再在左下角和右上角用"相切,相切,半径"方法分别画一个半径为5的小圆,再用"三相切"方法画出与两个小圆和底部水平直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为8的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为10的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆.再用"三点"方法通过三个大圆的圆心画出轨迹圆.如图0 C& ^# ^8 I, p8 S; C
Untitled-1.gif
+ ?5 Q% Z' _( t5 T1 `  g: u! X删除图形上所有的圆,画出上下两直线的角平分线.再以角平分线和轨迹圆交点为圆心画出与上下两直线均相切的大圆,再用"三相切"方法画出两个小圆.如图3 L* R( ^: S; I
Untitled-2.gif
4 a+ y" Y( T0 `+ `5 ?用"特性"管理器分别查看两小圆的半径,结果分别为8.1363和8.1366.已经很接近了.6 S" j# ^7 X/ {: j# L' C  l( y4 I
如果认为精度不理想,可以用更接近这个结果的半径值重复上面的过程,就可以得到更精确的结果.
) i: @0 e/ H$ X8 n  P  `8 i) t  V) [% f
上面的方法中,除了用"三点"画圆方法得到轨迹外,还可以用样条曲线画轨迹.道理是一样的.# T; \% l' A7 m

4 k- X* F, S3 z6 [9 i5 h7 ?二.编程法
( R6 E4 g1 N/ j' G5 y' M可以把编程法理解为自定义的参数画法.它实质上也是逼近法的一种,只是用自行编制的程序代替人工完成逼近过程.这种方法可以达到逼近的最大极限,其精度甚至比在电脑上用几何画法画出的的实际结果还要高.
. P; V2 _( H- `& Y1 L+ ~2 u6 H. `' h下面的代码是用VBA编制的
  1. ; p: p: y& R+ J
  2.     Dim P1(2) As Double, P2(2) As Double, P As Variant" j  T7 T$ p. m4 a% m9 F; N0 D
  3.     Dim L1 As AcadLine, L2 As AcadLine, L3 As AcadLine, L4 As AcadLine
    3 z& z1 T; B* {1 K. W2 B% W7 E
  4.     Dim L5 As AcadLine, L6 As AcadLine, L7 As AcadLine, L As Variant0 S+ A/ I) X; U+ l3 F/ ]' c0 c
  5.     Dim C1 As AcadCircle, C2 As AcadCircle, C3 As AcadCircle
    / ~8 b! _' W* J5 Q$ x) }
  6.     Dim R1 As Double, R2 As Double, R As Double
    7 a' I$ e- y4 |9 @3 F
  7.     $ V' d, |9 A/ i# e" P) n- P% P( `6 n9 m
  8.     '初始化迭代运算的边界
    , B' M% u) n' F/ O% I2 k
  9.     '下面运算中R为小圆半径- L- y! H9 S! g. A. y  L
  10.     'R1为下边界,采用默认值03 o+ o8 n* n: {7 b% j  F
  11.     'R2为上边界,根据本图实际情况采用20
    ; h6 k' g' Z# x" U: q
  12.     R2 = 20
    ; y) x5 b6 o, P7 `
  13.    
    # I8 c2 ^- a0 G4 U
  14.     With ThisDrawing' A) r, ]9 G3 B8 e
  15.         '画四边形9 g( W" r4 N; G1 |' t8 r
  16.         '
    . B5 P9 t% |1 c! g  d. {  j
  17.         'P1为原点,采用默认值
    ! I# d: P: j$ I' n: L
  18.         'P2点赋值为(100,0),其中Y坐标和Z坐标都采用默认值8 V$ m6 |/ P$ P5 E9 z7 V& s( o+ T
  19.         P2(0) = 100
    * d" U9 B" C; \  b& K& \' I
  20.         '画下方长度为100的水平直线L1,起点为原点P1,端点为P2(100,0)
    " y* \2 E, F3 V" |' Q; y
  21.         Set L1 = .ModelSpace.AddLine(P1, P2)' `9 J1 ?( m; F5 v- R
  22.         '以P2(100,0)点为圆心,半径90画圆C1' |; ^8 W  @; j; L6 o1 v, D
  23.         Set C1 = .ModelSpace.AddCircle(P2, 90)
    0 k% R# z# ]) @4 K% `
  24.         'P2点重新赋值为(0,70)9 k4 B9 `! T8 d( Q# X. Y" t
  25.         P2(0) = 0: P2(1) = 70
    * @5 d" J8 S5 i
  26.         '画左侧长度为70的垂直直线L2,起点为原点P1,端点为P2(0,70)  X$ X3 }, Y4 G0 x6 f1 Q0 E+ p
  27.         Set L2 = .ModelSpace.AddLine(P1, P2)
    + X& U- A/ M4 R7 b* k9 [; c% K
  28.         '以P2(0,70)为圆心,半径80画圆C2
    ) `! W5 f* E8 v0 E* p! e2 Q" I
  29.         Set C2 = .ModelSpace.AddCircle(P2, 80)
    $ Q3 v1 h0 h8 u6 y# O: u- G
  30.         '获得圆C1和圆C2的交点坐标数组P( [8 N! b& `/ V8 ~6 I  X' V8 I0 V
  31.         'C1与C2共有两个交点,因此数组P内共有6个元素9 j  k6 P6 h) m' Y" b
  32.         '前3个是其中一个交点的三坐标,后3个是另一个交点的三坐标
    : |4 I- I: Q% m! S% [
  33.         P = C1.IntersectWith(C2, acExtendNone)8 u. h! Y+ l" z- Z+ s4 Y" I0 N
  34.         '检查两个交点中哪一个的Y坐标较大,即将该交点坐标赋值给P2. G6 m2 K0 {. `
  35.         If P(1) > P(4) Then- ~" _& a, f9 U! F% _) t7 X- \
  36.             P2(0) = P(0): P2(1) = P(1)
    . r1 i' D4 D5 G! Z2 ^7 l
  37.         Else( u0 d. X5 Z  ?
  38.             P2(0) = P(3): P2(1) = P(4)
    . Z8 t/ Z/ [" {" l& `5 P
  39.         End If6 }/ I% m' j$ {  i
  40.         '画右侧直线L3,起点为下方水平直线L1的端点,端点为两圆上方交点P28 ]; B' A  a4 y
  41.         Set L3 = .ModelSpace.AddLine(L1.EndPoint, P2): q: c: e6 ^  s0 N. u5 K0 U
  42.         '画上方直线L4,起点为左侧垂直直线L2的端点,端点为两圆上方交点P2- C& @* D8 S9 Y" f. B' p$ a2 ^
  43.         Set L4 = .ModelSpace.AddLine(L2.EndPoint, P2)* `7 n% z% \* L  v' E/ Y7 W( W% Y
  44.         '原位复制下方水平直线1,得到新直线L5
      w( z- M7 q) j! B! N
  45.         Set L5 = L1.Copy3 `* J! n4 Q. m
  46.         '旋转L5,以下方水平直线L1和上方直线L4的延长线交点为基点,旋转角为上方直线L4角度的一半% W% B1 o) k+ }; Z
  47.         '此直线L5即为下方水平直线与上方直线L4之间的角平分线7 y7 E' Z8 G1 W( y5 N* U8 g6 c+ Y
  48.         L5.Rotate L1.IntersectWith(L4, acExtendBoth), L4.Angle / 21 ~' R' K7 Q( |4 S* i* f( q
  49.         '随便画一个圆L3备用(用作将来的大圆)! b5 l3 E' L/ k: W2 d& u
  50.         Set C3 = .ModelSpace.AddCircle(P1, 1)/ x5 M9 {0 [1 z+ c8 p" M
  51.         '复制角平分线L5,得到新直线L6备用(用作两小圆圆心连线的垂直平分线)
    5 l- `1 s/ F4 _, O$ }9 U0 S
  52.         Set L6 = L5.Copy
    9 b  G+ \0 w3 a( a
  53.         
    / R0 v0 s/ e7 I
  54.         '下面迭代运算,寻找合适的圆
    1 ]3 }. X2 i0 h3 M7 x+ n
  55.         Do( r2 H% \7 `  s+ e
  56.             '以两个边界的平均(中间)值为小圆半径
    5 i$ A1 @# S6 J5 ~$ y8 T
  57.             R = (R1 + R2) / 23 U7 Z+ V5 K5 h3 e" d: m6 m
  58.             '向上偏移下方水平直线L1,距离为R,得到新直线数组L
    ; N5 p* H& `7 {7 e0 C- L
  59.             '由于偏移直线只能得到一条新直线,所以数组L中只有一个元素即直线L(0): i# r4 R# H' P* z6 h5 g+ O1 g$ T2 e! f
  60.             L = L1.Offset(R)
    * ^1 I- j5 L6 L9 u" }# U) s0 o
  61.             '将直线L(0)赋值给L7
    , X- t3 P& j# |
  62.             Set L7 = L(0)7 f! @$ C3 Q1 _3 U+ D/ h
  63.             '向右偏移左侧垂直直线L2,距离为R,得到新直线数组L,其中新直线为L(0)
    9 s  \7 K& B& F% K3 h+ w
  64.             L = L2.Offset(-R)
    ! v5 W+ ~2 b1 n
  65.             '把圆C1的圆心移到偏移得到的两条新直线的交点
    7 c+ P& m; v. V" N6 i
  66.             C1.Center = L7.IntersectWith(L(0), acExtendNone)' ]7 e- Y5 [1 ^/ }* n# `2 z! ~( ~
  67.             '圆C1的半径改为R
    & e+ ]& R! V0 L* d
  68.             '此圆即为左下方半径为R的小圆" ~; a  v- D2 M
  69.             C1.Radius = R
    ' e7 L9 `" }6 Q5 m
  70.             '删除两条偏移得到的新直线5 x  |7 ?$ p. V! d
  71.             L7.Delete- d! K0 f/ {+ I# c
  72.             L(0).Delete
    5 L$ k2 K% V4 G0 n9 ^
  73.             '用同样的方法得到右上方半径为R的小圆,然后删除辅助线, h& [* k! f5 s- g9 f0 S
  74.             L = L3.Offset(R)
    ; l9 q3 D! Z, B1 X% I
  75.             Set L7 = L(0)& p4 l6 g& d, d. L7 B
  76.             L = L4.Offset(-R)
    + ^/ v- x0 S: k# R
  77.             C2.Center = L7.IntersectWith(L(0), acExtendNone)" s* f, k8 G; k+ C& Z' o( t
  78.             C2.Radius = R/ s5 s# R. k* D2 T5 C5 K8 `
  79.             L7.Delete- d3 u% i% N0 G5 z
  80.             L(0).Delete4 ]- N3 I" a  l4 u
  81.             '将直线L6的起点移到左下方小圆C1的圆心1 \0 d; [" w6 K8 u& A5 R6 L
  82.             L6.StartPoint = C1.Center
    : |9 o) u( r. \* b  Y/ [; n
  83.             '将直线L6的端点移到右上方小圆C2的圆心
    ( z3 F8 h; b  B7 ]  z5 T
  84.             L6.EndPoint = C2.Center3 y/ K. a( i( s2 n" z# m
  85.             '计算直线L6的中点并赋值给P2点. U& b$ [% q, I* o  Q
  86.             P2(0) = (L6.StartPoint(0) + L6.EndPoint(0)) / 2
    , ]$ ^  M) ?& O! d8 j' K
  87.             P2(1) = (L6.StartPoint(1) + L6.EndPoint(1)) / 2* K2 M" l2 h) H% C* ^3 X5 h
  88.             '旋转直线L6,基点为其中点,角度90度
    % y( X9 ^. L* m5 Q
  89.             '此直线即为两小圆圆心连线的垂直平分线; E$ G) a, b) _& L3 I% Q8 l
  90.             L6.Rotate P2, .Utility.AngleToReal(90, acDegrees)7 B/ `4 h0 j+ Q- Z4 }1 f$ g/ }3 j
  91.             '大圆C3圆心移到垂直平分线L6和角平分线L5的交点
    4 q7 ?' u. W- c6 `/ M2 K
  92.             C3.Center = L6.IntersectWith(L5, acExtendBoth)# C: G+ D' O$ U  M) e2 _
  93.             '大圆C3半径改为等于其圆心Y坐标,此时大圆C3与上下两直线相切
    . E; e' r% o& i2 ~6 l& z1 c" G7 |
  94.             C3.Radius = C3.Center(1)3 z% c# z1 [( ~
  95.             '获得大圆C3与左下方小圆C1的交点数组
    & H7 E+ g# |) y% F" R8 q
  96.             P = C3.IntersectWith(C1, acExtendNone)! h& ?, |7 x* A. q3 I3 Z
  97.             '检查大圆C3与左下方小圆C1是否只有一个交点(即相切)
    . `$ N9 j# F( F: ~* t
  98.             '同时检查迭代运算是否已到极限
    & o- Y* D8 R5 w. c
  99.             If UBound(P) = 2 Or R = R1 Or R = R2 Then
    5 q- t8 ~! a4 c% n( c: ?9 ^# f7 C
  100.                 '当两圆相切或迭代运算已到极限时结束循环  o9 x- M7 w8 C0 _
  101.                 Exit Do% e" {6 `; M7 y* A/ l$ z% M
  102.             ElseIf UBound(P) = -1 Then' k& l/ ~* k6 l' E
  103.                 '当两圆没有交点时说明小圆半径太小' o3 K4 K+ X! y* h5 c
  104.                 '把小圆半径做为新的迭代运算的下边界,重新尝试
    ; N  T8 z/ O* F# C. |7 Y+ l
  105.                 R1 = R4 N" n1 C9 }6 {8 k5 b+ c
  106.             Else6 h" W# y( X1 q2 l
  107.                 '当两圆有两个交点时说明小圆半径太大8 O  A- N3 S& G) d0 j8 A
  108.                 '把小圆半径做为新的迭代运算的上边界,重新尝试9 z9 Q; Y9 r) m% |6 ?
  109.                 R2 = R
    & X9 R  `1 |" j
  110.             End If
    7 \% N" I% ~  z8 U# H
  111.         Loop
    7 j$ [; \. x8 i
  112.         '图形完成后删除角平分线和垂直平分线  y, ^' h# i7 T3 |/ m# P- f
  113.         L5.Delete
    ! m7 f. A- J8 N8 @
  114.         L6.Delete3 w$ g+ |* x& a8 {
  115.     End With
    - o3 C) X: U; y& [
复制代码
运算上面的代码可以直接得到整个图形
; A( P: l0 T2 V% D6 m1 D有兴趣的朋友可以用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 )

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