QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 7299|回复: 25
收起左侧

[讨论] 大家一起来求解CAD难题

[复制链接]
发表于 2007-1-3 14:52:04 | 显示全部楼层 |阅读模式 来自: 中国广西钦州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
8 y- c) }, s( p! `0 a如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B' s. A) L( r/ w) L* ^
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢$ j, B/ g" O$ m! W- N

. h  T8 u* p0 B; Z; I; G: I# G, G$ c5 U+ e6 o7 N
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

悬赏100三维币求解CAD难题.rar

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............
  q8 f# d- N; ~) V5 M$ n  Q1 R各点不是可以直接交出吗..........! }% y9 a% h: |* h8 W' c! J) g, y
楼主要"精确"........
8 N7 o; G" P- r0 s: F- D曲线总是近似的呀................
  p: R6 ]+ e2 F8 q! m! ]5 Y
" K6 @2 B' C# o9 h* d4 M% ][ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表
# M  i" V" U5 v/ v/ ~) E2 [8 m求这样的曲线有嘛意义呀.............
" _( D; b% K7 Z4 j4 y" t0 s+ n各点不是可以直接交出吗..........4 B- @3 f3 F, q
楼主要"精确"........
9 [6 G' c+ L6 L9 @0 q曲线总是近似的呀................
3 c9 \, k5 \, ^7 W: W
求解CAD难题简化' a, V3 l6 b# ?; ]* W1 P% z& [; r

+ T: W: [: E! o7 S$ v; F[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题简化.jpg
悬赏100三维币求解CAD难题简化2.jpg
发表于 2007-1-3 17:48:17 | 显示全部楼层 来自: 中国上海
急忙做了一个,好像精度不是很高,大概理解有误,先传上,想多学点。
运行轨迹.JPG
发表于 2007-1-3 19:04:54 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
- W# ~* e+ j9 ?+ U' F- j按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
' f5 M  E; k( b注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
4 C; e, z- d1 b3 W0 ]$ @% E5 z( |加载yxgj.vlx,命令也是yxgj
, `' h  d* w) R1 I3 y
( K0 n% `( N; H( j" ?4 N) q以下为操作过程的文本窗口:; v- Q; q( I0 o' j
命令: yxgj
' V* `9 i! J9 B! K" n+ x9 r# A8 jAB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816* P9 W8 J$ y  w
确定A点:int; r6 d  x+ B3 p/ C) U& Q
/ p6 ~) M, d% Q6 L7 d) K
确定B点:int
( k8 ]- H( z+ E$ Q
( g, u' w3 X( R: R" I1 C5 T' ~确定C点:int
, I% N# G0 P* E* a$ k- W7 B+ h2 N* Q4 m1 u/ r' _
输入圆半径:int
1 w3 I( B& N! [& c于  指定第二点: int
" x# j: B8 ~7 z! @
! e. T& i& f0 ^  G7 rGrade(确定计算等级)<12>:
  ~: N5 L# Y2 t, Q* }( W. b  _* j: Y! M; E% _8 W8 d
[ 本帖最后由 moonguy 于 2007-1-3 19:06 编辑 ]
yxgjjg.jpg

yxgj.rar

1.35 KB, 下载次数: 20

评分

参与人数 1三维币 +5 收起 理由
blackbird + 5 技术讨论

查看全部评分

发表于 2007-1-3 19:25:09 | 显示全部楼层 来自: 中国辽宁营口
楼主这题太难了呀!能把直线12改成水平方向吗?
发表于 2007-1-3 21:24:03 | 显示全部楼层 来自: 中国山东德州
我认为4#楼朋友的作法是正确的,因为要求做的是一条曲线,用作图法不可能很精确。如果用编程的方法,那只有高手能做到也就没有悬赏的必要了,我个人的看法。
发表于 2007-1-3 22:06:00 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?
. |, S3 D. ^' g8 @8 k* Z9 A9 D# w7 W
" D: d8 X' X. d: |1 S/ `) W4 ACAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!7 K0 H% K. Y3 e- n# e: O1 }5 G2 b

/ g8 K6 B/ o% g1 ?呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!& ]3 ~* ~- l/ {: K
8 \/ @! a5 f9 n( a! S3 L6 A
真想得到这个赏金呀!可是.......哎......还没有学到家呀$ q5 g1 E9 \8 d$ M0 E+ p6 v

' ]( q# u+ R4 ?6 \4 ^* R1 R5 R# N
9 \' U, }+ H2 K3 H- a; y- V[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表
' T0 D0 l6 U' Z* e楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。; A' ^3 I. c. b* t7 X! t, H( {) e/ ~
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。- k% ~1 J" q( D
注意捕捉 ...

. c! \8 p2 W0 }9 \$ M9 m        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。: I! V' \4 l% |; ]% v0 t
        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。7 e% V& R* d, _* ?, G& Y0 s
        看来这个维币应该奖给moonguy兄了。
+ \( r8 K+ O4 B: S) a/ K* `        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。+ D5 e2 _8 _8 S) r
' q1 K1 E) q  _: n! w) Z4 {: m+ M0 {
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!
4 M% x8 O  x/ h$ Z, x5 l* N而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表, N- p; I9 h8 l! l3 ~; W

% p  x& g# K5 o5 r' }        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。' {  _4 ]  p7 @
       ...

. f& z! [7 f$ x% }3 ?! t, M
! T9 g3 z+ T* ?9 i  q1 V我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
0 s" X2 [. V. C0 d" E1 K4 V
8 h4 J* Q% i: v, [. l) f1 n/ p8 n这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。$ ^! l: N0 P# \
. v# Z& F/ q1 ~/ I5 I, z( @5 v
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
' v& _/ z8 ^3 K/ B! L
( _1 |# X- \. N5 `# a4 S7 q
9 J4 h: L' G, K- P+ c
1 h0 M/ p& E3 ~7 ^再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。, a. m2 }$ V3 `( d4 w. o0 z
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
7 }& j" k1 P9 G4 ?; V5 [  S$ l, F4 j; ~) Y# }* h' J: ~. W
[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

你小子居心不良,存心让我在众多高手面前出丑(开玩笑)。再一点,我不是“老师”,我跟多数人一样是到这里来向真正的老师--比如★新手★、还有aishengchen(如果我猜得不错的话)等等--和一众高手(包括你哦)学艺的。
/ t- w/ V8 t; Y  l/ S3 F9 N8 N2 f不过既然点到我了,我就做个发言,有不当之处,还望各位高手海涵。/ U$ X3 r9 J  z* w0 l
一、我之所以没有正面回应这个贴子,是因为我对楼主的动机心存异议,不想顶这个贴。我知道楼主是个高手,他出这个题目不是真的在求助,而是在挑战。这个题目本身是一道钻牛角尖的题,类似“用尺规做图法三等分角”。他坚信没人能拿走这100三维币。
  q  O" r8 b% v二、对原题的看法:我认为,autocad只提供给了我们圆和椭圆两种二次曲线,其它曲线一概用样条曲线代替(包括2007中的螺旋线和渐开线)。而样条曲线在autocad内部的数学模型只是一个拟合函数,在拟合点足够多的情况下,显示的曲线和我们理想中的曲线“相似”而已,永远也谈不上“准确”。! E$ E* S2 \$ H
三、对简化题的看法:表面看起来,题面被简化了,不再需要画不“准确”的样条曲线,但我们只要把已知条件画出来就会发现:这是一个用部分边长求画直角三角形的问题--这个问题在论坛上已经讨论N久了,前段时间被★新手★版主关闭,现在找不到了,估计是被删了。
9 ]; L3 ~1 `7 a9 c: m  说实话,单纯用画图法解决这个问题,在下无能为力--因为我还没找到用画图法开立方的途径--而且我也没看到过别人“准确”地“画”出这种图形。我遇到这种问题,通常使用autocad的VBA,而且可以保证得到的结果和在autoCAD上用画图法做出的精度完全一样。如果楼主承认这种方法属于“CAD方法”,我就立即上传我的宏,就怕届时楼主为了保住自己的三维币而拒不认输。
. v$ H" R" b$ {四、尽管楼主动机不纯,但题目本身适当地加以改动后还是有利用价值的。
) T( M9 v4 ~( g" L7 ~6 _% B: d  1、对原题加上以下限制条件:用线段AB的五分之一做为拉伸线段AC和圆Y的步长画出样条曲线(拟合点--含样条曲线两端--共6个)、画曲线时必须考虑两端切线方向。
! c7 [' ]. }/ |* ^9 F  2、简化题中的直线12改为水平方向。; O% @" U, E7 e5 t! U& X
  这样改动后,两道题就都能用autocad命令画出来了,其中第一题稍复杂一些,第二个相对简单。如果版主能对上传答案--特别是答案正确--的网友适当加以奖励,就应该能达到既活跃了论坛、又能正确引导大家的努力方向的目的了。
2 N8 ^% M( \0 u# s5 N. o8 D' F1 U2 V. y& t# U( Q
[ 本帖最后由 woaishuijia 于 2007-1-4 10:11 编辑 ]

评分

参与人数 1三维币 +5 收起 理由
blackbird + 5 技术讨论

查看全部评分

 楼主| 发表于 2007-1-4 13:55:06 | 显示全部楼层 来自: 中国广西南宁
楼主2007-1-4补充说明
悬赏求解CAD难题(简化题).jpg
头像被屏蔽
发表于 2007-1-4 19:12:33 | 显示全部楼层 来自: 中国上海
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-1-5 10:43:47 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?
! L& t+ K: u1 d- C  h- T6 P
, F# k/ P4 Z  l
: Q& z4 S" L0 {! C看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
; X1 ]' e. }3 C1 c6 e
2 e& V& U- Z9 G  |9 `[ 本帖最后由 moonguy 于 2007-1-5 13:01 编辑 ]
发表于 2007-1-5 10:56:20 | 显示全部楼层 来自: 中国北京
我只是想明白楼主出这样的帖子的目的是为什么?谢谢答复!
发表于 2007-1-5 11:57:47 | 显示全部楼层 来自: 中国浙江宁波
既然是悬赏,为何不开“悬赏帖”呢?!
发表于 2007-1-5 12:59:14 | 显示全部楼层 来自: 中国北京
以上各贴已经说明,此题用AutoCAD不能精确求解。. h) j+ _( A/ I
故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。0 e* S* _+ K9 Y: o' d! Q
. M9 {* D2 }7 C' I" s$ J# t$ d. H; V
但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。- O( L# S, Q% t# C! @
4 ~3 Q4 G7 ?, ^. Q. h  E9 N
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。8 ~! V% Y5 F7 t& Z2 B
                                                ——blackbird
( i+ ?5 H0 Y/ v1 |
9 G" h8 L! Y% h& c该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。) Z, s, j9 }5 F4 N8 r
希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!% D0 A$ }8 l+ h  c$ z4 ^. |
; v) b3 t; m% A
[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
7 h. O. v/ `3 ~% r8 B& z! t以下是用VBA求解的过程。7 w2 D! k( ?2 B( |
附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

; f1 \3 ^/ C" B( b2 a0 M- V% I6 ?9 K/ r; }) f4 G7 Q3 ]' x
Sub NT()1 W$ S. C& k% y- ^8 |
    On Error GoTo 10 '发生错误时退出程序3 s0 j* S+ f7 j2 ?. [8 i
   
: y5 y3 d( g! J& ]0 o! u    Dim A As Variant 'A点坐标" Q; r0 ~' c2 T' n- z. X
    Dim C As Variant 'C点坐标$ R# d; C- h9 z+ O' S7 B: e
    Dim B(2) As Double 'B点坐标( l& D9 J3 k" @# [0 i
    Dim P1 As Variant '直线12起点坐标
+ R5 b9 u( U# l! p8 f1 x2 p. `    Dim P2(2) As Double '直线12端点坐标& X( |/ h- D) U
    Dim R As Double '圆Y半径
0 m# o( K3 g  d5 e( C8 y) @    Dim LineAC As AcadLine '直线AC
0 q9 k2 t! V3 d    Dim Y As AcadCircle '圆Y
2 y* w. g& x! S1 l5 x$ z( v    Dim OC As Double 'C点到直线AB中点的高
  t, _$ P0 O& V8 x6 E) n    Dim AB As Double '直线AB长度) U: b' ~2 e9 ~7 r7 H4 c. X
    Dim M1 As Double '迭代运算左边界点的横坐标
( N9 A4 W9 @9 y* o; V! x4 f) S9 p    Dim M2 As Double '迭代运算右边界点的横坐标
. P( J$ t- {# l) V    Dim Yc(2) As Double '题目中拉伸点的坐标
- s. O% O0 z+ o" ?) z0 P    Dim X As Double '圆Y与直线AB交点的横坐标
3 }$ g2 r% d6 D& X    Dim X2 As Double '圆Y与直线AB交点的横坐标& d! R1 @2 e* N! J8 }. D' w
    Dim S As Long '曲线拟合点数量(3~32767)# |1 u3 R0 j# V* c" l4 i% @  _3 \
    Dim K() As Double '拟合点坐标* F% u8 ], v7 r/ y& D
    Dim St(2) As Double '曲线起点切向& A/ l# A: Z1 L+ V  W
    Dim Et(2) As Double '曲线端点切向
+ o  K- q9 ]$ H* g! Q9 E    Dim I As Long '循环变量
# Q) K! m# [2 ]9 [! w' n; ~    3 S0 p- Z8 `8 {5 |! R' Q
    With ThisDrawing% N- p' |- _5 k& s) E% o
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置' T8 ?4 T$ g3 {
        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。4 G" e- [. Y9 }4 x
            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
" f3 E0 T5 X; Q. S# z4 g( z* f            If C(0) > A(0) And C(1) > A(1) Then Exit Do
' I4 F5 c4 q7 d. h8 u. m0 F        Loop( P" o& I: w6 }& W7 b: s& D* P
        OC = C(1) - A(1) '计算B点坐标/ D) n9 |( c% v8 t; P5 r. l
        AB = 2# * (C(0) - A(0))
% A7 I; Q) }. e$ _' B        B(0) = A(0) + AB
6 U. P9 J6 z4 q" E        B(1) = A(1)) l( @- Q8 L2 |7 }6 k2 n
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线& o' O! `# Q, c
        .ModelSpace.AddLine A, B '画AB直线
/ j# Q+ `( j6 ]        .ModelSpace.AddLine B, C '画BC直线# R* R" w. |7 R% w
        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。
8 c& A3 D* `3 |            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
* a2 L. u& L  g9 F! Y6 a4 L+ b( G            If R < OC And R > 0 Then Exit Do1 |& T0 j3 u  H4 A
        Loop
' u7 y- b5 p% k: x' ?        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
$ V. t! o1 H, g- K) Y& P$ {        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
" s8 e3 l8 X/ u! H; o6 \& e8 H        P1(1) = C(1) '计算直线12起端点坐标; U. N6 @  [: U4 g
        P2(0) = P1(0)7 m/ W3 \/ t5 G1 O" ~
        P2(1) = A(1)
$ G' |" I3 J4 r5 k; s5 @& K% R+ T- M8 F        .ModelSpace.AddLine P1, P2 '画直线122 e1 e7 @: ^% p9 S' t
        1 ^, j1 `2 n9 E# F
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界' b3 H4 ]) ]! m! a" s3 _- D
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界- b' s- N( O0 d0 y8 ^& y
        Yc(1) = A(1) '拉伸点纵坐标与A点相同0 F" o8 R- n' h
        Do '迭代运算
4 A6 O( x" |. Q- X5 \0 b* ~            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标: ^8 e! t' g: R( T' }; D% `
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)
- R4 X4 J, j1 j3 {3 m9 u            If X = P1(0) Then '交点与直线12重合,结束运算9 D" D0 V6 t7 |/ t5 w- y6 `1 k
                Exit Do
  V4 h* ?5 X: |            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算' ?1 M1 E% ^2 o$ p, @" A* K
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果3 ^( q9 {: u5 W1 C
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)" Q3 [3 X$ _7 ~2 i% Q2 X
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2# r3 d2 A9 _0 o9 B0 Q# k
                Exit Do. G9 L$ y- L' {# }" J  H
            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算  f' G, e7 C% t' Y
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
, s& p0 I9 X8 |4 q% r                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
& p) e7 F% h9 N. p                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
# }, Q6 J# {8 m" t! J                Exit Do$ C& b- r) @( p  o
            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
; j) X, P8 D( S- m* Z* E                M1 = Yc(0)
9 Q8 C; |$ J" R: ~. Y  m            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算% s6 z+ C2 o# l4 p
                M2 = Yc(0)
7 I2 r# x2 r% I+ x7 B% Y8 V            End If- _0 M, ^1 O: r) E
        Loop
! W1 B+ v& n6 L7 O  ?: _0 ^& T        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
9 \5 e2 W# |- a        Y.Center = Yc '按计算结果移动圆Y
; m# |" D' v5 Z. B% W. A/ f7 u        
8 _* K' n- @! z  I        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。1 z! M0 ]4 D5 A3 r' M5 l! J( p4 G7 j
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")8 {" u: {  ^5 T+ w( z" @% p1 ~: g
            If S > 2 Then Exit Do# J( I. S7 s3 c7 t* \2 @
        Loop! a/ b* Y! Y8 S  C! b  ^  P5 }" B, J
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界( c7 x6 O$ J& l4 c, j7 c0 a+ E; r0 U
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标
5 X# p) m5 X5 _" `            Yc(0) = A(0) + I / (S - 1) * AB
0 ^1 C3 Y3 u+ I& u            K(I * 3) = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)) b) x$ d: l7 I0 Z! T8 w/ J
            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)& o1 G8 b) q* _) t, P
        Next
+ d5 }" ?1 q: l/ ]0 \. h8 N$ s        St(0) = 1 '曲线起点切向/ E' F4 |  {" O8 Y- ^* L1 k+ L
        St(1) = Sqr(R ^ 2 - (K(1) - A(1)) ^ 2) / (R ^ 2 / (K(1) - A(1)) + (C(1) - K(1)) * R ^ 2 / (K(1) - A(1)) ^ 2 - (K(1) - A(1)))# x  H. G  N/ i* W9 k
        Et(0) = 1 '曲线端点切向
% k2 F. D( L% X        Et(1) = -St(1)( A. U7 G' Q% d7 U" m
        .ModelSpace.AddSpline K, St, Et '画样条曲线" F. w; q) x# l8 D- V
    End With! E$ u+ l5 r5 c4 x  W6 q
10+ E  y: m) d0 x, X" H+ S- [# p" Z
End Sub; D2 Y. `4 r3 Z' ~
' v# c/ ?5 |. l: B- b* ?) s
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
. {: j, n& X, p: d3 b% u, G可应用excel序列功能,非常方便,具体步骤看excel压缩文件。7 f  B2 u; T/ a. K, i! v

$ I8 t$ n# I9 u+ ~. z! [[ 本帖最后由 zcf108 于 2007-1-12 13:28 编辑 ]
Untitled.jpg
11.JPG
22.JPG

excel文件.rar

2.24 KB, 下载次数: 10

评分

参与人数 1三维币 +5 收起 理由
blackbird + 5 技术讨论

查看全部评分

发表于 2007-1-12 20:43:45 | 显示全部楼层 来自: 中国辽宁营口
网上流传两道根据不完全边长画直角三角形的题(见附图),号称“难倒一片CAD高手”。当然,这两道题用CAD基本做图命令是做不出来的,但如果使用CAD二次开发功能,这两道题就迎刃而解了。
2 Q- B6 u! M1 _" W4 }% v0 \- b. i- Z        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
; H# h8 P3 h# }. }+ u( d        原贴已经关闭了,就发在这里吧。  B0 W3 K' o; A3 ^6 }( O2 P
% T, D8 L0 U' b0 a/ C
[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

发表于 2007-1-15 20:55:32 | 显示全部楼层 来自: 中国吉林吉林市
15#的内容发贴时间太长,不能编辑了,希望版主有空删除,或者只留"请楼主举例说明一下,哪个软件有三线交点的捕捉功能?",误会已经澄清,放在那里不太好。
2 d6 o! K. z$ D8 Y) z/ b; w; W楼主发的这个主题,以及各位高见,对我的帮助很大,对楼主表示感谢的同时,也真诚地道歉,对不起了,我应该先通过短消息和楼主沟通会更好些。希望不要影响楼主和大家讨论的热情,也盼望楼主有时间分享自己相关的心得体会。
5 l# @2 V' _/ u' V+ s5 J
也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家# t+ d9 y7 a; M0 w- _
请看新贴:一种新方法“精确选点法”解CAD难题: N1 x6 m5 m0 M4 E& d* l
http://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题5 n3 w8 O2 ]$ h$ ?' f
我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢* G1 r. E  G9 W4 \
解题步骤请看 23 楼的链接
* `, G( [3 A$ b7 n& H尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为500000000 v3 V: ~6 a. i' Y
附图1-20.jpg
发表于 2008-7-8 07:51:25 | 显示全部楼层 来自: 中国湖北潜江
都是高手,小弟佩服,
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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