QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
3 ^( h6 U1 E9 S) y* x1 }3 V: w如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B
- i- ^# ~; D% M( n+ U3 |1 P! \Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
. x3 _- Z  F0 C  x
# |& W$ N7 j- ^. H, d9 h0 E1 w( i( Y" [, d
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 32

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............* o, k  \4 g8 y- N8 B  a
各点不是可以直接交出吗..........2 W" t! w4 J' D5 j) N  ^
楼主要"精确"........
1 u! A2 c4 C6 O2 @曲线总是近似的呀................
/ t5 }! K3 ]  R$ L" M4 s# m5 v
! w% O: x& c3 n0 Y3 N& s6 X# e! @" i[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表
4 C1 ?9 g4 t( i/ [& |$ |: a求这样的曲线有嘛意义呀.............
0 G' {- G$ p- m: f% c& C各点不是可以直接交出吗..........2 T, @7 d. ~2 e$ u8 |& h( W4 e
楼主要"精确"........
5 C) x% x8 Z7 `5 Z, ^# ?3 g9 Q曲线总是近似的呀................

# H5 j: }: N# A+ k5 s求解CAD难题简化* R9 ^! ?* L+ Y0 A6 x

; M- f! G! z- y[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。8 [) @( X" N* m6 i  \$ C  M5 K
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。9 f  B  s0 p+ v+ d, h8 ^
注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
- X1 A0 C8 ?* `" L加载yxgj.vlx,命令也是yxgj% a% s. U1 ^( S1 F& r- B6 w
- G# u5 A& N" Z
以下为操作过程的文本窗口:; t' A) a2 X: P( z# d# b% J8 O$ w2 M
命令: yxgj5 }2 \8 L! Q) N7 m* r% t1 f1 O
AB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816
$ X2 e0 _, o* v1 t! j* [$ l: X8 i确定A点:int% a- {( ?- B, D+ T" e: @6 L! n
$ x% j( D# A( X+ B2 I
确定B点:int
' Y! |# C" {/ X, i1 q) d6 x8 d% d* J5 {7 |( Z# A+ K% h+ M
确定C点:int
: R) A; d+ x" \! l4 k0 S- s- O- Q# A8 [6 k9 u6 o6 r3 U
输入圆半径:int
* Y/ p+ d  e- \" t6 D) D) J于  指定第二点: int" v/ m/ w' N. \, O" w/ Y/ @1 c
3 s: h7 N$ x& f5 S4 M1 T! ~" Y
Grade(确定计算等级)<12>:3 c0 T9 l- [- L9 Y; |( M' ^; l; x
. m0 r- p+ M' I
[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?% ]% F  ^! L* y: F

3 L+ m2 z  ?& D/ v# e+ Q( [3 p* ~5 `CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!: s2 Q. q, w- R+ Z' Z; Y
! y0 b$ U5 Z3 P$ x) b
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!1 r# p1 R( O- ?; _5 H: Q- F* ~
$ J2 u, R! t1 N5 f! ^  |+ F( {
真想得到这个赏金呀!可是.......哎......还没有学到家呀8 {" S) _7 o# y  R( V

" k3 y; n# @- k8 w( S
2 N) D$ V! Q1 ^- d5 F[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表! ^; I* g+ w% l3 n+ F
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。& y7 b; A5 z  E
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
1 N) J" i7 Z% M1 Q9 }注意捕捉 ...
, C/ S4 Z! K) P* I3 b/ u. ?
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
( l5 S1 v* M% m% |4 |        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。2 B6 g1 j: ~/ S
        看来这个维币应该奖给moonguy兄了。
+ b; N3 A1 y/ m1 C- Z        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。
2 f3 |. M2 R2 f. X( t
/ J  @% i" d# S  l$ S; S, G( z0 i( _0 g[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!
. ~# C; O2 f# U. I3 {而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
. ~+ |+ }. v4 @* b5 D! W1 F/ z9 u) x0 a+ M1 C! V. @$ s% V. O
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
+ R" p% T& o7 y3 G+ ~& u       ...
2 T  u3 z% E2 b; B: X9 p

2 R+ u3 f# s- I( E我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
5 D2 E" f; U1 O
9 }( T8 w7 l  o; ~9 i这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
0 X( K! Y0 o6 n* b3 |
9 `& m. o' E& v2 t/ F2 Q# S我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。. Y3 ^  }$ C/ q6 ^; G8 }

: d& S3 @4 v% r8 q % K. e& M! `0 b
: o1 C5 y1 ^3 J* F
再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。! F0 A& D% t0 p" o
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。: v5 ~5 H3 i  Z; T/ T+ o+ u& b

+ \% ^+ \+ _& G  D6 G[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

你小子居心不良,存心让我在众多高手面前出丑(开玩笑)。再一点,我不是“老师”,我跟多数人一样是到这里来向真正的老师--比如★新手★、还有aishengchen(如果我猜得不错的话)等等--和一众高手(包括你哦)学艺的。
) n* _4 Y+ Q* E. w1 e不过既然点到我了,我就做个发言,有不当之处,还望各位高手海涵。7 _. m* O/ [: h( U; X) z2 c
一、我之所以没有正面回应这个贴子,是因为我对楼主的动机心存异议,不想顶这个贴。我知道楼主是个高手,他出这个题目不是真的在求助,而是在挑战。这个题目本身是一道钻牛角尖的题,类似“用尺规做图法三等分角”。他坚信没人能拿走这100三维币。
2 I1 p( ^0 Q) W$ D  `二、对原题的看法:我认为,autocad只提供给了我们圆和椭圆两种二次曲线,其它曲线一概用样条曲线代替(包括2007中的螺旋线和渐开线)。而样条曲线在autocad内部的数学模型只是一个拟合函数,在拟合点足够多的情况下,显示的曲线和我们理想中的曲线“相似”而已,永远也谈不上“准确”。
% c3 [; A4 L/ q三、对简化题的看法:表面看起来,题面被简化了,不再需要画不“准确”的样条曲线,但我们只要把已知条件画出来就会发现:这是一个用部分边长求画直角三角形的问题--这个问题在论坛上已经讨论N久了,前段时间被★新手★版主关闭,现在找不到了,估计是被删了。
: y$ P8 d) q, R3 z* ?4 K& v  说实话,单纯用画图法解决这个问题,在下无能为力--因为我还没找到用画图法开立方的途径--而且我也没看到过别人“准确”地“画”出这种图形。我遇到这种问题,通常使用autocad的VBA,而且可以保证得到的结果和在autoCAD上用画图法做出的精度完全一样。如果楼主承认这种方法属于“CAD方法”,我就立即上传我的宏,就怕届时楼主为了保住自己的三维币而拒不认输。
3 i+ y  y# \: \四、尽管楼主动机不纯,但题目本身适当地加以改动后还是有利用价值的。9 o! z& g! J4 r# J$ ^
  1、对原题加上以下限制条件:用线段AB的五分之一做为拉伸线段AC和圆Y的步长画出样条曲线(拟合点--含样条曲线两端--共6个)、画曲线时必须考虑两端切线方向。
# ?2 T4 i1 y. P7 ]$ g5 Q  2、简化题中的直线12改为水平方向。
* t$ I- s# P4 b9 {# A  这样改动后,两道题就都能用autocad命令画出来了,其中第一题稍复杂一些,第二个相对简单。如果版主能对上传答案--特别是答案正确--的网友适当加以奖励,就应该能达到既活跃了论坛、又能正确引导大家的努力方向的目的了。' [+ I! J  g9 |9 U# q$ C* _0 D/ {
( D, f# y4 R2 r# R% `
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?- F; q) S! D& C* h+ z. I3 T: x, A
& f5 ], y% M6 {4 M

. H) y1 w- P% H) z) X看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
6 L" n* m0 x, @" T4 u0 R+ r, |2 X0 f0 Y/ f  c9 y
[ 本帖最后由 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不能精确求解。# s  ^" y7 [. k9 G( j
故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。
# @: F5 k4 S4 C. D! b+ G
) f9 \5 W+ L, Z( w5 v但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。- ~5 N! N& R/ ~" T% L, c

3 k5 `2 l8 g& g) x: ?同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。
0 E6 _+ R7 M5 P( K% H( F                                                ——blackbird, p# p& V7 v; z: F" B$ q4 G9 g% c
( E: G+ l4 U& ^* W2 |9 r
该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
9 v# }' f" {) v- X希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!
) i  h5 S$ [% S% ?& {( ?, @) p+ q
  @9 E( y& m& w  Z8 v) Z[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?7 K" U7 l$ x# O) O: o
以下是用VBA求解的过程。
9 J" L- L+ ~) O( n9 f3 A. `1 a' h& _附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图
/ f# Z  W$ d$ I+ M/ V
9 J0 E6 ?/ ^5 w% g  L2 O+ f
Sub NT()
  s& V$ \) |5 i% Z    On Error GoTo 10 '发生错误时退出程序
: t/ E- E  j- b2 t4 T    8 `+ i$ U! E1 _7 K# N) ~( T
    Dim A As Variant 'A点坐标
/ S& _& T, k7 h+ h4 G    Dim C As Variant 'C点坐标- ?1 Z3 J3 m# d  z7 v' \
    Dim B(2) As Double 'B点坐标
3 q. X8 S3 X4 H, m; i    Dim P1 As Variant '直线12起点坐标! q* |: e9 U1 V' n2 N* x+ L
    Dim P2(2) As Double '直线12端点坐标
( q3 F% n4 J# U/ {& o+ h/ J    Dim R As Double '圆Y半径
+ @( {; h: R- ^4 _+ J: W& U! X    Dim LineAC As AcadLine '直线AC
& D. }! L/ E$ {& v; h7 {# _    Dim Y As AcadCircle '圆Y
3 v8 t% N" H- ^    Dim OC As Double 'C点到直线AB中点的高" [$ @& _" H# R: E
    Dim AB As Double '直线AB长度% L' n' N" ?4 G$ |4 P0 D) }! N
    Dim M1 As Double '迭代运算左边界点的横坐标* C2 {3 `8 M( e& G' O1 H' [
    Dim M2 As Double '迭代运算右边界点的横坐标
) G7 e! O+ T( B. z8 E, C    Dim Yc(2) As Double '题目中拉伸点的坐标
+ o( R5 y( k7 T- q; F& f4 N    Dim X As Double '圆Y与直线AB交点的横坐标! |/ m7 d1 N" C! A6 W$ f+ c
    Dim X2 As Double '圆Y与直线AB交点的横坐标
" m3 A4 K+ U2 M) i$ |. K    Dim S As Long '曲线拟合点数量(3~32767)
" Z4 M2 k+ Y+ k9 r3 P    Dim K() As Double '拟合点坐标
1 O3 t! F, `3 v  n: U- L$ u    Dim St(2) As Double '曲线起点切向4 n. y. ~/ G' i8 a/ h
    Dim Et(2) As Double '曲线端点切向# a* _) @( }0 |$ K( F  @
    Dim I As Long '循环变量
' L6 Q+ |$ `2 n5 w! L+ j! P   
5 o  y/ q4 ~9 e, r    With ThisDrawing4 Q* S4 Z4 u0 T. c, ~) g( k5 F
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
. A; O& F: \+ ^% Z/ ~3 H        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
+ Q( T; L" ?+ v0 r% ^/ c: A            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
1 G+ v8 r0 b7 A1 w; E) M; i            If C(0) > A(0) And C(1) > A(1) Then Exit Do
+ Y9 }. m5 `6 z2 z" c- |. S0 x        Loop2 y5 z# G% Y$ R: {
        OC = C(1) - A(1) '计算B点坐标/ ~% Q- ?. P7 G. W# m# T
        AB = 2# * (C(0) - A(0))
1 e0 q# O+ T) l1 I        B(0) = A(0) + AB
+ E# g" ]& f, R! s& V$ e        B(1) = A(1)
: T( w# i* V' T/ r        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线
, V0 t# v' q( N3 D$ D$ W2 ?        .ModelSpace.AddLine A, B '画AB直线
) D/ B0 V0 J% ^& W        .ModelSpace.AddLine B, C '画BC直线! b( D( |6 ?; l6 O0 h8 P$ J
        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。
2 C8 ?* A  i- l5 D. R) J            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
2 L( D5 q) m" F- s  @            If R < OC And R > 0 Then Exit Do2 y  v' X0 z. q1 ~) K" [
        Loop$ m$ c. N  {  B) G% _" D  z
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y+ ^) {  l! I4 A* ^% s& v$ c" i
        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
0 ]8 x. q3 y$ I7 Q  t        P1(1) = C(1) '计算直线12起端点坐标# @+ x! C  |" ]5 q! a
        P2(0) = P1(0)
$ {9 `/ P! a# W1 Q        P2(1) = A(1): j9 V# [+ Z  E  P  m: @* J& T
        .ModelSpace.AddLine P1, P2 '画直线12& a; J+ O. w: E# u, ^- V
        : L% Y5 C3 i" ?$ [; |2 j9 _
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界# H2 d7 _' L2 o; q
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界
: y, a: b5 U5 b/ j9 G" j/ B' i        Yc(1) = A(1) '拉伸点纵坐标与A点相同0 ^% V1 Y- ~! z+ S6 d# N: X6 o
        Do '迭代运算
0 u4 p( n  I9 E9 x8 V7 H, F            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标. d( ]5 R0 S, r  o3 ?
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)
! Y) a2 R4 {9 y; {: [+ z) P, a            If X = P1(0) Then '交点与直线12重合,结束运算
2 u4 {) j; O& Y+ `                Exit Do; m( }. h. o% I/ a' c2 u! K
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算
, J! i1 {# w% J7 p. u. l0 Q                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果
; U/ l9 I# \8 e) T" @3 P                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
$ i( u; r) G3 a( m+ `$ y                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M21 ]0 L( p6 y; _# F
                Exit Do
( f3 k- u; k7 k- v( f            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算
$ f# Q0 k; P7 x2 G% t, f0 u                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果- F3 F7 O- u; n
                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
" w2 R; l9 f7 T7 E6 \; s5 J                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
+ I7 g4 I: t6 {4 g$ x                Exit Do* o0 t5 V( t4 ^
            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算* h$ E- s8 L. w8 V. i9 d' E
                M1 = Yc(0)
( o; s4 `3 M5 k6 h* B  i4 H            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
( z6 P' i( c% }5 x, z8 |  n                M2 = Yc(0)
0 \) a+ m' ~" b+ M8 I+ _            End If
! C- K) d  ^! X4 {- N  ~- |% @        Loop
6 [9 p& {: L+ z/ @* c' P        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
" R2 k% r7 L$ M  |3 q; V        Y.Center = Yc '按计算结果移动圆Y
: i1 U# g& e/ Z. a# M0 k9 B        
4 D+ ^2 g5 ^, T1 Z        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。
( \- n0 f5 W; U4 l9 [- S* j            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")4 j' t! Z; }& W! o0 R! G+ T
            If S > 2 Then Exit Do
$ x9 n6 }: {" B6 B        Loop
. i8 ?! \1 i9 _! ^) p        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界( m- l5 |$ ?, u; @0 H& X
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标7 f; K; L2 L# U, e( L9 E
            Yc(0) = A(0) + I / (S - 1) * AB4 e* p. E, K! w) 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)
6 C5 w$ _% n4 w' r/ W8 x0 }) Z' N% z! m            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2); e( S, d5 O; W% A( k0 o
        Next! u1 u! C) Q$ I8 \/ j$ Y! p
        St(0) = 1 '曲线起点切向9 t9 a# F: F1 O2 |8 I0 E) 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)))
. }- F# }0 z- r  E( M- v' v        Et(0) = 1 '曲线端点切向/ n) {; W( w. B) i. ?# E, z) ]9 U; w- `
        Et(1) = -St(1)
3 j" Y+ }4 \3 T, T6 w9 N        .ModelSpace.AddSpline K, St, Et '画样条曲线9 K( w& t0 x( s! o1 L% B7 _
    End With
. ^. t& h4 d# y& K* Z9 B! e5 }10- U0 K. p, F; K, E! C
End Sub
' T& |$ {  i9 Y0 M
# _" u8 Z" u0 I0 M+ B! n' K[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 12

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
6 Q% Y6 u. `5 z! F, u可应用excel序列功能,非常方便,具体步骤看excel压缩文件。; K9 C% Q) C+ R5 `

$ M0 n9 v/ n7 B4 Q  B# R  G2 {( V% D[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。8 G$ a1 M: d& p$ ^( C8 C
        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
. f+ D% W, w2 o7 A, u0 }! V        原贴已经关闭了,就发在这里吧。
5 s% y6 k1 Q2 U9 |
9 w  g1 P. [  A7 [; C[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 10

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

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