QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

楼主: q542748861
收起左侧

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

[复制链接]
发表于 2011-4-1 17:58:10 | 显示全部楼层 来自: 中国浙江温州
三点画圆
1 E5 w/ f3 V" G0 n都在线上捕捉切点就可以了啊
 楼主| 发表于 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以上的版本画  7 [6 t$ J; a" G* b# j/ C
   那样就没意思了!
发表于 2011-4-3 13:28:39 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。* r9 ]3 d+ O9 c8 e7 U( }
用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。
) t7 L- M) O2 h1 P& ^9 p  `如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。
发表于 2011-4-3 13:33:42 | 显示全部楼层 来自: 中国辽宁营口
有很多答案,就是说答案并不唯一,从制图上来看,这样的题没有实际意义。用CAD的相切、相切、直径,和相切、相切、相切命令,很容易画出来。如果用solidworks三维软件更容易画出来,只不过这样的草图线段是蓝色的,草图并没有被完全定义。
. P8 Z' ~- S7 j D.JPG
发表于 2011-4-3 16:57:22 | 显示全部楼层 来自: 中国江苏扬州
应该只有唯一解,大圆直径78.78,小圆直径16.27
发表于 2011-4-4 13:11:05 | 显示全部楼层 来自: 中国安徽合肥
32# 12fzj ' ?- k! N" l$ A( i" }  E% E

$ f- Q' m0 V3 Z3 e* D应该只有唯一的解,下图是用“破衣”画的。; S! }4 c+ W& v  o& ?
快照1.png
发表于 2011-8-11 23:11:58 | 显示全部楼层 来自: 中国江苏
我画的给大家分享一下,具体如下:
5 h# m. }, D  T& E8 ?1、画一条中心线,然后以中心为镜像轴作镜像,具体如下图:' K% G- b1 `' w
无标题1.jpg     无标题2.jpg . V. N' x8 d, Y# B" ~2 `
2、以中间位置画圆(用相切、相切、相切画),具体如下图:
5 d) _7 F4 ~8 }# E, _  r- Z2 i8 F 无标题3.png ; l! n9 y! _; b8 \. \# C
3、用相切、相切、相切画其它两个圆,如下图:' ~8 _3 f; v* p
无标题4.jpg
0 C" {. G* Y' C# U完成尺寸如下图:
  |" g$ [+ t# l9 x& p0 e& ^ 无标题5.jpg
