QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线" o& p/ E1 f3 B( i  Q3 |
如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B; A: ~) S* s8 ]1 o$ h
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
. `% U" h1 k0 }# x, t* s% {/ }( W% _. g% T4 m+ U5 H& L0 b/ ?  c  _
3 ?8 W$ K  \6 m1 I
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............
9 ^2 K% k" ?; F' |6 d. {3 m各点不是可以直接交出吗..........
5 R8 x. u6 J) b- G, z: r, ]8 J- s楼主要"精确"........
  Y3 ]# b3 y2 x* n! F曲线总是近似的呀................- p; `# l, D8 q) v: Y3 `, @
1 A; X# O' _9 e5 y/ k6 l
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表0 r* B  U+ v( U" U- m
求这样的曲线有嘛意义呀.............
) B6 x" b' b/ L' n各点不是可以直接交出吗..........  A/ J# x5 v% ~  Y
楼主要"精确"........3 o* }9 z* g2 P7 i/ \
曲线总是近似的呀................
# Z" V5 R/ J0 i8 u* J
求解CAD难题简化3 W7 X9 g  _) O8 Q% k, d; R$ \

: p5 w- d. r+ d- \# Z[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
3 g% b8 o) a2 S按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。  Y, L+ L: Y1 W
注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
% ?7 Y3 G1 ~1 W2 m5 |) e加载yxgj.vlx,命令也是yxgj
  W# x" E( [1 k5 Y4 @7 r6 I; u/ z' B& v8 q) a; D4 V
