QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
4天前
查看: 7336|回复: 25
收起左侧

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
/ L9 I8 v* d7 m) u4 `4 g如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B2 H+ v9 |; e6 L  v; n
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
! Y% W" D: y2 h9 n- z5 \1 c) f+ G
3 H& u( S+ V) g' ?4 ]/ D2 C
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............
" D6 j. ]- |5 B5 o, K, \各点不是可以直接交出吗..........8 A: l; h) r1 I2 y9 ]$ x
楼主要"精确"......... l2 I, N7 [. n. }8 ~1 ~5 y
曲线总是近似的呀................
! {( ^  }! Y2 k# r4 g4 \1 m6 b% v* P
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表) y9 o% B6 c+ ~# ^$ j- r8 b# n
求这样的曲线有嘛意义呀.............* j/ r% I+ {' x, o. Z- w+ u, M
各点不是可以直接交出吗..........8 b0 x; Q3 d; t2 Z7 U
楼主要"精确"........
( N) ^8 d; ]1 |9 E% ?/ t7 b5 z# a曲线总是近似的呀................

9 G% [/ h5 d0 J. k9 v' F求解CAD难题简化
4 f4 l( N0 a& o# p+ T9 X" o6 c6 D0 l- X6 I8 c( L* s
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。. f- z: Z! ]2 ^5 V3 A3 Q
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。4 ?6 {+ w7 Y' W# j: S6 V
注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。2 G' D7 q8 f  K. B4 g
加载yxgj.vlx,命令也是yxgj
' P7 B- F1 ~& }# _  Z
9 j9 T; y) V7 L4 Z以下为操作过程的文本窗口:
  _) ]9 K% h4 N3 R命令: yxgj% i0 D! L4 d' n2 u& e% o1 P9 i
AB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816
; p' d# D- v' P# ?确定A点:int  B" ?# R- t4 H7 G1 n
: o% V( q# `6 S+ {# M1 }, o+ D
确定B点:int# Z5 V% d& X7 G
- }% w  j* o# m7 q5 Q
确定C点:int
$ w4 E1 {, A7 Z  w3 G9 f3 @4 D, o. H, {1 b! h
输入圆半径:int
# x9 c! @, P" L* I* v% H( g' c+ Q于  指定第二点: int
: K& u' ?) l9 X: R3 S
$ R, r5 ~9 Q7 r/ h! ?$ \( `Grade(确定计算等级)<12>:0 }1 J; W5 t: w$ C' ?$ J
5 K7 a- R4 S1 t# u2 L7 r  s
[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?9 @$ X2 H5 J  X4 h- e5 y
6 v+ N, [5 K$ I3 p2 P5 R8 C% ?
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!0 D- |8 v6 l- K# X

2 n' {# d; v& E5 E8 V0 {0 \呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!3 g" b8 U% Q- z/ B( j; D9 B4 q0 I+ G

3 Z1 _6 Z+ j# ?真想得到这个赏金呀!可是.......哎......还没有学到家呀
! L7 v1 r% X& a7 Y9 V

. `: q* l; C6 ~3 z' Z
! Z: Y$ B$ e/ N" c5 s2 Y[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表: G' J. y" h" w* V6 U
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。8 }9 P8 v6 U0 w1 ?# ]
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。# Q# y9 [5 {7 m& R0 F: x
注意捕捉 ...

/ w5 i$ P+ ~" F! J* n& V        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
' P0 u$ F3 ]* T! r% v' L        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。
) n) s4 L! h2 t; G0 W7 i        看来这个维币应该奖给moonguy兄了。
  d/ C! L! j+ ]$ N6 W7 ^: ?$ ]& C& |        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。8 }3 u& ?. _" V/ [

. W+ p( z6 g) p; t; z[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!  K% W5 K. F% a9 X
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
( Z* b; _7 _$ s) t; w2 T/ C0 H0 B1 _4 J
( u; S7 I1 V7 k+ H        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。; p: Q, R. }3 U* \' \
       ...

4 F3 F; O: x  f; o  s# y: m3 T) c: l' u$ C& b* `) O
我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
: K$ F2 ~, k8 J: y& m5 h% p3 x* k7 x/ Z( H9 }, e/ Y3 j
这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。: e) x- L; W- F& V
9 X; {0 G8 a, V$ \
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。5 D" u0 }0 D! Y% a

' W- D1 M! X4 C# @/ P $ d* O% e' f5 ~5 D% r) s* T$ L

