QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
5 B0 F2 k" n5 E/ F; Y如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B
) b, e  O/ D! d* t3 h. S- mY与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
0 l2 I" C, C) p3 \
# x9 C+ [& V, G* X, v  O+ }. U1 c; |( V1 E
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............+ F4 t3 `% F- r) C
各点不是可以直接交出吗..........( ^% }& f# z* A1 |2 @; Q
楼主要"精确"........" q# j3 {; T5 Q5 j" d; k8 A) e. Y
曲线总是近似的呀................
! H% m. R& B. Y5 L' `* I. R- e
' j( l7 S  k. T4 M[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表: P+ J4 U) Q# `2 t
求这样的曲线有嘛意义呀.............8 Z  K5 f5 B& Z- [' k. X
各点不是可以直接交出吗..........
% i  S$ M: Y; O; i/ ]# |1 @; x- q楼主要"精确"........
* E$ `# O' I9 S7 s# a9 d曲线总是近似的呀................

9 N" Q) y9 i& S* a# u8 }$ P& z! e求解CAD难题简化
* I9 `% f/ G" ~5 _! k: s  U
2 `+ }' ^8 Y, h' B& G5 j8 Q' 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
( m, i2 n  X8 P' F, n! }7 x6 p, q) o按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
. M1 y) }( K% o. z8 O6 F# j$ _注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
6 \6 L7 Z, n- p: ~) c9 A加载yxgj.vlx,命令也是yxgj
$ E. [4 o) K* h! ]5 h' Y+ a1 B; i+ l4 r/ a, Y. `2 N4 G: u
以下为操作过程的文本窗口:- I) G' X% Q+ i5 Q- [) I
命令: yxgj
: S# f5 s$ d1 j# g; N! L8 n: BAB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816
- b2 A- Z( ?4 C6 d5 B  q- E, \8 M确定A点:int
& G. ?% |' q( ~$ T' d0 h' g, [8 T+ ^5 w8 ~  P& ?; d
确定B点:int
' s$ ^6 Z. [% F2 @! y6 A9 ]
% J7 B9 r! Y" n" s6 s5 e4 q) g确定C点:int
+ A: X) G0 s3 S" u. B. e- e0 h0 r- Z$ U2 R5 s9 H- _1 ^8 _
输入圆半径:int
5 N5 J) t7 v8 Z于  指定第二点: int
* Q5 z6 d; o0 n- d8 B9 u
7 K( J. C- i" r2 lGrade(确定计算等级)<12>:
0 ]4 @- W/ q5 [0 m  p2 b/ b. \; G( U2 e) a4 v$ j
[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?
1 d/ I9 H6 n. W- Z/ i( S/ H4 u/ |% ^2 ]4 S
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!5 n! b) D: _6 @8 ?, J
, l$ F+ x  k  P: c$ k" e
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!! i; r( F3 o$ P8 ]" s
& h4 W8 C! V6 W- }. b$ M$ r
真想得到这个赏金呀!可是.......哎......还没有学到家呀. @2 Y1 d( |9 ~; ]6 Q) v, ~
3 a7 e1 k7 E% g$ k. x5 a3 v2 U
) q, J/ W; E- }, V2 |2 t* S# B
[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表
" z+ N8 f, r! A( X! A( N楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
; l( t9 S+ h1 W/ q7 y* W" s. K按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
8 s6 R9 b7 ^1 Z注意捕捉 ...

+ F) E7 h- v) [        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
' f8 `1 f3 }$ L        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。
4 s! m. t3 ^/ D$ z" T1 ?- @        看来这个维币应该奖给moonguy兄了。; E' e/ z" }, @8 Q; n
        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。0 X0 F3 b4 K) a) q% e4 R

4 e2 f; C1 x* B! ]& U[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!) C. r: V' N1 x2 j& S1 Y
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表. L3 e5 K* ^3 N% ~9 d9 k3 L
! A# S6 [+ G& @$ C
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。  E1 A1 `7 ]- q2 A- `
       ...