以下为操作过程的文本窗口:" u" g" c" f* A
命令: yxgj
% e4 U1 t* j" Y8 V( D- lAB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816! r: [3 b6 S5 U" @7 r
确定A点:int
: _- f. u2 f8 S: H) `; F' z8 e3 m3 Y( G& I# Y: s
确定B点:int
  \5 {* ~$ P2 w) S7 n# x* n) @$ S8 z' y5 L+ d9 \
确定C点:int
) |/ s6 j; j2 w
2 S  P- H. G( p0 s输入圆半径:int
9 O/ Z0 n8 q3 M; F- c( h于  指定第二点: int
* d) c4 ?% b* t% e/ W% b( o4 p3 k. ~3 ?7 g5 S# Z
Grade(确定计算等级)<12>:, k+ D3 F6 }# I! y

6 i; W4 u  x- P[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?0 s8 G* M1 t& h% t8 z& ~/ h* J9 S

. G) M- b$ w5 ?- z, i" J- x7 {CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!8 P, u- W' _, A
3 a2 v/ @3 Q* Y' R! m
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!
. M! J8 a4 ]1 I# q% B' L
' v6 u  w6 L2 c真想得到这个赏金呀!可是.......哎......还没有学到家呀
$ b. Z" ]+ F9 k

6 B: N+ f6 g- j: g. F6 N4 S% i0 ]  J+ G! U
[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表" _% n( o9 l8 s( p/ m
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
. z7 ?- w8 u* ]+ r# c按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。8 _$ G6 t6 G& i) ?; n' F, l/ y& b
注意捕捉 ...

% D- w, Y+ P9 a) g! u1 S        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。/ L5 [" @) a- T& Y
        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。4 ^5 g9 m, h, {% E" R
        看来这个维币应该奖给moonguy兄了。
) D6 c' _8 h( h: @+ f! d        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。* h" L1 w! S- \' }& r
7 X9 j$ K# m4 \# Z5 N# ]# @
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!
0 {" m# s" t; a而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表. q, K; D; w* {' s/ V
: H4 U& j( r" B
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。" Q, p: A: F" z. t  a
       ...

' f/ i4 H  w3 S& @/ z7 Y
  _6 I8 G$ g( q9 h  k我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
1 @7 B8 ]+ s& a% z- {; _+ d3 E" v2 f2 H6 n- o9 I: [
这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
, A% A% G- }6 M; ?
) ]8 e, U1 E* m) M$ }4 d  G我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
2 G# N# ~9 z8 z% U' [" w9 l3 {& v4 o: Z2 ]
# g5 V6 p0 T9 L$ b- y) W! @4 @
  ~) N5 L2 h& x% E+ ^
" A1 ]: m% D& `: `4 ~6 v& n再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。$ w8 |. I! @, K' N
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
) D3 U# {1 p& ?! P; u1 K
) _2 Y; S7 s  i" M[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

& D" H3 D- E+ o" ]' n" c[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?. S. B4 Y) a! s+ Z% E+ q& U9 o
7 I, R$ x" R/ H6 S

0 [; }9 [. W7 \8 T$ j9 Z) K7 a: J1 E' c看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。, r! M' C% Y3 O) i
) s7 F' E) I1 Y% Q9 d. f- y* @% u
[ 本帖最后由 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不能精确求解。
  f) ~. x( o, h0 J# K! _故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。( O( r. C! a) r

2 p, u* d$ p% v3 z' [但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
# _4 D" B) c' G& P, r# V1 J3 }- ]3 E. \! H' {
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。: @6 _' i: P# h" D9 R/ x5 U+ ~  u
                                                ——blackbird
, V4 r- M- h8 z8 c' i2 D5 [
; i  Z+ V* J0 k该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
5 I; z0 ]' l1 n& M希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!7 x' Y* X6 _$ w) w3 R& i

( L( x/ d! r  N& V: I1 w, T[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?" t) Y! B1 z( Q+ `
以下是用VBA求解的过程。
9 Q. n( c/ Y# C; Q! [+ y附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

3 ^: d$ y& [. T2 \! n/ {5 G( D3 f# J* R4 l
Sub NT()4 O1 o2 b( l2 m  `
    On Error GoTo 10 '发生错误时退出程序
5 O( s) K- D8 M6 s& j; B2 A: B   
3 M  f8 [; A5 N+ b    Dim A As Variant 'A点坐标
: l! U6 q5 K- R    Dim C As Variant 'C点坐标
$ c( W" o; R4 H$ y/ i9 y* U    Dim B(2) As Double 'B点坐标( u& u+ z, e# l
    Dim P1 As Variant '直线12起点坐标% [3 S1 |% W7 [9 f) C7 B% N
    Dim P2(2) As Double '直线12端点坐标
, S1 r$ `, X: X- L0 Z    Dim R As Double '圆Y半径
  Y9 _- H' V  X9 z4 N. {  O9 l    Dim LineAC As AcadLine '直线AC
% `8 F" J, z, G# ^+ A0 b    Dim Y As AcadCircle '圆Y, z* d! w4 B7 _% |# Q% s
    Dim OC As Double 'C点到直线AB中点的高: O' S& k# D  G
    Dim AB As Double '直线AB长度
& Z3 I. U/ y9 c' b    Dim M1 As Double '迭代运算左边界点的横坐标
$ c& G8 m8 D. n3 d) P. Q/ D' e+ V( V    Dim M2 As Double '迭代运算右边界点的横坐标9 G. F- V9 |# y# [/ h; \5 H
    Dim Yc(2) As Double '题目中拉伸点的坐标4 o* @9 M' i, z# c. w* ^% {% w, x. q
    Dim X As Double '圆Y与直线AB交点的横坐标
  o) E+ C; w& t" F- g    Dim X2 As Double '圆Y与直线AB交点的横坐标
, l9 r4 o. t% _) A. Z    Dim S As Long '曲线拟合点数量(3~32767), w( O, f2 h$ R7 H8 q
    Dim K() As Double '拟合点坐标6 p2 _4 q5 ?& L/ O/ z" F7 G% L, V
    Dim St(2) As Double '曲线起点切向4 i( M* Y! F3 i; z
    Dim Et(2) As Double '曲线端点切向
  w9 u( d% @  I    Dim I As Long '循环变量
) Q8 m- [1 ?% S6 c4 \    ) ]! l+ F  j. ^& l# @$ P
    With ThisDrawing
; X9 g- Y4 A' j$ l6 A( U/ J        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
9 H* ~/ S' ?! I0 q; G! L( @3 v1 p        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
, v. B$ E$ N5 m0 [            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")# v7 X6 ?' c: H1 E/ d
            If C(0) > A(0) And C(1) > A(1) Then Exit Do
6 J( u$ F1 y  O9 ?! p$ P        Loop) `9 d5 p4 [& r/ O+ H8 W3 w3 v2 \" L
        OC = C(1) - A(1) '计算B点坐标, v7 v, I$ T, K! D
        AB = 2# * (C(0) - A(0))7 H: l3 e; j1 b9 M
        B(0) = A(0) + AB  e6 g8 \0 Q* T5 T, S
        B(1) = A(1)
2 d! @* T5 I/ a: ^" b* n  S        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线
* {  h: R2 u' G1 r6 h. Q! @; N        .ModelSpace.AddLine A, B '画AB直线$ a1 T( F7 I; `- D. k
        .ModelSpace.AddLine B, C '画BC直线
- o- P/ V, |! j        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。% c1 P5 F& ^; b
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
9 s6 |) u& P+ u            If R < OC And R > 0 Then Exit Do7 b" O1 Y- _" P( I& W
        Loop
0 Z7 a) a- c' w3 ~" {: M3 \- s        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
* ]; r) M3 q2 v% B: w        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点3 J2 N+ O, e2 y. n& S
        P1(1) = C(1) '计算直线12起端点坐标. s1 @3 i: R5 i, b2 l1 b- c1 E
        P2(0) = P1(0)
3 G8 C0 ^0 i# s7 L! j7 ~        P2(1) = A(1)4 _$ |# H* U& k; l; C1 T
        .ModelSpace.AddLine P1, P2 '画直线12" J# t; Q; \( b
        
. A7 a2 s  Q" W8 u        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界) \$ n2 W! G. j- ]1 y7 x
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界" H& R' C0 ^* T$ y8 y. O9 J
        Yc(1) = A(1) '拉伸点纵坐标与A点相同
3 R$ V0 Y. ~. S( J8 `' w        Do '迭代运算; T7 K$ S5 F& i' [, l! k. u
            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标
! {4 b5 ^/ ~! c1 ~' V            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)  v6 y* e6 F+ d# [7 D- t3 m
            If X = P1(0) Then '交点与直线12重合,结束运算9 N4 \5 u: k+ S6 N
                Exit Do
! ^* @6 Z3 J) s9 U            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算
; t0 I3 u: D0 h2 v+ a1 ?                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果8 e7 C. t6 Y) }; @4 ]( M
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)" f+ A; B% v5 S! W
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
) k2 J. D. f! z! K3 }+ d# `, [                Exit Do# }6 c3 t5 D5 ]+ }7 X
            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算; `# @$ d( s! d( `% F9 R' M" F
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
+ h- ^8 r+ N( J; ~$ R' g9 Y                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2): y4 j0 y) w( l! ~' R9 {
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
, l0 c, C! h1 P                Exit Do
- M4 ], s9 z% {. U, q! d            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算( n: A! H& t. p# L. C& `
                M1 = Yc(0)! h3 N/ e! m% }3 b5 H+ m- k' `$ U
            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
0 |8 F  H) ^$ @' O                M2 = Yc(0)
. H0 @2 e1 ]+ p6 w" [5 ]            End If
, W% O3 N. s5 F% L& J) z# P& l8 L        Loop
" O" a, |3 _4 t2 Q, w2 ^& j        LineAC.StartPoint = Yc '按计算结果移动直线AC起点' \- s( [9 D( D% b; d2 |
        Y.Center = Yc '按计算结果移动圆Y$ d$ q- y( w+ T2 Y0 Y6 j7 y5 c& R
        
0 S* u5 {. y1 P) z) X  _( ~        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。5 s0 Q! M0 x3 t5 l1 |* K; \
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")3 i8 N. U, {8 i8 V9 u8 A' f
            If S > 2 Then Exit Do
  q0 C* Z. A- L  r% m        Loop
! b5 n# I& s, G        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界
% D( b1 f/ f2 z; C        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标
9 \3 e; G; `, y, M            Yc(0) = A(0) + I / (S - 1) * AB9 D# T- @2 W5 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)
! l9 f( q6 G) P2 e6 F9 v0 Q; a( J            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)! C0 {- ]0 H: `/ q+ S
        Next
$ z( w% [9 V3 j( b- i5 e        St(0) = 1 '曲线起点切向
; Q4 K1 W) }6 {: L+ }# n/ [  T; m+ x        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)))' I0 m4 W. ^$ G' ]
        Et(0) = 1 '曲线端点切向
0 X0 I8 W7 [$ T" T) L        Et(1) = -St(1)+ n9 M+ w: l+ _( Q
        .ModelSpace.AddSpline K, St, Et '画样条曲线
! ~8 s7 M# Q9 z  B* [    End With% g( n: e! y) o* |3 S0 }$ v0 N3 h
10
, A: V/ @6 H- Q& S0 ?End Sub
" ?& m2 j5 {, N+ d5 X; [$ C9 I& w% j; Y  L- t
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

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

sj.rar

17.33 KB, 下载次数: 11

发表于 2007-1-15 20:55:32 | 显示全部楼层 来自: 中国吉林吉林市
15#的内容发贴时间太长,不能编辑了,希望版主有空删除,或者只留"请楼主举例说明一下,哪个软件有三线交点的捕捉功能?",误会已经澄清,放在那里不太好。6 z* ]* F2 n# U8 g9 r5 C
楼主发的这个主题,以及各位高见,对我的帮助很大,对楼主表示感谢的同时,也真诚地道歉,对不起了,我应该先通过短消息和楼主沟通会更好些。希望不要影响楼主和大家讨论的热情,也盼望楼主有时间分享自己相关的心得体会。
) O9 }, l$ [  g, f. v" A1 _
也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家. L' g, P' R. W  w7 @, M6 b
请看新贴:一种新方法“精确选点法”解CAD难题
# D, o) x% @) E! ]7 q0 ]# X. Bhttp://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题0 j6 d6 A7 _5 A3 g) F" k/ h
我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢
5 [) {1 q& h% [解题步骤请看 23 楼的链接
1 h5 E5 p+ \) @9 o尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为500000001 y5 i4 S" f3 |0 N7 z6 f4 ?
附图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 )

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