QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 7188|回复: 25
收起左侧

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线, B* ]1 R- _+ i# o0 H
如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B) w% a1 j+ A/ P: x
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
0 q9 ]6 Q+ L: c2 m# e3 P" a
# _3 q) Y$ A( V! \7 Z) [5 [4 a3 `' l5 m8 y  f$ a/ Q
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............
$ ~" b% A1 e1 ]5 R: j/ r9 Z% g各点不是可以直接交出吗..........
! }; h& x# }0 N. l* ?0 O楼主要"精确"........
8 Y- A! U: ?0 ?! Q曲线总是近似的呀................
! l! B+ |6 K: Q. z6 S! @" A, t9 N8 r2 z' j4 h* u+ f$ v, b
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表
" a" t- T, d* Q4 [求这样的曲线有嘛意义呀.............5 k2 u, b1 K2 T6 q- D# w& t
各点不是可以直接交出吗..........$ O8 p9 m6 g0 m7 K' v
楼主要"精确"........
. K. E- S  y2 g8 m曲线总是近似的呀................
; [% {0 N# j& E2 h3 F3 C/ F
求解CAD难题简化
/ b5 J; |4 K! ~: d) x* A* M8 J% C/ [/ [
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
  Y: V+ y3 ~/ [- o- a- B按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。% l1 j1 ?7 @: M6 F7 m8 j
注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
0 ]5 T( F+ d* M9 _: \9 A加载yxgj.vlx,命令也是yxgj$ h  u( z, g' g# }' V
  W  L) R/ q8 [% P% E( ?
以下为操作过程的文本窗口:
' f3 J1 X6 u) ^- N8 l命令: yxgj. |6 o. c! Y0 i& B7 o
AB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816& }5 M( q2 p' w6 e1 S0 O
确定A点:int% L+ e/ s3 I- n. |7 Z; D
( r; O8 s8 x' c
确定B点:int
3 p; p7 P4 S- \2 b6 z# X. M  c5 G4 o4 l' C
确定C点:int
2 {# R% K0 Z! k# p! _) b2 N3 e; {1 p4 C/ ?) L* \3 A* r& U
输入圆半径:int
7 b6 U+ D# H8 v于  指定第二点: int" Y; G/ N$ N" {3 @

- X) v6 g+ c: H& [. S, wGrade(确定计算等级)<12>:
* j& O2 p1 E/ Z
& _0 \! O4 D9 Y! ~" h- |[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?' e) \6 ?  D+ z( v7 I  Y* c, a

/ z) q# I7 @0 xCAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!
- G) u6 u0 h5 n  Y
* w2 s8 c( b$ w7 U4 m4 Q$ k呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!3 c. p$ j  P$ S& }7 U
5 J. f0 z0 O1 z3 P
真想得到这个赏金呀!可是.......哎......还没有学到家呀
! W3 X% d! m: E1 T+ }% G
0 A4 E6 b  [3 m/ Z% {" N. R
' N1 Z" a, x! g3 @) k) u4 s: N  k
[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表: g" T7 f2 W% X1 N* ?) D
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。+ f8 @$ [$ T/ e/ O
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。( E9 j4 X# p" s2 c; C% y5 `
注意捕捉 ...
7 T6 ]2 N5 @3 l6 k5 D
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
4 h- K5 s* Y0 h- K: ~6 k        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。
3 u4 o$ ~1 _. R+ x% R2 U$ J        看来这个维币应该奖给moonguy兄了。
; m  L9 s1 n3 m* p        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。
& I) r1 Z0 r6 R8 v& L& {; ^2 l) y; V' @! P( g
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!' w, O9 T9 v  a' R! H4 Y9 {
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
% a" f7 p# L+ C& u/ Q4 z! g- L9 Y
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。1 F, q! H  K) A
       ...

9 J8 ~7 g$ }: _2 o4 D6 d. {! A2 P2 _
我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
- w+ e" T' A- m! e) {5 ]4 p1 p2 G* q5 Z) O8 g
这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。5 R; C; t, G7 s
  ~- S0 Q( D3 D: @1 M5 r6 }
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
% \" l* H; ~& T8 ^4 v! N
! x! f$ ?9 X) V, B4 f& T  ]4 w. o0 I
( t9 {6 C0 l; `; \5 R: ?0 F+ \
" k# c& a4 ^5 u5 r/ Y: b. _再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。
( C  ]4 y; H: @可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
$ w5 d( @3 G' M: f( Z
! B$ B$ L) \% c. F$ n5 u) L[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

你小子居心不良,存心让我在众多高手面前出丑(开玩笑)。再一点,我不是“老师”,我跟多数人一样是到这里来向真正的老师--比如★新手★、还有aishengchen(如果我猜得不错的话)等等--和一众高手(包括你哦)学艺的。
: h0 S: D* u0 m% @- D7 ~, h9 X& u不过既然点到我了,我就做个发言,有不当之处,还望各位高手海涵。) z9 |2 h, d6 o# b" |" E
一、我之所以没有正面回应这个贴子,是因为我对楼主的动机心存异议,不想顶这个贴。我知道楼主是个高手,他出这个题目不是真的在求助,而是在挑战。这个题目本身是一道钻牛角尖的题,类似“用尺规做图法三等分角”。他坚信没人能拿走这100三维币。, ?0 p, L* ?0 O
二、对原题的看法:我认为,autocad只提供给了我们圆和椭圆两种二次曲线,其它曲线一概用样条曲线代替(包括2007中的螺旋线和渐开线)。而样条曲线在autocad内部的数学模型只是一个拟合函数,在拟合点足够多的情况下,显示的曲线和我们理想中的曲线“相似”而已,永远也谈不上“准确”。
- F- e  u$ |' C9 |8 w4 \三、对简化题的看法:表面看起来,题面被简化了,不再需要画不“准确”的样条曲线,但我们只要把已知条件画出来就会发现:这是一个用部分边长求画直角三角形的问题--这个问题在论坛上已经讨论N久了,前段时间被★新手★版主关闭,现在找不到了,估计是被删了。2 R9 v+ D+ E4 |) k( K
  说实话,单纯用画图法解决这个问题,在下无能为力--因为我还没找到用画图法开立方的途径--而且我也没看到过别人“准确”地“画”出这种图形。我遇到这种问题,通常使用autocad的VBA,而且可以保证得到的结果和在autoCAD上用画图法做出的精度完全一样。如果楼主承认这种方法属于“CAD方法”,我就立即上传我的宏,就怕届时楼主为了保住自己的三维币而拒不认输。1 C& U( n8 s, m4 o1 E" D8 w+ Z
四、尽管楼主动机不纯,但题目本身适当地加以改动后还是有利用价值的。
. N# B+ L# L2 q8 |/ a. V5 s+ b  1、对原题加上以下限制条件:用线段AB的五分之一做为拉伸线段AC和圆Y的步长画出样条曲线(拟合点--含样条曲线两端--共6个)、画曲线时必须考虑两端切线方向。
1 Q9 ?) u7 Z' X4 s: J  2、简化题中的直线12改为水平方向。/ Q% e1 A+ y0 A! E
  这样改动后,两道题就都能用autocad命令画出来了,其中第一题稍复杂一些,第二个相对简单。如果版主能对上传答案--特别是答案正确--的网友适当加以奖励,就应该能达到既活跃了论坛、又能正确引导大家的努力方向的目的了。
+ A& j4 w. h! S5 _# ?& Y
% P( Y' a6 Y% B& M2 v8 T7 `* q) G[ 本帖最后由 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 J; V2 O$ U, q. V- x; m 7 x8 e2 B  t+ l  y( \7 t! e- K
) ]* ?9 f1 M9 w
看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
: _4 S; S) e9 |) B8 v9 U  G4 u1 W: f6 D7 r4 r3 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不能精确求解。6 b$ g1 u6 y& w* Y5 j2 [
故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。! M% M! ^9 W" K8 I2 g8 a1 ]
* ?+ f% X. Z2 P) h2 a
但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。6 G. U( z6 o  ^# D& E+ y( N

/ e* y, K; T3 v* t6 ?; k& E5 w; m同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。& _3 ]& d; i; D! V. m
                                                ——blackbird
! u  F. Y& ?3 J& f+ a; g; s 9 c+ P/ P2 u2 ]
该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。& j% L' g4 v; ~+ _8 d6 F
希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!1 y5 R4 d) a3 L$ v  u# }

2 a8 f' c  G& s[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
7 B# k) O9 o: [% L% u6 v以下是用VBA求解的过程。
' ~/ z% ~2 g+ N) h% ^附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

1 E% l3 c  o& ]  J
- k+ q. ~( l' Q$ |Sub NT(), q) p9 g0 L! Z, {5 p
    On Error GoTo 10 '发生错误时退出程序
+ q- @% [" _9 Q( u+ l7 _4 c( e   
% V! y' z! O: s2 }3 x& E+ R    Dim A As Variant 'A点坐标
5 D: y4 L$ p4 X5 ^  F, Q$ H    Dim C As Variant 'C点坐标
( l' E8 Z$ M  d/ s8 `6 ^$ O    Dim B(2) As Double 'B点坐标9 l  x4 P3 e  ^0 @9 u5 }& Z
    Dim P1 As Variant '直线12起点坐标
+ j- ?) X3 s6 k    Dim P2(2) As Double '直线12端点坐标
8 j% t: \" F& P% z4 }6 ?% p8 ^8 r    Dim R As Double '圆Y半径2 K. E. W% \0 A& m$ u  d* U
    Dim LineAC As AcadLine '直线AC$ ~  Y) m1 y/ S# }' h+ o4 _* U
    Dim Y As AcadCircle '圆Y
$ j+ g. D% b! L' ?    Dim OC As Double 'C点到直线AB中点的高
% d$ |, v0 ^, v; P8 C) y: l9 [    Dim AB As Double '直线AB长度' i) ]" \' T5 z$ t, ?- Q- t3 f" R
    Dim M1 As Double '迭代运算左边界点的横坐标
( J' W6 {/ G: I& K+ d    Dim M2 As Double '迭代运算右边界点的横坐标
7 g" O$ o- X0 D8 ~# G5 @( ^    Dim Yc(2) As Double '题目中拉伸点的坐标. A/ s2 ^# I) U
    Dim X As Double '圆Y与直线AB交点的横坐标9 m" u. o5 ?3 l: A9 u5 l9 R8 Q0 _
    Dim X2 As Double '圆Y与直线AB交点的横坐标
" w/ M/ x+ H% m2 y    Dim S As Long '曲线拟合点数量(3~32767)- m5 j9 H( G9 I3 \4 T1 T% `; |5 y
    Dim K() As Double '拟合点坐标
. Z$ l# S$ Q  G    Dim St(2) As Double '曲线起点切向
- ?" z7 R- s! [    Dim Et(2) As Double '曲线端点切向
  v& c& M0 p3 ]: [4 p    Dim I As Long '循环变量. j$ G8 C* m7 W# S8 c
    + r5 W4 Z( e; o" I9 L
    With ThisDrawing! ?7 W1 Q$ Z& ~9 `5 [
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置! }: X) y& r, V3 s3 k
        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
* A% r/ L5 Z( o0 H1 M; p8 M& H9 O            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
  a% }2 C2 j2 s2 C5 D7 Q            If C(0) > A(0) And C(1) > A(1) Then Exit Do0 K3 t2 `5 B$ d" j; ^& H) M
        Loop
3 P" @* S! `4 g9 d$ j* P: ?) D        OC = C(1) - A(1) '计算B点坐标
; k# O+ r( \; J3 S        AB = 2# * (C(0) - A(0))5 O8 f* ^0 o) s3 x
        B(0) = A(0) + AB
# x% G, z6 G2 M& ~4 p7 h; e7 l        B(1) = A(1)  s( }3 e- a2 _$ [) _
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线. i7 G; r/ r* `$ g& D
        .ModelSpace.AddLine A, B '画AB直线
7 L6 |0 p5 \4 i" L  \) _9 `        .ModelSpace.AddLine B, C '画BC直线
; `. P# F/ I# y+ `" F$ {        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。1 @; Q) l( ]% Q" G* z- s0 G
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")  h/ h5 P# Q' `, d5 m: G( Y
            If R < OC And R > 0 Then Exit Do6 b  a6 @+ c: n3 g- V$ r
        Loop
0 O7 V$ x1 _* E; X; v        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
6 D( Q( O' M1 p0 v3 t: P' h        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
6 V) `# \7 O7 P: \$ P" [  q        P1(1) = C(1) '计算直线12起端点坐标6 P7 N% Y9 l( ^! E  l; `$ u7 Y& V
        P2(0) = P1(0)4 m9 t3 Q4 J3 \$ h( a2 o( o
        P2(1) = A(1)
2 {5 _6 f3 h4 x7 i' W. d. }        .ModelSpace.AddLine P1, P2 '画直线126 e2 J5 U1 ?0 h
        % W: x5 x. `! g" e. O( A& ^( f
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界5 y8 H% z( v- e( |7 C" r
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界! }8 W1 H3 |3 e  G+ \6 s4 N
        Yc(1) = A(1) '拉伸点纵坐标与A点相同% q3 O8 k/ E, F+ P
        Do '迭代运算4 O8 L- O5 A6 }; ]$ H  I+ ~
            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标6 [, S/ ~: A' G; K% N
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)
- ]1 K; X: p. o5 J& u5 h9 z            If X = P1(0) Then '交点与直线12重合,结束运算
5 B  D4 a+ G9 ^0 i  w                Exit Do+ m, [/ D8 E1 }6 R" g/ q% u/ k
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算& T  V  _4 K, Z3 u  {6 x+ t* \9 e2 |5 f2 V
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果
: F2 k& F, W  R$ ^7 H. `( p, K                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
$ K3 J! r: ?- B3 m/ Z- l                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M27 l1 V0 w( `, Z+ ?
                Exit Do% [9 q) R, |% ?
            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算8 r! `  Y8 O/ M% `
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
: P9 y0 j& Y' `- E! O& F5 P                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
' c+ p- H; V, z+ R# Q                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
% A: e1 a% V0 r  r                Exit Do
. \0 V8 h! @# J" z: M' Q            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算$ D3 T* p- ?* D. J) Y! D
                M1 = Yc(0)
, U+ J, s- L5 q" [# m            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算& P8 z' o( X  w# [9 d7 Z- t; |) l6 e
                M2 = Yc(0)
& A% i5 k  N' }# _            End If
- T2 L# \* i# @* n& T; k& y        Loop
8 }+ q# h0 J4 ^( t        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
" \3 m/ O+ v1 F" b( J/ S        Y.Center = Yc '按计算结果移动圆Y: R; v. `$ x6 S; t$ {& X$ p
        
. {8 v7 l/ K) i7 ?9 D9 e, Y        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。, ?! t2 }* X! ?* i- ?; d+ H# L$ j+ D
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")
( ^% Q1 ~. w: o& w3 \            If S > 2 Then Exit Do2 v' j; I( K4 u1 N! f& O! B1 H1 @
        Loop# ^3 _8 o4 W! D: b2 `( s
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界! n6 U) d& \/ ~7 c3 l6 d
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标+ i2 e3 L* i1 t& M" d
            Yc(0) = A(0) + I / (S - 1) * AB* Y0 u# L) Y9 P: N. u9 {
            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)
# g! f9 h( u2 x( p, E: w            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)
3 }! G0 K' G1 i" I" w9 }  |, z        Next2 K8 T8 C  v  t9 b
        St(0) = 1 '曲线起点切向
8 f( ^- B; ], W; ?: f        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)))
' `( t/ m- p7 f1 R. C        Et(0) = 1 '曲线端点切向
/ n/ n9 b$ A7 @        Et(1) = -St(1)1 {) n8 y( c9 Q& R- d
        .ModelSpace.AddSpline K, St, Et '画样条曲线
" }. _% F0 K, Y0 I3 {3 u; }    End With! k* U9 c3 F, E) x6 e3 x5 r6 Y5 v; X
10+ T5 b' {  [: a, i& Y9 d3 r
End Sub% k/ E: B5 b* y+ Y5 R- G' S" {
# W6 I1 v  G1 m& l( _* l
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
& j; e$ i0 L; z) n可应用excel序列功能,非常方便,具体步骤看excel压缩文件。
% k0 Y; f$ j! S8 q, F: x! y
, |  O8 H& ^& d[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。1 O+ h. G3 q( |0 p/ C
        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。  j( G( y1 [6 s4 J- e' H) E6 N3 N
        原贴已经关闭了,就发在这里吧。' f$ j& A7 t$ X  p1 Y
1 Z$ ?. j% Q4 m( o  i
[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

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

& l* u; E9 F* W9 H也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家, w! J  l; [. _  N' `
请看新贴:一种新方法“精确选点法”解CAD难题
' ^+ h) u+ B1 G! k& {& y. Fhttp://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题6 f3 j0 p% Q9 x- _& p- e3 R
我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢
" ?; c9 u" g  i1 X2 H" g解题步骤请看 23 楼的链接1 r1 A& U0 j0 [$ ]
尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为50000000
& ^0 N) p# b& X. d  i$ G" e: O
附图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 )

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