$ i, E( w3 Z% |2 v$ ^再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。3 f. x0 s$ h; d* k3 Q6 g
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
! o, k* {) m- X2 Y5 {; I$ P" D4 {/ y. `6 ]
[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

% V+ Y6 i- K8 ^/ e! @6 e[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?; J2 m$ X  z$ V

6 D* M/ i- C7 X% W& x& {" A$ p7 {
1 ]! m+ @/ n) i6 N1 p& }看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
2 r, q0 g: J1 i: ]- w, }0 m: {% m4 H* ~6 j6 R* n, |
[ 本帖最后由 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" E/ l0 T/ |9 f- M故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。
( m( ]9 Q7 X$ ]! Z" T% ]% l! ]5 Z; H" F' e( G
但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
% X: l5 C; l2 F* b9 A1 h/ \" K! |1 H" |" ~0 q" ]0 e$ |9 q# F+ t
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。' l; X7 i1 S' d0 d7 }
                                                ——blackbird# Z8 P2 o" ~- M# E, b; f4 @
& F0 i+ i) e. [, p) S' `2 V0 |! u
该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
/ ?+ C$ H% t9 c2 o$ N希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!
3 D0 n" r# p7 O* l0 |) }' `9 k9 \& X! \. e+ }( }
[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?: s' I1 i$ V( z  j1 f
以下是用VBA求解的过程。& b$ {5 F- k2 \
附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图
# v! q) c* e4 Z- P+ y4 v
' Z: \. Y' x0 k! T
Sub NT()0 o- B" V- k2 b9 g& r4 r0 L) B* H% y
    On Error GoTo 10 '发生错误时退出程序
7 t5 t1 W8 }8 q' t    3 h0 s1 ]* ~$ C& @7 G
    Dim A As Variant 'A点坐标+ _7 f2 v2 p+ l, c
    Dim C As Variant 'C点坐标! q( }9 P: [& O" W" }, L; m
    Dim B(2) As Double 'B点坐标; u$ {( i' |( }) D3 J. {, H+ }
    Dim P1 As Variant '直线12起点坐标
