QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
7天前
查看: 7186|回复: 25
收起左侧

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
( k) s( y6 `( ]: `如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B
/ Z$ W. c" ?/ x1 x" G, f$ IY与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢" @% M$ S, z# C! C. S+ @/ X

" q: D5 q' W, \! P5 e+ {- l# R+ v7 v& x$ _  T5 l
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............9 g. y3 {8 W* F' z
各点不是可以直接交出吗..........: U! e6 b' d7 T& q5 c! [& }4 U: W
楼主要"精确"........
+ t* _6 ~3 u3 i" l7 S7 ~曲线总是近似的呀................$ X/ A* R" K7 g" F9 S
) _/ u6 k9 I) d$ h: @3 A
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表) x1 F- n9 m/ i* A/ B- u  y
求这样的曲线有嘛意义呀.............
6 @; X3 B1 y( n+ N5 F. v" \8 W  ~& D各点不是可以直接交出吗..........
* b: Z( E: r2 _; ?* z+ X1 m9 x楼主要"精确"........! A2 N. `; g2 @: i2 K. N& Q' o
曲线总是近似的呀................
$ h2 i9 ~2 F# J! ?8 R" D
求解CAD难题简化
# d6 ~) j/ W$ x5 J. S2 S
. L& |5 Z9 J; q4 V& j" v0 ?[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
2 v. X/ W3 B  q9 r- [2 z按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。# A- E, r3 q4 z( m1 P  S
注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。& E, X4 G* b  N$ ]" L
加载yxgj.vlx,命令也是yxgj
( ?: l4 [( A- ~& m
* @( T2 x3 ?) M0 J- e! y: |$ L2 [以下为操作过程的文本窗口:
% S5 s" G7 e$ U! k/ C0 G命令: yxgj" X$ d( P4 F3 D9 I6 Z3 R! `
AB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816- _; |! ?. ^! S/ w# ^
确定A点:int  U% t* u/ h' }/ O2 C7 J' E

! M9 T. k' V3 G  A" m确定B点:int
# ?2 G2 O, u( X7 P5 t+ L) h- v9 t% b+ S7 x1 w) ^7 d& F8 K
确定C点:int
) e' \1 q' w6 ?2 P
! |( C) s( u+ y0 q输入圆半径:int
' G1 W' w! f1 L; S- r5 V- ]于  指定第二点: int6 o1 Q; k. Z% B
1 L4 ~* h* |2 w& \7 b
Grade(确定计算等级)<12>:3 a6 c0 ~& ?( p4 U
" ~8 p' y4 t' a, _; b. s1 e1 X  w
[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?2 M4 H: \# G8 R8 k. M
: z$ ?( O" l8 ^$ o* r
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!- I+ i0 ^: j7 G2 J3 V# x8 p3 `! L

" h( O4 z. q9 a呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!
) e1 C( W: v) U/ T5 W
9 m& @7 s, c4 p4 R3 L8 U9 R) ?真想得到这个赏金呀!可是.......哎......还没有学到家呀1 G: \( s, O3 C; E* t* N
# t. X. X/ d  d7 g$ m+ F5 X: D
/ D0 ^& n, ~# Y9 e6 V1 @/ Y0 T5 I0 L
[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表$ z6 d. ~  V, q% }- C8 k
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
6 N, W6 ^, a" V1 z4 p& u$ A5 P按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。# b. O3 a' Z7 R7 x) q# D
注意捕捉 ...

) P, \" M! r4 o: c        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
, {- K+ E  d$ E7 M3 R  K; d* y# F        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。. f; R& c1 X1 _3 O
        看来这个维币应该奖给moonguy兄了。
: B; o; p: r( y0 `: t        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。* w3 H! p9 B$ w3 g9 r0 g( X
/ d) N  Q: ]6 g" S  i8 s$ |
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!% s$ y3 T/ y+ \; c: I; B  z
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
4 J4 K/ K" k) F8 n
' U! I3 ~( ~" n* x; t' n- G        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
5 I" _  ]$ K) A0 ^2 I& ~% i       ...

& w5 H6 ]# x$ A2 r0 C. `& Q+ B. V* U  Y
/ x; o0 I) N* W2 z我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
8 H  G5 M1 ?7 b; t5 |9 h. ~
( h3 l9 |: N$ W2 i4 ^# k这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
3 [& G% r! x. g- ^0 x$ d& v+ o+ I2 U/ u; e6 d  j* M$ F! p
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。0 {5 w0 s5 K0 ?' `+ P' {, o
2 \0 r# s7 g4 d( _& i! S5 x

3 h) X3 x1 \5 M. Z# k) g " p' {. r% O! y; {2 G) u) i
再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。
- \9 b0 t6 K6 o可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。  C5 w6 J" M7 c  e! J4 Z0 ~* N0 \

. b9 ~6 Z  W/ p* J0 X[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

6 C: s6 [* s8 r. n9 D' \[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?
8 |- C6 ]# r7 f2 \0 \- s7 l 1 F. A8 d2 a" I5 I8 Y1 x

5 }, b  k9 w2 k8 {& O看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
3 \3 o# ~2 I% }6 h5 v" y9 A
; _8 J7 L4 _* {' k[ 本帖最后由 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不能精确求解。+ t" g1 K  X. k& H& z
故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。
3 ~" [+ H4 s% ]" U- P: ]* H: O1 _9 e. A2 r/ R. I7 @
但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
1 Q9 C/ c2 e4 M4 x% C, i) K6 n& J; D- J" S2 ]; Q
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。
$ k' i/ ^9 F8 f) n5 o                                                ——blackbird
- d8 T* b# T( j+ x9 @! P  T
) I1 `. K0 g) d7 u该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
# Y' U, T5 ^/ Y' C希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!; m+ s: Q* j5 u7 {

9 L9 {% l& D4 P; U$ S$ k( w[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?+ B# ~7 ~- z, F/ k9 h* A( |
以下是用VBA求解的过程。( B: G" p- S- _7 m  L9 T, }3 B6 e
附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

! H. r: @& s  c% _. n% G
6 h9 x9 l& n& CSub NT()" `& M4 q: G- n# ^
    On Error GoTo 10 '发生错误时退出程序
" \  T9 O4 U1 `5 z$ z   
( u) p- K2 B6 O8 O+ X( u    Dim A As Variant 'A点坐标( ^) c8 e, N0 h% I
    Dim C As Variant 'C点坐标: c; J& d( ~2 ~9 Z( C
    Dim B(2) As Double 'B点坐标1 \1 R/ B; Z( d9 ?0 |
    Dim P1 As Variant '直线12起点坐标
) e* x. L: A9 d    Dim P2(2) As Double '直线12端点坐标
: ^- p8 o6 b+ k    Dim R As Double '圆Y半径, j$ ~$ Q& e5 Y/ f2 I/ C* `3 ?# C
    Dim LineAC As AcadLine '直线AC
2 T1 |. ~% S/ @    Dim Y As AcadCircle '圆Y2 O* G( [# A6 _7 l# s) D
    Dim OC As Double 'C点到直线AB中点的高
. |. N5 s2 v7 f! Q6 u4 L2 |    Dim AB As Double '直线AB长度7 J- t$ E0 K! p" u
    Dim M1 As Double '迭代运算左边界点的横坐标( \, K( O- `6 u7 i' G# c
    Dim M2 As Double '迭代运算右边界点的横坐标
4 `2 ~9 e: A% J0 e! x    Dim Yc(2) As Double '题目中拉伸点的坐标5 |' w, Q! ^) m9 @& M5 N
    Dim X As Double '圆Y与直线AB交点的横坐标
% _$ J' o  ~& ~; P! X    Dim X2 As Double '圆Y与直线AB交点的横坐标
( P& X9 c+ f  e& p- ~    Dim S As Long '曲线拟合点数量(3~32767)
# y! g* r8 L& u) x9 M( Y$ K. z  _    Dim K() As Double '拟合点坐标3 R& j: _/ i" K" K
    Dim St(2) As Double '曲线起点切向
- E  `# J& j4 V- x* J6 ]    Dim Et(2) As Double '曲线端点切向! |9 j6 d2 [" g/ K! S
    Dim I As Long '循环变量8 N) s+ |! D* q1 h
    2 {% m, c+ ], g4 x2 U( d
    With ThisDrawing
: \, Y9 t) w! ?/ @) T. y# f        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
9 Z3 V  c5 W$ ^9 z; Y. Z. W        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
5 `4 y& J& q& A  {1 `            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
3 A' C# |- o# C& w) m, G+ |            If C(0) > A(0) And C(1) > A(1) Then Exit Do9 b& y; z+ T) z/ m4 A
        Loop0 q6 x5 j1 @9 o: C! ~
        OC = C(1) - A(1) '计算B点坐标6 z  e) X( ~+ \* p& [
        AB = 2# * (C(0) - A(0))
# A. B7 n' q0 l7 A6 A) G: X" c        B(0) = A(0) + AB
% n' t+ s5 t' j        B(1) = A(1)' M8 k1 t4 e0 V* w' E- N* Z- {
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线3 q9 R( V: w+ U- I2 h: |
        .ModelSpace.AddLine A, B '画AB直线9 P8 v) n1 \1 c/ o- T
        .ModelSpace.AddLine B, C '画BC直线
- `7 d, @# h4 G) O1 V3 ?        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。
9 w, z! w4 J! [& q4 v            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
2 E& ~- ^! J4 w# X            If R < OC And R > 0 Then Exit Do9 R! d; R6 ]; k1 K0 s% W
        Loop2 T2 p4 Z5 K9 @& a( @6 x. N
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y0 |$ V. Y" l& J, a
        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
) M" u" m& Y, o9 e/ F  O  b        P1(1) = C(1) '计算直线12起端点坐标7 }3 S' k/ |1 y5 `' K
        P2(0) = P1(0)
) j! W& M- S1 Q! A4 T+ U+ ]        P2(1) = A(1)9 [) i: Q- C6 l3 L5 F6 |2 l
        .ModelSpace.AddLine P1, P2 '画直线12
) @  Q& F& W* Q1 Q5 z          g6 B2 d7 Q, G# c* C( L! ]+ l4 X7 W' z
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界
  R. t9 T- h9 _4 P. W        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界
: ?: k+ `) g2 h3 ^% n  g        Yc(1) = A(1) '拉伸点纵坐标与A点相同
; C* v" o% P/ s. b) m" ~$ W        Do '迭代运算
0 c5 l3 D( w  h% V            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标: @( U3 l4 j$ ?4 P
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)% L7 Q; T" N; a- [
            If X = P1(0) Then '交点与直线12重合,结束运算+ n0 D2 V  o8 ?; l7 h
                Exit Do
$ N/ C0 }8 B" J' }            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算- T8 I9 p3 v! I) {( j) Z
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果
+ z( _4 e; i4 h% D2 q) p                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
) D0 j& H- a: N  q  v                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
8 i6 A. A0 L/ r" J                Exit Do
) Z8 c3 q1 [$ U4 l1 b- t            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算
, t8 e  R2 v4 a* h  g1 a                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
; p) ?! Q/ b! k3 e                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)7 Y% E0 ~) h  b9 @+ Z' i3 v
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M19 e* H9 M8 P" J5 {) J
                Exit Do# e2 P5 p  c5 r% A# F% d
            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算5 }$ _6 W( ]2 E* R
                M1 = Yc(0)8 N, c: S& K' Z3 o
            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
% d2 M0 l- a  f4 B                M2 = Yc(0)/ Z9 K) Q% i5 V5 U
            End If
" @1 t+ a  a' p9 N- f" E  t: I        Loop
- s# k# F3 z4 J7 S        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
9 q' N& `. E/ f8 n/ {        Y.Center = Yc '按计算结果移动圆Y
7 O" j1 H2 m; F2 v        
* W, M, t* B# H7 n! f& d+ U5 [& j        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。. A* w% K- F0 a0 W; c; T. l8 i
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")
# k+ Q" |# @9 ^# `* I/ ^% E            If S > 2 Then Exit Do) U6 v2 T. B* h0 s9 K% n$ `
        Loop
) ?- r3 y% z  k$ W        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界
& E7 t) A: I6 W        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标# _3 {, B6 c- L
            Yc(0) = A(0) + I / (S - 1) * AB9 b+ b! F8 ?' a  I9 f& Q
            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)7 z  {5 I- D3 k+ }$ o9 E
            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)