! M$ D( N; Y3 E/ O5 P9 z) h  r& l, h, q: q  W- ~& r6 {
我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
& O% c) N. q8 X% }0 s
9 W' c9 _' l4 y3 a8 k. a: U, Q这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。" A( |5 p, c9 p, K
* |' y: N$ ~1 j, t& I& h, X
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
9 g7 O$ V# H6 |& J0 l ! t' R7 y. k" p; g0 ~9 m8 z
. z0 {* P6 o" S* B! f  s9 u$ ]
) I+ t- t( d, i" t) {" }$ t! a* d
再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。% L" V3 T9 A( k; d
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
5 y$ a) P- G/ _3 b5 L5 j$ [: c' Z$ ~+ x+ N$ {5 O) e5 \0 p; }) O
[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

" }0 d; Z6 [7 C) u但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。  V; ^' J$ y4 l7 ?
+ L" @6 \0 K" a
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。
9 J+ p6 U4 F& }+ A                                                ——blackbird7 o8 M& {; K0 y, ?8 N
8 n0 v/ E( d' r& o$ A
该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。) m5 c# J5 X3 g( Y2 i& T6 u
希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!
3 y8 w+ X) |3 R4 }* ~. x, B8 {8 o& E3 \) ~2 J' w9 k, k: v
[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
' _! ]! Y. ?2 U5 F: N1 B以下是用VBA求解的过程。4 F+ p& S& L3 G3 n3 v& O( s
附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

* |; A% `+ G$ j, F/ N, r/ b1 h, S& T6 a/ n% l  [& ]
Sub NT()1 p5 f+ F4 B. L) N/ y+ J% e
    On Error GoTo 10 '发生错误时退出程序/ ^; Q# ^$ O0 ^
   
& x9 ~: D# N  Z: F2 p' ~    Dim A As Variant 'A点坐标
- g5 G, n5 |+ Q! r    Dim C As Variant 'C点坐标# i, |* l3 P: T9 {$ Y: e
    Dim B(2) As Double 'B点坐标
5 w/ C* L/ p' }( d4 C6 y8 G    Dim P1 As Variant '直线12起点坐标2 w$ g: z0 y8 K# l1 f
    Dim P2(2) As Double '直线12端点坐标
. I. @# y9 }2 x; F8 a    Dim R As Double '圆Y半径
. G; ]# z/ [- T; Z    Dim LineAC As AcadLine '直线AC3 J4 Q. j3 P, k+ l6 Q
    Dim Y As AcadCircle '圆Y- B* _3 D( M# K1 f: y- L
    Dim OC As Double 'C点到直线AB中点的高
* t; L8 w0 F* y0 ]: P! b    Dim AB As Double '直线AB长度
" E# i: U' j0 S8 {. W* E& p; ~0 Z    Dim M1 As Double '迭代运算左边界点的横坐标5 R) V; B) {" o" j: U$ ?# l, \
    Dim M2 As Double '迭代运算右边界点的横坐标
, U$ U! y$ D0 z' g# V    Dim Yc(2) As Double '题目中拉伸点的坐标
) P2 }5 e  y1 D9 e9 q    Dim X As Double '圆Y与直线AB交点的横坐标
! j3 b/ p. ~1 E/ L1 T    Dim X2 As Double '圆Y与直线AB交点的横坐标
% t! I6 a* K+ r8 q) s  u    Dim S As Long '曲线拟合点数量(3~32767)
' F9 f8 T' I/ w    Dim K() As Double '拟合点坐标1 u$ J( G  Z3 Z+ v: G3 m& d
    Dim St(2) As Double '曲线起点切向
0 Q! ?: e0 `; [% d    Dim Et(2) As Double '曲线端点切向3 s! G; y  U7 e; Z# b2 H" ?3 h* @& U
    Dim I As Long '循环变量
  S6 P. ?% u4 W; h/ H    ! V. b9 h5 ~9 E8 g) s4 n2 _
    With ThisDrawing$ p' ]6 @4 y& \( w, j( R- X
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置/ T; K* b: M& i! s' S
        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
7 F: Q6 j4 o! H' ~- \/ s            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
$ A) e, M* ]) ~1 ^5 e) w            If C(0) > A(0) And C(1) > A(1) Then Exit Do
8 A. I2 w- D+ c' l3 ]& [8 b        Loop
' v- ?6 s$ R$ g0 j# l        OC = C(1) - A(1) '计算B点坐标
+ R( }9 f( H8 s' L5 e4 H% b( _        AB = 2# * (C(0) - A(0))8 _+ R/ c7 L) P9 D/ e! A
        B(0) = A(0) + AB* c' i6 i4 {  c& {* s3 F2 n1 ]+ n
        B(1) = A(1)* S9 S- q! T( T/ `
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线
( b) c+ Z$ r( p        .ModelSpace.AddLine A, B '画AB直线
* _6 r- H; M7 E! E& }$ u        .ModelSpace.AddLine B, C '画BC直线
: q' R, e8 Z! W; C7 `" R& R7 e        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。7 H1 Y) x3 ^6 q  s+ D
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")- d. U! H& w: X3 a4 }$ I/ o
            If R < OC And R > 0 Then Exit Do' U( ~2 {7 N; b; W0 Y' o
        Loop# Q) X* S# }* ]" ?4 H
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y" \, T% F/ C( K" c$ g& S% b% H
        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
2 Z- @0 y1 t, `7 J& }8 U4 |        P1(1) = C(1) '计算直线12起端点坐标3 E# X3 K/ I2 X9 M, u# d; S
        P2(0) = P1(0)
. h: n: j/ t8 {* Q3 [        P2(1) = A(1)
1 X+ y! r! v4 ^! n        .ModelSpace.AddLine P1, P2 '画直线128 J) W; e. L# p! h# U
        
) L! ~3 G# Y3 N7 S7 v+ L1 [1 v( ~        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界9 L4 \5 f4 i, Z* h! V1 k+ b
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界3 v4 p- |0 j1 B
        Yc(1) = A(1) '拉伸点纵坐标与A点相同& T1 y7 G) h/ h
        Do '迭代运算% ]2 N7 w; x- s" J! Q
            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标, u6 @* D1 `$ f- j3 X$ p  Y; U- J
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2). p! R3 k, ^; s* C, J! T- E
            If X = P1(0) Then '交点与直线12重合,结束运算  j- `" r+ v* J0 e) h( B
                Exit Do8 W4 n0 Y6 j) B6 U' W
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算
* \3 f( D: j+ v  U                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果
. V! T- D" ~2 w. @6 r. ?5 \  U- F                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)& H, B( M' a+ v9 w2 f
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
8 o5 S+ @1 t/ O8 g& \% Q                Exit Do* N2 Y; F4 M3 i( A( P- T# h/ [
            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算
  Y+ y% I; W: v- t4 y5 }$ P                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
; Y/ ?0 O$ W+ L& t                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
% h# l8 \3 X$ c2 v- s3 Y. f                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
& z% `- T" g7 @4 V. {                Exit Do
$ Q; k9 a% K' M3 @$ ~. f1 C% q            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
  K& f7 i$ N! ]8 V7 A: N9 i                M1 = Yc(0)! a1 S1 k2 z+ Y
            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算- ?, d5 o0 [4 D* C5 p3 k
                M2 = Yc(0)7 s, O) `3 q( e1 z) \/ @& {
            End If
7 o9 m5 p7 j  u) y# U+ b        Loop% W0 S4 G2 m$ E
        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
8 @$ X" n9 W  H6 U2 s        Y.Center = Yc '按计算结果移动圆Y! @2 N+ J# k: Q6 m
        
0 L% A8 O/ v" u5 ?+ u, W        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。1 N) s3 F1 @; f6 [/ N
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")! j9 A" D. }# W: N+ J
            If S > 2 Then Exit Do2 ]  o) W# j, ^/ ?' @
        Loop( f+ O( E  v: |2 x
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界
9 f7 A. F' S* d" a        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标
8 ], M0 _; c' S0 w& \# Q            Yc(0) = A(0) + I / (S - 1) * AB
6 y9 l8 z& k1 g            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)
6 p7 n( Q9 P! K6 V/ |            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)5 X. e2 [4 q. t+ G- w5 D  D
        Next% v1 u% F2 J8 B/ |
        St(0) = 1 '曲线起点切向
7 u! T5 L; k/ q: ]" O        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)))
* i2 k) M' X9 P1 `& |, c        Et(0) = 1 '曲线端点切向
8 d: ]6 [: m" g% w% j        Et(1) = -St(1)
# f& H$ n! A5 f* D2 m: S4 b        .ModelSpace.AddSpline K, St, Et '画样条曲线: R( e; N$ q2 u$ S
    End With5 f+ k& W4 P. F" R
10  G& N+ u, ]- |+ l9 |, Y
End Sub
9 R+ a& Q7 g- J; A# n+ N' l; ^, L3 `/ C& {
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。, }) q0 L& R7 F" G& ~
可应用excel序列功能,非常方便,具体步骤看excel压缩文件。, X( [9 L+ X  o1 j0 P
; J# b( [" b2 Q% e; {4 V
[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。, ?; P* i# V# h% R' }
        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
, |1 |* V) j4 [. B# \5 H9 i; ?* F        原贴已经关闭了,就发在这里吧。- F& g# ^) e8 Q# O
  @& N1 J& t/ X" X$ b' i
[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

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

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