发表于 2011-8-15 19:48:18 | 显示全部楼层 来自: 中国浙江金华
35# 唐依依
6 l: s' O/ R2 d8 a高手果然高手,不过这样的几何题最好给个证明,不然实在看着吃力
发表于 2011-8-19 10:34:55 | 显示全部楼层 来自: 日本
用的日语cad,很多功能不会用。: \5 m7 ]! Y1 q! `- ^7 W5 L
附件内容自己看吧,pdf和cad是同一个图。& R' r( t( L; C! q5 ~
用的几何画法,cad只是辅助,理论上任何画图软件用这方法都行。
$ g& l" ^% Q' Z4 D7 u, @4 {2 J另外,4边形是我随便画的,任何尺寸的4边形用这方法都能作出你想要的那1大2小圆。
/ B4 a/ m% \. p3 n' @; w就是比较花时间。

方法.pdf

240.43 KB, 下载次数: 24

画图法.dwg

43.6 KB, 下载次数: 1

发表于 2011-8-19 15:06:12 | 显示全部楼层 来自: 中国北京
35# 唐依依
  T+ G% B+ U% g
0 g. l# {% M$ J* c) q' k) N1 V9 y唐总,你的这个做法应该不是正解,你把精度设置成四位看看,差很多哦~
7 F% `3 `  S8 U; T0 L5 _
) X+ x; F1 g/ ?7 |, A4 I& I不过想了很久除了用CAD的约束功能也没用其他方法做出来,' W. _4 b+ {$ }( n& K/ i
等待高手解决。
发表于 2011-8-19 15:55:53 | 显示全部楼层 来自: 日本
嚓~~~大圆没点到圆心,失误
7 r. K% X- I, @$ a' M3 g改正后的图附上,应该ok了。# O$ |0 J) }1 c' m% b, m
用这办法,就是手工图也能在有圆规等画图工具的辅助下作出想要的大小圆。

画图法.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# 唐依依 6 f8 z: ?( Q! R% f
39# sylpw 6 |+ ?" j3 C6 r: z
# C" J; {$ z' c1 N" \% F
35楼,39楼均是正解,我自己试过了,高手啊!佩服
发表于 2011-8-25 13:36:43 | 显示全部楼层 来自: 中国香港
与时俱进嘛,既然高版本的能画出来,为什么还要用低版本的呢?
发表于 2011-8-27 13:36:04 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-8-27 13:41 编辑
% [0 }2 C% D9 r$ |4 S" R
2 c7 \1 f4 x3 Q; B% J) f/ a+ t从代数式看,本图应该没有二维几何画法.上面几位朋友提供的方法也只是比较接近结果而已.( T  a/ X' t- \! L* r7 ~8 M! P
这个图,对于2010及以上版本可以用参数方法画出;对于2009及以下版本,可以使用逼近法:包括轨迹法,精确选点法和编程法等等.6 A, \% t) Y% _: b2 }3 W' _) x
下面着重讨论轨迹法和编程法& [$ A% T6 w6 _/ \' F- Y! k
一.轨迹法
) R- P- W/ k& X, h首先画出四边形.再在左下角和右上角用"相切,相切,半径"方法分别画一个半径为5的小圆,再用"三相切"方法画出与两个小圆和底部水平直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为8的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆;然后再在左下角和右上角用"相切,相切,半径"分别画一个半径为10的小圆,再用"三相切"方法画出与这两个小圆和底部直线相切的大圆.再用"三点"方法通过三个大圆的圆心画出轨迹圆.如图2 ~8 a1 @3 b1 |5 Z
Untitled-1.gif
2 S: u2 i3 `  o, J删除图形上所有的圆,画出上下两直线的角平分线.再以角平分线和轨迹圆交点为圆心画出与上下两直线均相切的大圆,再用"三相切"方法画出两个小圆.如图8 {3 P6 D9 ?( ?5 p7 u9 R3 o  h8 y
Untitled-2.gif $ ^$ K3 K# q* |) N8 p6 A0 {7 s
用"特性"管理器分别查看两小圆的半径,结果分别为8.1363和8.1366.已经很接近了.
- q/ T  s" _: k0 C$ w; ?如果认为精度不理想,可以用更接近这个结果的半径值重复上面的过程,就可以得到更精确的结果.
- J: _1 }% q8 C5 p$ e7 n$ g
1 O7 W# N2 {) ?0 b上面的方法中,除了用"三点"画圆方法得到轨迹外,还可以用样条曲线画轨迹.道理是一样的., K& C: P* t1 c4 a0 m
$ _& L- n: G% i/ S) N
二.编程法1 w4 g( z8 F/ a  e
可以把编程法理解为自定义的参数画法.它实质上也是逼近法的一种,只是用自行编制的程序代替人工完成逼近过程.这种方法可以达到逼近的最大极限,其精度甚至比在电脑上用几何画法画出的的实际结果还要高.
6 d4 }; F4 m( I3 A+ ^下面的代码是用VBA编制的
  1. # R: C# M' g3 m. S. Q
  2.     Dim P1(2) As Double, P2(2) As Double, P As Variant
    7 v2 [* y& @% }. ^
  3.     Dim L1 As AcadLine, L2 As AcadLine, L3 As AcadLine, L4 As AcadLine, e, B' R# b& n! ]
  4.     Dim L5 As AcadLine, L6 As AcadLine, L7 As AcadLine, L As Variant2 i% J. v# X5 h8 N
  5.     Dim C1 As AcadCircle, C2 As AcadCircle, C3 As AcadCircle
    - B& f( C+ `) \: O" ]( s/ J( E8 @
  6.     Dim R1 As Double, R2 As Double, R As Double
    9 q$ B! X  K3 L% v
  7.    
    & `8 F, C  i- F, j/ k2 T
  8.     '初始化迭代运算的边界' b5 Y( g& S) o6 z# ?9 |, |( I
  9.     '下面运算中R为小圆半径
    3 J) l4 I! \) O4 {
  10.     'R1为下边界,采用默认值0
    4 O1 ~7 [) e; c+ \9 a
  11.     'R2为上边界,根据本图实际情况采用20
    / F7 O" ~! J5 z& o. q0 F
  12.     R2 = 20. y# ?) r' z3 c" X5 Q
  13.     $ l2 h/ X( z) A1 D4 A& U5 \9 H8 ^
  14.     With ThisDrawing
    - k+ g$ j1 v0 {; G
  15.         '画四边形( z3 C" b8 @6 ?4 s+ F* [
  16.         '" H4 N# [6 u; }" [/ h
  17.         'P1为原点,采用默认值
    . |: @" N! F1 [
  18.         'P2点赋值为(100,0),其中Y坐标和Z坐标都采用默认值
    " W7 k4 Y8 K0 L& c7 i
  19.         P2(0) = 100. H/ ^# M; o1 p% w
  20.         '画下方长度为100的水平直线L1,起点为原点P1,端点为P2(100,0)
    & F% B0 V( v( u
  21.         Set L1 = .ModelSpace.AddLine(P1, P2)* q# Z2 c/ z) g7 N+ C7 U
  22.         '以P2(100,0)点为圆心,半径90画圆C1' `: I, b3 r: s4 y. a1 O5 Z
  23.         Set C1 = .ModelSpace.AddCircle(P2, 90)
    0 J. q& \* W+ ]& Z, }. \
  24.         'P2点重新赋值为(0,70)1 Q1 R, r4 g" Q1 @* L/ M8 \: r
  25.         P2(0) = 0: P2(1) = 70# t: |: P$ y( h: S
  26.         '画左侧长度为70的垂直直线L2,起点为原点P1,端点为P2(0,70)2 e6 s) {8 H) w: R: {
  27.         Set L2 = .ModelSpace.AddLine(P1, P2)
    : X% M9 d2 |* h+ s- y) a  p
  28.         '以P2(0,70)为圆心,半径80画圆C2
    / z9 K" V6 B6 Z
  29.         Set C2 = .ModelSpace.AddCircle(P2, 80)
    0 O+ B, R' ]* R+ z( v; }
  30.         '获得圆C1和圆C2的交点坐标数组P: v; V1 B& P  O; {  |/ F  |
  31.         'C1与C2共有两个交点,因此数组P内共有6个元素8 s5 o9 \* p) h! e4 Z  Y- A
  32.         '前3个是其中一个交点的三坐标,后3个是另一个交点的三坐标
    ' b9 P* k( L3 n( X& l
  33.         P = C1.IntersectWith(C2, acExtendNone)8 g, g' `& c& D& |& ?2 L$ s) m: f
  34.         '检查两个交点中哪一个的Y坐标较大,即将该交点坐标赋值给P2
    / F! [" {: X# R7 `/ Z: M" k9 x4 r; Y
  35.         If P(1) > P(4) Then
    6 _. v% O0 n  x4 C0 R
  36.             P2(0) = P(0): P2(1) = P(1)0 K# d4 Y4 m2 S; s
  37.         Else
    8 X, I. f; b! z# {& r
  38.             P2(0) = P(3): P2(1) = P(4)& `) c2 A# K, X2 J+ ^
  39.         End If
    : n' i7 i3 q( _0 Z& z; b3 u
  40.         '画右侧直线L3,起点为下方水平直线L1的端点,端点为两圆上方交点P28 n. `3 d& G8 y: q
  41.         Set L3 = .ModelSpace.AddLine(L1.EndPoint, P2)
    0 G5 {8 l( ^5 N7 d* X! n
  42.         '画上方直线L4,起点为左侧垂直直线L2的端点,端点为两圆上方交点P2/ S( T2 Z: J" i9 l; s
  43.         Set L4 = .ModelSpace.AddLine(L2.EndPoint, P2)4 J3 `. w! Z4 {. }0 X
  44.         '原位复制下方水平直线1,得到新直线L5
    ; Y' Q0 b6 z# c: {
  45.         Set L5 = L1.Copy
    - C8 Y/ f$ n# y$ Z! i' @4 O# h$ D6 L
  46.         '旋转L5,以下方水平直线L1和上方直线L4的延长线交点为基点,旋转角为上方直线L4角度的一半
    ! v" ^: B4 x& Y# [% g
  47.         '此直线L5即为下方水平直线与上方直线L4之间的角平分线! {! `' m" }8 @- u' o
  48.         L5.Rotate L1.IntersectWith(L4, acExtendBoth), L4.Angle / 20 i* A) Z8 G8 b4 Q& A% y& z) x
  49.         '随便画一个圆L3备用(用作将来的大圆)
    % I7 V  Y- d. w' V
  50.         Set C3 = .ModelSpace.AddCircle(P1, 1)
    0 _7 D% V" v- r
  51.         '复制角平分线L5,得到新直线L6备用(用作两小圆圆心连线的垂直平分线)
    : r5 i- f6 M  a6 y
  52.         Set L6 = L5.Copy* J$ C$ C# w0 H% g" o/ Y1 ]
  53.         " v' ?2 G6 M9 i% ^. M, ]
  54.         '下面迭代运算,寻找合适的圆7 F* N6 ^) p- O% J7 N4 y
  55.         Do8 W, j: W+ @, L8 G: Q8 [" C. e" I2 \
  56.             '以两个边界的平均(中间)值为小圆半径
    " O% Q- _+ h! L- u# {
  57.             R = (R1 + R2) / 23 ^; b" Z+ B9 _! R
  58.             '向上偏移下方水平直线L1,距离为R,得到新直线数组L
    ) M& F7 [4 ]8 x$ n: M1 f0 T& K
  59.             '由于偏移直线只能得到一条新直线,所以数组L中只有一个元素即直线L(0)
    3 {; }/ R9 K7 d: N6 @2 A3 B& e2 V
  60.             L = L1.Offset(R)
    $ _  f. |* g, [$ E; t
  61.             '将直线L(0)赋值给L7+ p: o( _" E1 s
  62.             Set L7 = L(0)
    ; I- }! d; ?9 D! k( I4 W
  63.             '向右偏移左侧垂直直线L2,距离为R,得到新直线数组L,其中新直线为L(0)
    3 O9 F! x  g- H9 Q( X8 r  n8 m+ Y
  64.             L = L2.Offset(-R)- @2 v  Z% o) b! ]( S7 s
  65.             '把圆C1的圆心移到偏移得到的两条新直线的交点
    0 r9 [: @7 A% c8 e3 {& ?  j/ |
  66.             C1.Center = L7.IntersectWith(L(0), acExtendNone)
    / |$ @5 W9 I9 X; w' n0 z, m
  67.             '圆C1的半径改为R
    2 O; u3 H$ o1 ?! X! |0 M4 M
  68.             '此圆即为左下方半径为R的小圆% M: I( _2 D) q* U0 c9 i
  69.             C1.Radius = R
    # Q0 {+ D- f' h2 \$ m( b: P
  70.             '删除两条偏移得到的新直线+ F" X& C+ U4 e5 ~
  71.             L7.Delete
    ! m  x$ U' y$ V( x; u
  72.             L(0).Delete+ l3 G! `6 [) b; E  ?- a8 \
  73.             '用同样的方法得到右上方半径为R的小圆,然后删除辅助线
    : g. w2 U# E$ Y, t5 ~& O- X% [! D
  74.             L = L3.Offset(R)
    2 |2 u8 l: L4 r0 e' |, i
  75.             Set L7 = L(0)
    $ W/ Z: W! h4 e! N/ k% N+ j6 m6 z- S
  76.             L = L4.Offset(-R)! j% f- L" A) I* Y
  77.             C2.Center = L7.IntersectWith(L(0), acExtendNone)  J' i7 O- B% P4 A% v' d: Y
  78.             C2.Radius = R
    - [- p3 _3 d% k, t5 O
  79.             L7.Delete
    % `% u2 V# M0 z0 h' b0 t. g! W
  80.             L(0).Delete
    ! x, U; s  p, I5 @0 j% V, b
  81.             '将直线L6的起点移到左下方小圆C1的圆心
    + x# l9 }' \: z6 m* W  L5 y4 U
  82.             L6.StartPoint = C1.Center
    8 l& s" f0 p2 R' r* V# c; K! `2 [$ ^. t
  83.             '将直线L6的端点移到右上方小圆C2的圆心
    4 \1 W9 B9 U7 F! m0 |. Y
  84.             L6.EndPoint = C2.Center
    1 `/ Y* \5 \3 H) a& x( `
  85.             '计算直线L6的中点并赋值给P2点
    ) X- j  e! N* h/ ^1 J
  86.             P2(0) = (L6.StartPoint(0) + L6.EndPoint(0)) / 2/ K$ L; ~9 k2 j  P0 @/ |
  87.             P2(1) = (L6.StartPoint(1) + L6.EndPoint(1)) / 27 L! ~0 x( L; I; P) d
  88.             '旋转直线L6,基点为其中点,角度90度
    & A5 B6 G' B6 p5 p- C. ?6 H! Z
  89.             '此直线即为两小圆圆心连线的垂直平分线
    : v6 R* X, z' C' K
  90.             L6.Rotate P2, .Utility.AngleToReal(90, acDegrees)  w. X( G% \+ @" B+ G  X+ Z( |
  91.             '大圆C3圆心移到垂直平分线L6和角平分线L5的交点
    6 w; X  n6 I' X
  92.             C3.Center = L6.IntersectWith(L5, acExtendBoth)8 W. ?: s; V- ?/ Y3 X3 ~$ b
  93.             '大圆C3半径改为等于其圆心Y坐标,此时大圆C3与上下两直线相切. r6 {1 a6 ?' ^& S! z' \$ v3 ~1 M
  94.             C3.Radius = C3.Center(1)" `! _; `- T) o  u* p- V) o
  95.             '获得大圆C3与左下方小圆C1的交点数组- R2 V: x3 c+ o9 \$ s1 W
  96.             P = C3.IntersectWith(C1, acExtendNone)7 O, D- S2 Z" u
  97.             '检查大圆C3与左下方小圆C1是否只有一个交点(即相切)
      O" C  S! f% h  g
  98.             '同时检查迭代运算是否已到极限. E5 m( r; f9 C5 i
  99.             If UBound(P) = 2 Or R = R1 Or R = R2 Then
    " z# s0 j: s! Q
  100.                 '当两圆相切或迭代运算已到极限时结束循环5 `7 G! `/ ^/ b9 Z  N3 _% ~  e, F
  101.                 Exit Do( u# ~$ U3 [+ Q7 w# S% K! L4 w
  102.             ElseIf UBound(P) = -1 Then
    , Z4 `5 t$ K/ ?7 @$ M
  103.                 '当两圆没有交点时说明小圆半径太小
    / r/ g: [# `0 O5 u: V4 {4 D3 E
  104.                 '把小圆半径做为新的迭代运算的下边界,重新尝试/ ~" [( [# J$ x. |. n8 ^$ W( x
  105.                 R1 = R% N4 [* g. B4 ~3 Q) k
  106.             Else
    " J" c4 a- v1 L6 P  ]$ q( L1 u4 j
  107.                 '当两圆有两个交点时说明小圆半径太大
    2 {1 p% }! s+ l7 e
  108.                 '把小圆半径做为新的迭代运算的上边界,重新尝试
    $ ?1 G: c$ k  X3 t+ E: O
  109.                 R2 = R
    # ?. R# H7 D& o  t2 m
  110.             End If0 Z. W# I' O' B
  111.         Loop
    ( G. s' I) d6 f
  112.         '图形完成后删除角平分线和垂直平分线; u. f$ O( Y+ n
  113.         L5.Delete$ p7 v. @' O+ H9 p/ @' v2 f
  114.         L6.Delete
    0 Z; a  H! {9 r7 s9 i) P% v
  115.     End With
    - e9 O! V/ n( L4 u* q$ H
复制代码
运算上面的代码可以直接得到整个图形, ^, p6 l+ x- l- {( @3 Q- |
有兴趣的朋友可以用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 )

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