7 k7 v. s" p9 ?        Next
" f& Q% X) Z# H        St(0) = 1 '曲线起点切向2 _# s+ y( j: Q5 u5 E) f) w
        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)))/ s2 c7 y& ?& F5 u. m; S
        Et(0) = 1 '曲线端点切向
. Q) O+ W9 c- L8 ^$ h        Et(1) = -St(1)
: S( {9 i! r( Q. Q/ g# r        .ModelSpace.AddSpline K, St, Et '画样条曲线$ f1 {4 L& D! b! t
    End With
  r* T4 g0 g0 Q0 E" c10
4 Y1 X% b& Q9 ^( p; }! p8 [4 xEnd Sub
6 `) z, ~! W! U7 R0 t8 ?; {0 m7 t1 g2 g, V- T3 o0 l5 |
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
7 f. g5 {9 z1 ]可应用excel序列功能,非常方便,具体步骤看excel压缩文件。
- f- h0 r6 Z# w: `/ ^7 e* Z2 b( g8 J$ \) M
[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。
# I- K6 ]; i0 S% \7 T! K, h1 ]        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。9 F/ x7 C. c; k1 \# J. r
        原贴已经关闭了,就发在这里吧。
- S  j7 l2 G6 Y; u/ ~; ]" w5 L& d: a: J
[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

发表于 2007-1-15 20:55:32 | 显示全部楼层 来自: 中国吉林吉林市
15#的内容发贴时间太长,不能编辑了,希望版主有空删除,或者只留"请楼主举例说明一下,哪个软件有三线交点的捕捉功能?",误会已经澄清,放在那里不太好。
3 ~- K: z. w5 b3 E3 u; }: K% ?楼主发的这个主题,以及各位高见,对我的帮助很大,对楼主表示感谢的同时,也真诚地道歉,对不起了,我应该先通过短消息和楼主沟通会更好些。希望不要影响楼主和大家讨论的热情,也盼望楼主有时间分享自己相关的心得体会。
. G" e  P" ~) M
也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家
- b& L. w* f! Y  G+ E请看新贴:一种新方法“精确选点法”解CAD难题
4 ~9 x8 n! C3 Z9 v! v& y( f0 Uhttp://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题  y" x/ c$ o7 }2 S7 y
我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢
" r5 u1 s( w7 D$ {4 o1 M& M/ p解题步骤请看 23 楼的链接6 M3 {3 s. ~3 p
尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为50000000
2 R( L  R) X8 m' b7 H8 P
附图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 )

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