QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

楼主: q542748861
收起左侧

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

[复制链接]
发表于 2011-4-1 17:58:10 | 显示全部楼层 来自: 中国浙江温州
三点画圆
' G! z) W. |3 U9 {+ i( m9 y, 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以上的版本画  
! M9 ]2 I& r1 U' W& Q& `0 N   那样就没意思了!
发表于 2011-4-3 13:28:39 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。
( s/ H5 s* E7 \2 ~9 x用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。8 _; |& s/ N. G: x8 M
如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。
发表于 2011-4-3 13:33:42 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。! u( U( ]$ T) |* w
D.JPG
发表于 2011-4-3 16:57:22 | 显示全部楼层 来自: 中国江苏扬州
应该只有唯一解,大圆直径78.78,小圆直径16.27
发表于 2011-4-4 13:11:05 | 显示全部楼层 来自: 中国安徽合肥
32# 12fzj
: m% Y" x, y4 q" f" \( k" b, ]  z3 [$ v2 C' G, R: j; a
应该只有唯一的解,下图是用“破衣”画的。0 Y3 K4 ~! i+ y: z& j/ ~% z; D
快照1.png
发表于 2011-8-11 23:11:58 | 显示全部楼层 来自: 中国江苏
我画的给大家分享一下,具体如下:" w1 e% X6 h6 t; @
1、画一条中心线,然后以中心为镜像轴作镜像,具体如下图:( T, y0 ]9 k, H0 I8 `
无标题1.jpg     无标题2.jpg
" H. N& x9 I% Q* Q+ w2、以中间位置画圆(用相切、相切、相切画),具体如下图:
! P% }6 @9 r# @, } 无标题3.png 6 V8 @9 n$ k) S7 w. Y4 C* {" `
3、用相切、相切、相切画其它两个圆,如下图:; |) b! p- Z- `9 v4 R
无标题4.jpg
& O4 ]. m" B. t9 n% o完成尺寸如下图:) M( U8 i( f- L; D2 J
无标题5.jpg
发表于 2011-8-15 19:48:18 | 显示全部楼层 来自: 中国浙江金华
35# 唐依依
/ v% ~9 m, v1 O1 @& V' b高手果然高手,不过这样的几何题最好给个证明,不然实在看着吃力
发表于 2011-8-19 10:34:55 | 显示全部楼层 来自: 日本
用的日语cad,很多功能不会用。
; s- L7 M* L) Y. r$ }附件内容自己看吧,pdf和cad是同一个图。
$ t* w* F" N8 a+ g7 e5 @( J用的几何画法,cad只是辅助,理论上任何画图软件用这方法都行。0 J( n$ P7 q7 A% j' u
另外,4边形是我随便画的,任何尺寸的4边形用这方法都能作出你想要的那1大2小圆。; j% d1 E. e7 F4 Y$ ~1 r0 f8 f
就是比较花时间。

方法.pdf

240.43 KB, 下载次数: 24

画图法.dwg

43.6 KB, 下载次数: 1

发表于 2011-8-19 15:06:12 | 显示全部楼层 来自: 中国北京
35# 唐依依 $ b3 s4 H6 [* o, k. Y% J( v4 i

! q" _" H; b) b! ~" M唐总,你的这个做法应该不是正解,你把精度设置成四位看看,差很多哦~8 L2 N' n& v- `' w8 h0 @
) p# l- O$ \8 J8 _
不过想了很久除了用CAD的约束功能也没用其他方法做出来,
8 R' A9 O" Z3 J8 ~) n0 L  T等待高手解决。
发表于 2011-8-19 15:55:53 | 显示全部楼层 来自: 日本
嚓~~~大圆没点到圆心,失误 & J" b, w, ~5 p% ?
改正后的图附上,应该ok了。6 D& P: n7 T& Y
用这办法,就是手工图也能在有圆规等画图工具的辅助下作出想要的大小圆。