0 a" ^) @* f1 r( B) K, ], _    Dim P2(2) As Double '直线12端点坐标
% c4 g* p- w, b7 {& s# [  O% S    Dim R As Double '圆Y半径
; R+ J- ~: v0 K2 ~5 Q: D3 J    Dim LineAC As AcadLine '直线AC7 p. q& `7 S# W- P/ {' f. d
    Dim Y As AcadCircle '圆Y
% }# Y& q2 W. i, r    Dim OC As Double 'C点到直线AB中点的高
3 r8 J3 ~1 [) \) c5 J: m# a0 C' S    Dim AB As Double '直线AB长度
5 K9 w+ u3 {$ x  p5 f( ^    Dim M1 As Double '迭代运算左边界点的横坐标& S/ C6 ?. a6 g: r
    Dim M2 As Double '迭代运算右边界点的横坐标5 A- a' K- r! e
    Dim Yc(2) As Double '题目中拉伸点的坐标
+ i; y. K$ ]% A. m' p    Dim X As Double '圆Y与直线AB交点的横坐标
# s/ Z0 `5 @$ Y! d- A4 i5 d/ c. O    Dim X2 As Double '圆Y与直线AB交点的横坐标* c3 l2 W/ ]1 p3 Y+ O! m: m' [
    Dim S As Long '曲线拟合点数量(3~32767)5 I7 l. f+ X* n! Q7 V
    Dim K() As Double '拟合点坐标# D' `  g8 S7 P% ~8 ?
    Dim St(2) As Double '曲线起点切向
# Y9 b/ x( Y  g; c! d- s8 _5 u    Dim Et(2) As Double '曲线端点切向
% b# [2 F8 n4 F' J2 }7 U5 {    Dim I As Long '循环变量6 t; I4 ?9 y+ P! S
   
. i, X" u6 q: a8 ?    With ThisDrawing5 n9 c( A5 B7 V
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
+ u3 Y" L5 y! f3 L% }        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
3 J$ y# o' H* t* Y            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
! Q! o% l0 w) ~            If C(0) > A(0) And C(1) > A(1) Then Exit Do" ^) Z2 t+ A& j& J
        Loop
2 u5 o' b" f- O) Q+ w7 k        OC = C(1) - A(1) '计算B点坐标3 ~  k: y% T1 F4 D9 {9 H# e
        AB = 2# * (C(0) - A(0))
% [* m: `% r  j; v  Q) R        B(0) = A(0) + AB
( f1 C1 s3 {6 e% A2 }+ P        B(1) = A(1)
+ o  c6 e- V# c        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线9 ~" ?6 Z% M2 t
        .ModelSpace.AddLine A, B '画AB直线
# Z9 Y6 r! E, a        .ModelSpace.AddLine B, C '画BC直线& P. V4 O3 u5 u
        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。; l( N$ E9 ^9 r) |% h6 [- D
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")  W( b: ~* P5 |, p4 f
            If R < OC And R > 0 Then Exit Do, W$ M' }7 f2 Z& _4 u4 k# @8 [
        Loop
: [4 h3 u- K/ t7 [$ d1 y; D        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y. T7 d; s- a; [4 _% v5 x
        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
( z3 P( F2 Q; Q* v        P1(1) = C(1) '计算直线12起端点坐标
9 V" |' N" R1 k* P        P2(0) = P1(0)3 K6 s: F% a9 c  c3 }
        P2(1) = A(1)
0 P) r# M) N3 J1 p2 X) J+ l0 w& V3 y        .ModelSpace.AddLine P1, P2 '画直线12
* F: _- ]( `' s        $ ~  E6 L5 t) H& v. {
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界
: o. D' t; E- Q+ C; q        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界/ c3 |$ j+ f5 a6 o$ {- k" O- \' V0 i
        Yc(1) = A(1) '拉伸点纵坐标与A点相同
' g; @; x' x% m5 ^' N, l6 ?, _        Do '迭代运算  B% y0 d' ^2 Z# g/ b
            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标
: M# g+ V5 c# T            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)
( h" R. T0 d) U" j: d' _+ H$ X            If X = P1(0) Then '交点与直线12重合,结束运算4 C- G3 `; ^; Q% Q) V
                Exit Do
" z- _' G( o( @            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算
2 H9 e7 J" Z  e& W! q                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果* u% U' K. V3 K" s3 g8 z# V1 ^1 o$ k
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
, ~! o! h( D9 d; {1 Q                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M26 t5 T. B2 q' d% l, ?5 @
                Exit Do
; H* g. K1 ^% p" E# ?' C            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算& F$ e9 q3 F! t) |- E
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
/ B4 A( G0 U* D2 J                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
+ d9 y9 l* }: S                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
: H. {  l2 ?( u6 D/ T' V                Exit Do
: Q. u4 E( q3 S+ A            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算  o, T" z3 ~: X! b  `2 z" I( ^
                M1 = Yc(0)2 `! R5 n) {5 r4 A3 o4 X# ~& N9 Q$ o
            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算. J8 i7 c3 Y" W" p0 ?
                M2 = Yc(0)
# p; I9 R7 u/ T* F. w) p6 t+ Q            End If
6 G' _  J" C' E8 ^( d        Loop
4 l7 y3 P( R' x* k, r$ y        LineAC.StartPoint = Yc '按计算结果移动直线AC起点8 ^4 X, D, C% u7 B  X
        Y.Center = Yc '按计算结果移动圆Y
5 z  A9 S0 n, S, z2 L1 T5 r        
! [! k  j6 a7 `5 P$ J2 P, c        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。) b; a( J- `9 ?- m* X
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):"). Z" |) G) x7 A2 e
            If S > 2 Then Exit Do
4 Z8 X% ?  [- v! ~! K        Loop  y1 T: A$ L9 d
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界
) H% u. U0 w  N; t* B& n        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标& U1 n, \' _8 {$ N9 I5 O, M5 z
            Yc(0) = A(0) + I / (S - 1) * AB
" Z0 u4 r/ s4 M4 P" V            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)
" R4 \$ ]- [) O2 W! S  b            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)  S; y2 r: a0 Y2 s+ [9 l
        Next: E0 q" L" p. L
        St(0) = 1 '曲线起点切向: \$ q. z  ^5 h3 Q: D! z* |# {
        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)))
- ]( r2 I6 c4 c+ u7 e        Et(0) = 1 '曲线端点切向5 q( [: S3 C9 }: T3 }5 y# q
        Et(1) = -St(1)
0 F; A: d. e1 A+ Y% Y8 S        .ModelSpace.AddSpline K, St, Et '画样条曲线- |8 f4 V0 h# ^' [" V/ w9 T: J, r
    End With
. B7 Y3 B+ L% p! F10
2 x# U) s2 y/ `End Sub
5 m3 N% u$ k1 y9 }2 e$ k7 q: r8 N6 X
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。% N1 @# _2 b0 Q. \, r
可应用excel序列功能,非常方便,具体步骤看excel压缩文件。2 f9 T2 m$ P- y/ }  c

9 r. N! z( d3 O8 y, Q$ Q' B# Q[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。/ |9 U+ z5 R, }; Q$ p: k1 {* M+ ^
        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
, s4 S9 o( c; R5 R2 u+ [# x0 H        原贴已经关闭了,就发在这里吧。
' R( s) U7 {4 \  U
3 A, L- q1 f! y/ L: K1 W% e[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

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

3 Q- D" i! v9 w& {) d也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家) L# G1 `- v: U- J+ U, T0 M
请看新贴:一种新方法“精确选点法”解CAD难题% `$ @- M& u6 \7 s/ N# y; i8 t
http://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题
8 t& E0 l, O* J) E; h我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢( E$ S  N7 v2 y' t2 F$ e
解题步骤请看 23 楼的链接0 {1 q' v+ k& z) {  \$ z. `
尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为50000000
& F  K2 `; N6 q4 [2 n/ U
附图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 )

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