QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线! s2 s+ Y3 o- v- C0 z' ~% H
如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B
( p; V9 z  k, r' J/ q7 \- S, gY与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢- z# Z9 \& G4 Z( S! F
6 u; E' s+ J; v/ X

) |' Y9 h6 ]& N3 y[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 32

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............2 k' ?' I  m( r# Z8 Z5 Y) ?8 U
各点不是可以直接交出吗..........
( p: y% I, b7 ?楼主要"精确"........# E$ ]4 M5 U, [% O
曲线总是近似的呀................- u! m% `0 p( k
# W0 m' w" r8 d5 v
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表
  L1 [  C: b0 F求这样的曲线有嘛意义呀.............
. }# ]2 x* ?; Y$ l5 n0 J! E各点不是可以直接交出吗........... o* d0 N' ]4 @* W" r2 y" t
楼主要"精确"........
$ U( j; W; d$ x; D8 T曲线总是近似的呀................
5 c3 G: N5 f$ d. O- w# b+ i
求解CAD难题简化6 m% }5 O0 u* x# h5 \! K
2 T9 I- Z6 T& G3 S1 u
[ 本帖最后由 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& P+ _( k4 z6 w按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
# E6 C2 l( _0 p4 u/ u注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
8 i$ x6 W$ |- D, b' A. B; [# a加载yxgj.vlx,命令也是yxgj% M; L% P$ E- r2 L. F. p
$ T2 [4 Y% r* X6 ?
以下为操作过程的文本窗口:' t5 @: Q" B, V! |& ]
命令: yxgj
* @0 O+ c0 O1 o# [. I- cAB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816, d% c+ T+ b, @0 s& h
确定A点:int
4 T5 s* x& v/ x) Y, a# ~  x
8 [3 R0 m4 r# A+ ^5 N确定B点:int
/ T0 T  u* D/ b' M5 S- O' z& ^1 K: B- r, r  X; Q/ f5 B) ]' v6 B
确定C点:int+ T! W) z* Y) ?. E  u, H7 d
' M4 F9 Y8 G; m; i( I
输入圆半径:int
4 D- z0 F3 o$ a8 i6 [7 R, @: ^  ?于  指定第二点: int  U3 `3 q( N* C4 w- f  q, \+ p" B

8 |) u/ f0 V# jGrade(确定计算等级)<12>:' h5 s% l; N) T, V0 K' z3 E% U5 q/ P
7 I5 _' d& g5 s5 `+ N% T# g8 w
[ 本帖最后由 moonguy 于 2007-1-3 19:06 编辑 ]
yxgjjg.jpg

yxgj.rar

1.35 KB, 下载次数: 19

评分

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

查看全部评分

发表于 2007-1-3 19:25:09 | 显示全部楼层 来自: 中国辽宁营口
楼主这题太难了呀!能把直线12改成水平方向吗?
发表于 2007-1-3 21:24:03 | 显示全部楼层 来自: 中国山东德州
我认为4#楼朋友的作法是正确的,因为要求做的是一条曲线,用作图法不可能很精确。如果用编程的方法,那只有高手能做到也就没有悬赏的必要了,我个人的看法。
发表于 2007-1-3 22:06:00 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?. q# J( b% E( l" O" r& Z4 o  q
' s( I* I8 P% w% l
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!
$ I" v! {( Y: w5 n2 J* i* p0 H# P
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!
  X- B: L3 o2 u* c- e0 t. Y; {, v6 {- u' d
真想得到这个赏金呀!可是.......哎......还没有学到家呀, ^; r/ H+ f$ G7 Q- H) g0 Y
+ b% a7 N9 Q9 O. g' ~3 |
9 [  _7 |) J! E
[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表8 R  O% \! c2 Q) z: u1 X: g; k
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。9 F, h) R9 |8 F8 G$ \' F
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。9 K" p# J; d6 x* R3 l
注意捕捉 ...
: _: Q3 q. G! R
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
- u9 x& v1 g& r/ ?& {. [        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。
9 \, L- F* v+ N0 U        看来这个维币应该奖给moonguy兄了。: U. \( y7 A# M% Y' l0 w' @
        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。' h5 w- [& z! l4 Y0 x* o0 Y' w

. G. W4 i* z: }1 w[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!$ u8 U% O- ~' q, ]7 G, u
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
; r2 R  `, C# y$ h2 @8 g4 G  }8 z7 w8 _% j; e* u
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
; a; W# X; N3 W" \/ x8 G       ...
4 R1 x$ [& x2 i1 M3 ^+ g" a
* f: J% v1 t, ~; ^: A! I
我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
% ~/ j! V; l0 P$ W
/ v/ W! [$ D6 L& s" p$ m1 G, `这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
# B* w: G& |  J6 ?$ f; Y+ @6 r' E/ E2 k6 V
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
9 c% [" j/ D) K5 `. L/ l. S
0 N& S; Y& y9 ~9 C0 N. b8 q4 o
6 l5 C) D6 E/ Z# E: }8 D1 Y; { : f% X* `$ r) L4 L: J  @5 ~
再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。  C& ~  X2 G* r& i/ _( R5 {3 A
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。" r% }3 L) {* j9 r  B
3 N. e1 E, o" i% R& b. _$ @
[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

你小子居心不良,存心让我在众多高手面前出丑(开玩笑)。再一点,我不是“老师”,我跟多数人一样是到这里来向真正的老师--比如★新手★、还有aishengchen(如果我猜得不错的话)等等--和一众高手(包括你哦)学艺的。: K2 o% K0 ~$ j% K! N
不过既然点到我了,我就做个发言,有不当之处,还望各位高手海涵。
  o3 z. ?: P! p" j; E5 Y/ t一、我之所以没有正面回应这个贴子,是因为我对楼主的动机心存异议,不想顶这个贴。我知道楼主是个高手,他出这个题目不是真的在求助,而是在挑战。这个题目本身是一道钻牛角尖的题,类似“用尺规做图法三等分角”。他坚信没人能拿走这100三维币。, q( R5 N6 E6 ?3 C1 P. w: h* i, {4 V
二、对原题的看法:我认为,autocad只提供给了我们圆和椭圆两种二次曲线,其它曲线一概用样条曲线代替(包括2007中的螺旋线和渐开线)。而样条曲线在autocad内部的数学模型只是一个拟合函数,在拟合点足够多的情况下,显示的曲线和我们理想中的曲线“相似”而已,永远也谈不上“准确”。
4 i  b) t9 ^) T9 W9 \6 E三、对简化题的看法:表面看起来,题面被简化了,不再需要画不“准确”的样条曲线,但我们只要把已知条件画出来就会发现:这是一个用部分边长求画直角三角形的问题--这个问题在论坛上已经讨论N久了,前段时间被★新手★版主关闭,现在找不到了,估计是被删了。* I' A: W$ _9 \2 Y
  说实话,单纯用画图法解决这个问题,在下无能为力--因为我还没找到用画图法开立方的途径--而且我也没看到过别人“准确”地“画”出这种图形。我遇到这种问题,通常使用autocad的VBA,而且可以保证得到的结果和在autoCAD上用画图法做出的精度完全一样。如果楼主承认这种方法属于“CAD方法”,我就立即上传我的宏,就怕届时楼主为了保住自己的三维币而拒不认输。
8 A  ]4 [& Q: Z6 p四、尽管楼主动机不纯,但题目本身适当地加以改动后还是有利用价值的。
/ O+ s# [; v% H2 d  1、对原题加上以下限制条件:用线段AB的五分之一做为拉伸线段AC和圆Y的步长画出样条曲线(拟合点--含样条曲线两端--共6个)、画曲线时必须考虑两端切线方向。
/ ~% n; ^# H* O( ^  ?3 z3 ?: I  2、简化题中的直线12改为水平方向。5 y2 J1 R0 c- f! o
  这样改动后,两道题就都能用autocad命令画出来了,其中第一题稍复杂一些,第二个相对简单。如果版主能对上传答案--特别是答案正确--的网友适当加以奖励,就应该能达到既活跃了论坛、又能正确引导大家的努力方向的目的了。; r' E) A* c9 L' q" b3 G# V
4 b+ x) f* n& R9 I- ~, X/ y
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?
1 A9 ~6 X/ L! f, E" |+ P8 ~   X/ g- E6 r2 o* y
$ p6 K# Q  Z* `% v
看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
7 ?  I9 D! v, ~# d4 e3 ]& A" x8 Y+ \1 U" M
[ 本帖最后由 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不能精确求解。' A$ [. e' J: c6 N4 ^
故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。! Y& V) J, s2 v; A

; D7 Q- `! R. X. s! T( d2 c但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
9 |, X7 l& W$ A5 k; T6 n. {1 C. F/ c6 Y3 P! W
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。# @. B- ]( j( O' Y" y9 `; D; T
                                                ——blackbird* M3 z/ _$ h  I5 h# l( m

$ W* ?, w, E) B* Y2 x2 c4 F4 C该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
: D8 [8 O# V4 f. ^  m希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!
; S" I; R, q# {. [8 k6 T
6 T; @5 `! _2 L8 }) V. O: Z[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
( a( D# K' F8 r以下是用VBA求解的过程。
5 b5 |0 b* b9 q9 R; v附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图
# {" X8 q9 L( J% {" X
" z! x; p! h! Y% ~7 q1 ~4 b
Sub NT()( d7 j% \# f3 v% N, e( ^: P
    On Error GoTo 10 '发生错误时退出程序
! p! M3 M4 n) T, r. q6 A3 N( v/ V   
8 F3 i& E2 S& A    Dim A As Variant 'A点坐标
2 q$ K% \$ {6 H. w/ V0 ?' ]    Dim C As Variant 'C点坐标
4 T7 E1 n7 N7 Z* H. N    Dim B(2) As Double 'B点坐标  T: H  j; a9 f5 ^( B* Z+ A
    Dim P1 As Variant '直线12起点坐标% J) Z" \, }* \+ R0 U- R5 R. a5 A
    Dim P2(2) As Double '直线12端点坐标- o5 D) O0 p" ^3 m
    Dim R As Double '圆Y半径
& @1 R; }' D5 l    Dim LineAC As AcadLine '直线AC& w3 k: y; P% R0 g
    Dim Y As AcadCircle '圆Y
* r" v) v0 a) ~* T! z. }/ F+ Q    Dim OC As Double 'C点到直线AB中点的高
5 Y9 C5 D6 M& `% s2 d* c    Dim AB As Double '直线AB长度' _- ~' [3 @- k* O
    Dim M1 As Double '迭代运算左边界点的横坐标$ |  m& i7 t% T* K# U* ^
    Dim M2 As Double '迭代运算右边界点的横坐标
" e6 x) D5 b2 X$ x! c, F* n5 O    Dim Yc(2) As Double '题目中拉伸点的坐标* T5 w/ ~8 ^1 p* X" ]) w1 n
    Dim X As Double '圆Y与直线AB交点的横坐标
# {" S# T9 U0 N: u5 {$ P    Dim X2 As Double '圆Y与直线AB交点的横坐标
" |' P: \, y1 O3 h" q. ^    Dim S As Long '曲线拟合点数量(3~32767)
5 b$ U# h  K" M5 Q2 w+ H1 x6 R    Dim K() As Double '拟合点坐标
/ x% ^2 {2 T- r' m0 ^' u' j+ G/ b    Dim St(2) As Double '曲线起点切向, }3 I- ]6 n) `. ]
    Dim Et(2) As Double '曲线端点切向9 y6 P6 Y2 g, l2 U8 U- b
    Dim I As Long '循环变量* W9 V1 n8 A/ I, }9 q( @1 D# s
    , S( ]7 r3 @' d
    With ThisDrawing$ @2 r! V" k& e
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
) |; E7 A0 a  m        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。4 B: z, n) x+ K1 k& A7 W  E, k
            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
+ g% C2 w& C3 b- k+ i6 K            If C(0) > A(0) And C(1) > A(1) Then Exit Do$ h9 U" a0 k- _7 `# j
        Loop0 n  r: e5 G6 S% [
        OC = C(1) - A(1) '计算B点坐标+ T% C0 N2 g+ W5 B( |7 i* ^
        AB = 2# * (C(0) - A(0))
& U1 U+ z% F4 J% i1 C0 Q$ ?        B(0) = A(0) + AB
( _/ I( E" G; W5 `" p/ t2 b" _        B(1) = A(1)# Z( Z- D, H; V/ O: B, {9 s
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线; o  C: Y' I1 t: d) E
        .ModelSpace.AddLine A, B '画AB直线7 C* V) C$ L, {0 U
        .ModelSpace.AddLine B, C '画BC直线
7 }) S2 M! m6 H1 U6 M        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。
' L  i. W, R, l            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
0 {+ A) E$ u2 w  J( t            If R < OC And R > 0 Then Exit Do
$ z* q' B' P1 \* q% b" |7 m5 Y        Loop6 `, o1 Q! F! ]
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y* B4 g7 n* X( R
        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点( _; H4 Z8 x8 u! y
        P1(1) = C(1) '计算直线12起端点坐标
+ s% |- Z/ g; ]1 J; M- o        P2(0) = P1(0)! X; N* h8 I, }5 T# S
        P2(1) = A(1)
7 ~0 q3 u3 u5 R$ ~* ]% l        .ModelSpace.AddLine P1, P2 '画直线12" c) i$ S( c( D2 Z9 g; a
        ! _& k' \+ ^* o! u
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界, R3 k& [- _; n% M" n8 V
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界
( T7 N; e' T' l. o        Yc(1) = A(1) '拉伸点纵坐标与A点相同1 b8 j  D" H2 q! e6 d% z
        Do '迭代运算
( ~3 w% O2 @  W  o1 f4 K1 h            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标5 \7 w/ t: N! G
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)- E9 X+ m- M6 m
            If X = P1(0) Then '交点与直线12重合,结束运算
+ e- U" l" A1 c; t                Exit Do
3 i5 W: |* D7 ^0 C            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算, [; O9 ~& {: }0 d4 n
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果
, S6 j% [$ J+ `7 b. p                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
4 O- u; ?. b4 S' C" p- A                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M24 [) Y5 O# J* K2 {% ~
                Exit Do) p' N# Z# V  ]4 Z5 k/ _: ]
            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算- L; f1 b" a* K5 @7 n3 q9 q
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
9 a4 `- I# _8 C  @& o                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
' ]0 R! ^5 h, H" B5 \9 k3 D                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1- L1 y& t- z- D. V1 l3 c
                Exit Do# P: a6 x5 X& g8 h, V- M6 A4 C9 B
            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
" F/ z  Z+ r% w4 N" z2 e                M1 = Yc(0)
1 O/ O4 o8 ^9 g* u6 Z# n            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算6 B# }2 y9 i! t9 y& X
                M2 = Yc(0)
6 P2 I! F. @' x' i& M            End If" U2 K' @% J( U2 q0 J+ n
        Loop# B) r% O1 X/ v) ]3 k6 V5 V3 S( D: K7 y
        LineAC.StartPoint = Yc '按计算结果移动直线AC起点3 k9 P1 n! c4 Z7 x1 K; h8 \
        Y.Center = Yc '按计算结果移动圆Y; T/ N* D5 A# L. {' Y
        9 _( E& g/ @  Q) `( h1 ]) p' x, I) i, l
        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。+ F) Z, h* \3 t: I/ ~
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")2 f2 n: F3 K0 X$ H$ ^
            If S > 2 Then Exit Do
. _- |0 \+ x. F& x/ k# v6 ?. ?* m        Loop
2 S9 w" Z+ M- s$ G2 K/ a        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界# S. X' \" {0 _* I* R7 k2 p- |
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标& p9 j9 a% p$ P8 b! }
            Yc(0) = A(0) + I / (S - 1) * AB4 B' S# r7 p# h& w7 x
            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)
4 `1 ]  G5 P! }5 z, m            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)8 J8 u- }( Y( m4 z+ r& G! n$ `
        Next; J9 `5 y3 a5 W( Y- q* u
        St(0) = 1 '曲线起点切向$ r; k  q* X. i3 ^  D
        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)))& i1 ~7 K: ~* N: _4 @- n
        Et(0) = 1 '曲线端点切向
8 i  n/ @8 s" l" s- {        Et(1) = -St(1)
3 o4 a5 I- l. z        .ModelSpace.AddSpline K, St, Et '画样条曲线
  h; b. Z. G1 r5 l- Y- U: A% {+ \* N    End With
0 O* n. H% B9 U1 j$ o1 T10
2 b% [& |3 y9 V4 ~# bEnd Sub
# G* r* Z9 ^6 T
8 ]! Z/ n+ O5 T: `. B( X[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 12

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
* O# W! x4 s( d2 X# p可应用excel序列功能,非常方便,具体步骤看excel压缩文件。2 h6 w& k7 P" F- S. x' R

4 f) B2 p; J9 f7 m/ K3 B[ 本帖最后由 zcf108 于 2007-1-12 13:28 编辑 ]
Untitled.jpg
11.JPG
22.JPG

excel文件.rar

2.24 KB, 下载次数: 9

评分

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

查看全部评分

发表于 2007-1-12 20:43:45 | 显示全部楼层 来自: 中国辽宁营口
网上流传两道根据不完全边长画直角三角形的题(见附图),号称“难倒一片CAD高手”。当然,这两道题用CAD基本做图命令是做不出来的,但如果使用CAD二次开发功能,这两道题就迎刃而解了。
+ x+ I( w* z$ w  Q( b( q( Q* q        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
( m' e6 x0 x& r# U6 i. O. U4 F        原贴已经关闭了,就发在这里吧。
5 ?% K0 P  L) n, p  z3 P
" |7 L+ c4 O+ ]+ r1 ][ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 10

发表于 2007-1-15 20:55:32 | 显示全部楼层 来自: 中国吉林吉林市
15#的内容发贴时间太长,不能编辑了,希望版主有空删除,或者只留"请楼主举例说明一下,哪个软件有三线交点的捕捉功能?",误会已经澄清,放在那里不太好。
: S6 y: j# Y( P% v楼主发的这个主题,以及各位高见,对我的帮助很大,对楼主表示感谢的同时,也真诚地道歉,对不起了,我应该先通过短消息和楼主沟通会更好些。希望不要影响楼主和大家讨论的热情,也盼望楼主有时间分享自己相关的心得体会。

5 v# G: Z# G  U8 \6 c( F也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家3 x/ C! E2 y" u+ q  w
请看新贴:一种新方法“精确选点法”解CAD难题
) F+ V: l! B4 }1 p8 r" `6 whttp://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题
  o% S* q& X/ H6 v3 W我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢
! @' U- G! K- R! a3 H) w; [解题步骤请看 23 楼的链接6 J0 S  Y2 f: [  c9 G
尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为50000000
; `  P/ A; w5 Y' k5 m8 k
附图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 )

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