画图法.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# 唐依依 ' N; n  T: y" C# @# Y5 ^' ~
39# sylpw ; B- G1 z1 Q  b! k
( X& J+ r0 {+ b1 D3 }6 n$ M
35楼,39楼均是正解,我自己试过了,高手啊!佩服
发表于 2011-8-25 13:36:43 | 显示全部楼层 来自: 中国香港
与时俱进嘛,既然高版本的能画出来,为什么还要用低版本的呢?
发表于 2011-8-27 13:36:04 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-8-27 13:41 编辑
8 K2 J/ N. |4 G( U+ P& {# i4 _* v( v5 T" B- _- r/ g
从代数式看,本图应该没有二维几何画法.上面几位朋友提供的方法也只是比较接近结果而已.
1 X1 f  R8 |! O这个图,对于2010及以上版本可以用参数方法画出;对于2009及以下版本,可以使用逼近法:包括轨迹法,精确选点法和编程法等等.6 x( {' |# [- q+ Y
下面着重讨论轨迹法和编程法% l; m, P! {$ x$ L  H
一.轨迹法6 m, c* y4 j0 m5 `
首先画出四边形.再在左下角和右上角用"相切,相切,半径"方法分别画一个半径为5的小圆,再用"三相切"方法画出与两个小圆和底部水平直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为8的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为10的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆.再用"三点"方法通过三个大圆的圆心画出轨迹圆.如图
7 k' n' j/ l; ]7 k, { Untitled-1.gif   Q2 i5 W3 p3 ?7 |0 t4 e$ b
删除图形上所有的圆,画出上下两直线的角平分线.再以角平分线和轨迹圆交点为圆心画出与上下两直线均相切的大圆,再用"三相切"方法画出两个小圆.如图& D+ A. i8 W5 Q, ^# A8 G* z
Untitled-2.gif / T- B4 c* m# C5 u6 P& n  ^' l
用"特性"管理器分别查看两小圆的半径,结果分别为8.1363和8.1366.已经很接近了.
( [: G. D+ X1 d3 l如果认为精度不理想,可以用更接近这个结果的半径值重复上面的过程,就可以得到更精确的结果.' i, E; H& {5 A! f& Q

5 B7 k  m" T6 Q0 m上面的方法中,除了用"三点"画圆方法得到轨迹外,还可以用样条曲线画轨迹.道理是一样的.. q; r( D* c  V( @
9 G1 [* j% I+ P* E
二.编程法( v  w8 b3 W4 p
可以把编程法理解为自定义的参数画法.它实质上也是逼近法的一种,只是用自行编制的程序代替人工完成逼近过程.这种方法可以达到逼近的最大极限,其精度甚至比在电脑上用几何画法画出的的实际结果还要高./ Q# H. q% S( t
下面的代码是用VBA编制的

  1. / P) {; B. t$ i
  2.     Dim P1(2) As Double, P2(2) As Double, P As Variant
    4 T! ^. \' `4 T
  3.     Dim L1 As AcadLine, L2 As AcadLine, L3 As AcadLine, L4 As AcadLine3 \4 o- B: @" A" S* w; }
  4.     Dim L5 As AcadLine, L6 As AcadLine, L7 As AcadLine, L As Variant' C2 R2 N5 M- R( C5 [
  5.     Dim C1 As AcadCircle, C2 As AcadCircle, C3 As AcadCircle6 H0 [  i$ v! \" F6 ~$ h( i
  6.     Dim R1 As Double, R2 As Double, R As Double
    9 }& [0 n% f  k# u# k1 ~4 v9 u
  7.    
    2 c; S; g: B" j6 Y" r( g( c, @: Z; A
  8.     '初始化迭代运算的边界
    * C: X. f, R1 L. x
  9.     '下面运算中R为小圆半径! X/ p( d8 H- z/ G! m" D, ~
  10.     'R1为下边界,采用默认值0
    % ?4 w) r  M' a
  11.     'R2为上边界,根据本图实际情况采用20
    4 I1 v6 Z% K! J
  12.     R2 = 20
    . a) n- d  j' R) r% X# U5 [2 E
  13.    
    , x6 R! d, |# L, l
  14.     With ThisDrawing0 g  q) H3 r, p0 u, Z
  15.         '画四边形/ \/ B  O* R, p4 ~( h
  16.         '
    % b+ J, ^" P( J" \" p) q7 N$ l
  17.         'P1为原点,采用默认值0 f. P% K) L  G
  18.         'P2点赋值为(100,0),其中Y坐标和Z坐标都采用默认值4 U( O  X/ [' G. c6 D) _. }
  19.         P2(0) = 100
    ; `: y" q4 D. t1 A% a
  20.         '画下方长度为100的水平直线L1,起点为原点P1,端点为P2(100,0)
    + U; {. t' D" |7 T8 L2 b1 u
  21.         Set L1 = .ModelSpace.AddLine(P1, P2)
    5 I' \) }4 W+ F2 S' W8 N
  22.         '以P2(100,0)点为圆心,半径90画圆C1
    $ E0 p7 J. X; r4 z* h: l! l/ k
  23.         Set C1 = .ModelSpace.AddCircle(P2, 90): U3 U- ^/ _, D+ Z: e
  24.         'P2点重新赋值为(0,70)* A5 S7 m8 L2 r1 g2 d/ ^
  25.         P2(0) = 0: P2(1) = 70
    * ~( f! r- d& F" a8 s$ j
  26.         '画左侧长度为70的垂直直线L2,起点为原点P1,端点为P2(0,70)) Y7 a: u! U. u) E6 q- \
  27.         Set L2 = .ModelSpace.AddLine(P1, P2)
    $ }/ k/ C/ m- N+ O. m, f* b
  28.         '以P2(0,70)为圆心,半径80画圆C2& f9 z3 r( T9 V. {6 s9 X9 \
  29.         Set C2 = .ModelSpace.AddCircle(P2, 80)
    , D- g! Z# L+ W* I2 @
  30.         '获得圆C1和圆C2的交点坐标数组P
    # w. P: K0 s  G7 ^
  31.         'C1与C2共有两个交点,因此数组P内共有6个元素  p9 T* j5 {4 l3 M& n( ?
  32.         '前3个是其中一个交点的三坐标,后3个是另一个交点的三坐标
    $ ]1 [2 c3 H# V( [( P* R
  33.         P = C1.IntersectWith(C2, acExtendNone), f' L/ \" b6 e+ R
  34.         '检查两个交点中哪一个的Y坐标较大,即将该交点坐标赋值给P2( w  V( P! F4 @% o) @
  35.         If P(1) > P(4) Then
    , g$ [' e. _( D# K- v" Y
  36.             P2(0) = P(0): P2(1) = P(1)' ^2 j% e0 Z2 o
  37.         Else4 R( A9 A3 p9 Y+ N1 ^
  38.             P2(0) = P(3): P2(1) = P(4)
    $ V3 J  k( Y) d4 q
  39.         End If0 l, I2 u& i' T; I) V2 o! w
  40.         '画右侧直线L3,起点为下方水平直线L1的端点,端点为两圆上方交点P2- ?+ U: R( L0 V9 I  Z
  41.         Set L3 = .ModelSpace.AddLine(L1.EndPoint, P2)
    : ^2 O" s: d2 \/ g, E2 r1 R
  42.         '画上方直线L4,起点为左侧垂直直线L2的端点,端点为两圆上方交点P2
      ^# O/ {7 Z9 z8 P. m% b
  43.         Set L4 = .ModelSpace.AddLine(L2.EndPoint, P2)
    " U4 h/ q0 r' T$ l/ z5 b
  44.         '原位复制下方水平直线1,得到新直线L58 X; l; ^- I$ S! I  d; l
  45.         Set L5 = L1.Copy
    1 D3 M, ]" G8 O
  46.         '旋转L5,以下方水平直线L1和上方直线L4的延长线交点为基点,旋转角为上方直线L4角度的一半# i1 w0 j5 w& C! h
  47.         '此直线L5即为下方水平直线与上方直线L4之间的角平分线
    , q9 I2 B- m* z2 t  ?
  48.         L5.Rotate L1.IntersectWith(L4, acExtendBoth), L4.Angle / 2! S; V! a4 k7 l( g* P: t3 d" }2 w
  49.         '随便画一个圆L3备用(用作将来的大圆)
    , k0 Q. P4 V: B
  50.         Set C3 = .ModelSpace.AddCircle(P1, 1)! k4 f! l9 O: a: R
  51.         '复制角平分线L5,得到新直线L6备用(用作两小圆圆心连线的垂直平分线)
    ) a7 h  d% W9 L5 q$ q. K/ U1 z
  52.         Set L6 = L5.Copy
    : b' \2 z9 e) d  N9 e$ |" f0 ]
  53.         7 p% j+ F5 p8 t0 X
  54.         '下面迭代运算,寻找合适的圆
    ' e4 z) o4 W& i% k' p
  55.         Do
      Y3 j0 D4 c/ a& z0 t/ }% O) ?
  56.             '以两个边界的平均(中间)值为小圆半径$ F$ \' Q7 z4 w+ g' ^
  57.             R = (R1 + R2) / 23 {, W. W+ ~9 F
  58.             '向上偏移下方水平直线L1,距离为R,得到新直线数组L3 ^& |+ o$ p+ _) }" M! H
  59.             '由于偏移直线只能得到一条新直线,所以数组L中只有一个元素即直线L(0)
    : j3 F+ }. L7 n5 t9 v
  60.             L = L1.Offset(R)
    & ?5 d; z+ j0 D0 |6 w/ \
  61.             '将直线L(0)赋值给L76 q5 g& K* v( A, p) f* C2 A  p" M
  62.             Set L7 = L(0)
    * }* j! V' X  s
  63.             '向右偏移左侧垂直直线L2,距离为R,得到新直线数组L,其中新直线为L(0): \4 g1 j0 m% ~( q4 F- j
  64.             L = L2.Offset(-R)
    8 e/ z& u9 s- _0 N. L2 @
  65.             '把圆C1的圆心移到偏移得到的两条新直线的交点
    7 y5 u. d) }9 p  K1 x
  66.             C1.Center = L7.IntersectWith(L(0), acExtendNone)2 ~( W, [) O4 a4 Y: V7 L  f. F
  67.             '圆C1的半径改为R- i2 q5 C8 J7 U5 o9 L
  68.             '此圆即为左下方半径为R的小圆
    9 i) V6 ?0 Q2 M. L* v& I% G3 ^9 N
  69.             C1.Radius = R4 c; g0 X8 H* T
  70.             '删除两条偏移得到的新直线4 ~& |. d6 z% M
  71.             L7.Delete
    , Z$ Z3 g# i. T
  72.             L(0).Delete* d& |; E5 t$ w8 j: G8 t
  73.             '用同样的方法得到右上方半径为R的小圆,然后删除辅助线4 ]+ @/ O8 j  Z1 ?3 M* e# w9 M3 e# V
  74.             L = L3.Offset(R)
    & R2 Z! [" `/ v7 E4 v. `1 m
  75.             Set L7 = L(0)
    . K) Y. ^- o/ |. W: t
  76.             L = L4.Offset(-R)8 @. Q! @( W7 _
  77.             C2.Center = L7.IntersectWith(L(0), acExtendNone)
    + o, r* S' l. ^% A; E4 t7 z
  78.             C2.Radius = R( K! s4 N! C) v, I" W0 q
  79.             L7.Delete
    4 W6 g5 X$ n' J/ w) o
  80.             L(0).Delete' Z- U/ |( u2 T
  81.             '将直线L6的起点移到左下方小圆C1的圆心) Z9 q4 F7 H: {4 F* C- L* }. F
  82.             L6.StartPoint = C1.Center
    * |; R2 i4 ?" g7 v0 P9 v+ @# y
  83.             '将直线L6的端点移到右上方小圆C2的圆心/ k4 ~1 N/ m' h5 m9 i
  84.             L6.EndPoint = C2.Center
    * \( p/ @4 ^. }3 L& N
  85.             '计算直线L6的中点并赋值给P2点
    1 i, B5 F) z) L; v
  86.             P2(0) = (L6.StartPoint(0) + L6.EndPoint(0)) / 2
    : x- P5 T' y- @2 b4 E+ _6 t  G: [  A
  87.             P2(1) = (L6.StartPoint(1) + L6.EndPoint(1)) / 2( O" V8 g* M4 o6 `+ Q/ ?" k8 C
  88.             '旋转直线L6,基点为其中点,角度90度
    6 Q3 E; {8 s% z* t; L! o
  89.             '此直线即为两小圆圆心连线的垂直平分线$ P, v6 J6 P/ B! S
  90.             L6.Rotate P2, .Utility.AngleToReal(90, acDegrees)3 A7 A" K0 B& A; b
  91.             '大圆C3圆心移到垂直平分线L6和角平分线L5的交点
      a: x3 S) k2 J8 l8 \
  92.             C3.Center = L6.IntersectWith(L5, acExtendBoth)1 \- k( n: ?9 y7 e" n" t1 E/ B
  93.             '大圆C3半径改为等于其圆心Y坐标,此时大圆C3与上下两直线相切, U! D5 ]# ^7 y0 d+ A
  94.             C3.Radius = C3.Center(1)
    " k# _% P# }. x& y! i  y( I& j
  95.             '获得大圆C3与左下方小圆C1的交点数组: K1 z, u  S/ ]4 x4 S! `2 F, ]- T
  96.             P = C3.IntersectWith(C1, acExtendNone)
    ; x8 ]' n8 U0 A) G* [+ }
  97.             '检查大圆C3与左下方小圆C1是否只有一个交点(即相切), w8 @9 w! u& D0 {) Z
  98.             '同时检查迭代运算是否已到极限" ~+ Y; {, V$ o( X# W
  99.             If UBound(P) = 2 Or R = R1 Or R = R2 Then! E7 L) @* a* O1 C' X- P# K6 ?9 [
  100.                 '当两圆相切或迭代运算已到极限时结束循环5 }0 s2 ~+ T0 ^9 O- u
  101.                 Exit Do
    % J( u2 I8 s! ~
  102.             ElseIf UBound(P) = -1 Then
    , Z: M8 u% ^: Q, Z. U4 r! T
  103.                 '当两圆没有交点时说明小圆半径太小1 R5 g! e9 O" ]
  104.                 '把小圆半径做为新的迭代运算的下边界,重新尝试
    % p! K! L4 ]" A$ P& W9 ?( d
  105.                 R1 = R  T9 y% k5 E, b4 O
  106.             Else
    / f+ E8 M, I; K! n, Y1 P% q
  107.                 '当两圆有两个交点时说明小圆半径太大+ f: [. M; a6 `- O' }) \6 u
  108.                 '把小圆半径做为新的迭代运算的上边界,重新尝试4 u( J/ }$ Q: R6 V" l
  109.                 R2 = R# V; p0 F  d( o+ b2 \* R" R
  110.             End If7 ^3 C( s5 m, P0 ?' Y5 ~
  111.         Loop5 P, I7 t: q& @! }/ W1 |5 S4 w
  112.         '图形完成后删除角平分线和垂直平分线
    2 l5 y$ J. n4 D# k$ Y
  113.         L5.Delete0 m4 A* P, E, d- r9 D9 }
  114.         L6.Delete  p  S, L1 U9 _: K4 a7 }! T3 w! W( V
  115.     End With+ J( Q! |  {0 r4 I
复制代码
运算上面的代码可以直接得到整个图形4 y( u; _9 S* i. G
有兴趣的朋友可以用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 )

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