QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
7 E+ w' M! B8 C- b% M1 S$ b如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B
; D5 v( J) R; E7 k5 `5 VY与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
! Y, I1 K9 K& h, b; o9 c9 W# E5 @  P0 f; x  r

3 o4 s7 D8 A9 ?[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............& k+ k: U9 Y) B, x- ^
各点不是可以直接交出吗..........
( \8 l" L4 D/ \- p( b, i楼主要"精确"........4 I! s) {' b  I0 d+ l3 K
曲线总是近似的呀................
/ S& a2 S8 n! e5 z% P! ]7 z% f, T" K8 ^" k+ X$ f  \; t7 o
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表! p; S9 r0 U# q$ X, y  L# f
求这样的曲线有嘛意义呀.............
5 j: b- ?5 P2 F% P2 _各点不是可以直接交出吗........../ P3 O& A+ I% A' M2 n2 ^
楼主要"精确"........
# k& x- k# {- A曲线总是近似的呀................

1 j2 l  ?& I- g6 w: d求解CAD难题简化
" B  t. {- F  |
: B$ X- K' {6 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。6 t2 ~) l# }8 _( X
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。. l$ w; B3 T( b/ d
注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。0 s  v/ D* ^& J% I; O0 s" g
加载yxgj.vlx,命令也是yxgj
: B$ H! v- h6 I0 `) ?; W/ x1 o; K! v+ E0 `5 y" y
以下为操作过程的文本窗口:) H5 {# B% ^/ u) p
命令: yxgj
* O. y& |" b' K6 G# [3 n. D5 x, TAB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 12188160 W" L. S/ f. o2 Z9 L& x" a
确定A点:int0 _! [% S' E' U5 O, V$ Y  [

6 O; U1 {9 s$ r5 A& x+ t. `确定B点:int
6 P! Z0 p5 D$ u3 O6 o- n
+ ?7 ?8 W4 }# \( E% D* i确定C点:int
" R0 ?* J) }8 D3 t$ C' `1 K4 [) G) n+ i; ]3 n7 Z/ R. b* N' g
输入圆半径:int
) E6 \6 w# v+ a' k于  指定第二点: int2 ^+ B/ H! \* ]

; h' u1 I! o. X, @Grade(确定计算等级)<12>:
. E3 a" U7 I/ I! @) f  |+ J
3 m0 i$ j1 j5 O: H- p3 x& c/ c[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?
4 y4 O( |- R. b' ], p: M' s5 y0 k4 N) O. N, T( ^
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!
  ^& H+ _! v3 q6 i$ D  a: H9 S" t: O0 q: V4 s  P0 J* U2 @- |8 n
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!
) b; f" h" E: _  M  [$ {0 W& N) l9 U, d! G. u3 m1 {
真想得到这个赏金呀!可是.......哎......还没有学到家呀
. V7 b' b4 b# N# \9 m8 q

7 p, v" b4 `" I+ \, s& P# q" E2 \, p+ Y% J, A- V* h) i
[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表, [7 X7 c5 u' l, N# Y( c; N
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
" |; \8 f3 O( ^' n5 y" V! t按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。7 a( ]  A: K5 }* v2 ?  N0 c/ }: F: ^
注意捕捉 ...

/ b0 g# m) }; A% W2 J; M" d        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
' [; q/ M2 q, ~% I) ]        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。
" Z- F: y3 u2 l. q& i5 S        看来这个维币应该奖给moonguy兄了。
! e. b5 ~+ n8 d3 }& E        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。
# s3 _3 r  K- J, W% h/ F- {9 ]: H  m+ }' \& K
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!. Y- G) R1 p" T( W2 V
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表" Z$ }% d$ j- V  F1 B; n8 q+ z

8 ~* P, Y" O0 b9 c7 a        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
# L4 V! m  W% ]! [- j( T4 K       ...
; K5 w! T* C6 @8 W/ _( b4 L: Y

0 Z( `% n9 w3 Y9 c3 w8 U我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
- Z! T& ~% B  t- a
9 Z% |. L9 F" I- c这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
* K: h& x2 p: q, N1 M4 n; B- K+ M! C
5 s' X6 B* m- w% s我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
; f" H* @( Y  @& k. M& r7 V. v : z8 [6 l: m; v5 [: [
7 z% F% Y) i/ v9 ]8 z9 c; Z
+ M- G, T8 H( \6 y
再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。  L1 v& l2 ^+ S# A0 O8 B
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。: v( m" ~) i6 f

  e; Q/ x; R: B& Q0 Y6 p3 v[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

你小子居心不良,存心让我在众多高手面前出丑(开玩笑)。再一点,我不是“老师”,我跟多数人一样是到这里来向真正的老师--比如★新手★、还有aishengchen(如果我猜得不错的话)等等--和一众高手(包括你哦)学艺的。
& W) S, L4 A  _4 E" A8 g不过既然点到我了,我就做个发言,有不当之处,还望各位高手海涵。
% H$ J5 a9 S3 G. a7 m) D一、我之所以没有正面回应这个贴子,是因为我对楼主的动机心存异议,不想顶这个贴。我知道楼主是个高手,他出这个题目不是真的在求助,而是在挑战。这个题目本身是一道钻牛角尖的题,类似“用尺规做图法三等分角”。他坚信没人能拿走这100三维币。9 _; v8 ]# U4 m7 M! k
二、对原题的看法:我认为,autocad只提供给了我们圆和椭圆两种二次曲线,其它曲线一概用样条曲线代替(包括2007中的螺旋线和渐开线)。而样条曲线在autocad内部的数学模型只是一个拟合函数,在拟合点足够多的情况下,显示的曲线和我们理想中的曲线“相似”而已,永远也谈不上“准确”。3 f  v* F4 ?- @, x+ x# _. \
三、对简化题的看法:表面看起来,题面被简化了,不再需要画不“准确”的样条曲线,但我们只要把已知条件画出来就会发现:这是一个用部分边长求画直角三角形的问题--这个问题在论坛上已经讨论N久了,前段时间被★新手★版主关闭,现在找不到了,估计是被删了。8 H, @" q$ _' r6 _7 m% v" q. E
  说实话,单纯用画图法解决这个问题,在下无能为力--因为我还没找到用画图法开立方的途径--而且我也没看到过别人“准确”地“画”出这种图形。我遇到这种问题,通常使用autocad的VBA,而且可以保证得到的结果和在autoCAD上用画图法做出的精度完全一样。如果楼主承认这种方法属于“CAD方法”,我就立即上传我的宏,就怕届时楼主为了保住自己的三维币而拒不认输。; w  j- ?& Z' y: i
四、尽管楼主动机不纯,但题目本身适当地加以改动后还是有利用价值的。& \8 y5 l7 E$ t$ i) f% \
  1、对原题加上以下限制条件:用线段AB的五分之一做为拉伸线段AC和圆Y的步长画出样条曲线(拟合点--含样条曲线两端--共6个)、画曲线时必须考虑两端切线方向。9 k1 R$ _! K( [+ j  _2 c
  2、简化题中的直线12改为水平方向。
* o$ s7 `& x  T6 ?. ]) M. m# K  这样改动后,两道题就都能用autocad命令画出来了,其中第一题稍复杂一些,第二个相对简单。如果版主能对上传答案--特别是答案正确--的网友适当加以奖励,就应该能达到既活跃了论坛、又能正确引导大家的努力方向的目的了。, R# ~3 k; @" A6 F
  k: ?/ M2 U2 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 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?# `4 ?. g& j5 ?( W6 F8 c
5 ^; r5 q, m' U$ \0 A0 l
& G) E" z( Q5 }+ E" P0 L2 r9 T
看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。, E' K2 c  U( r/ f5 ?0 D
9 r' I0 p5 n- F% g
[ 本帖最后由 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不能精确求解。
1 i% z- g/ i1 ?" y故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。
9 X( k9 r: \& }
, g; `- |" C9 D3 J2 J! u- T. ]+ p但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。( H1 k# S5 F" ^, S6 w
; Y# x/ p+ U. {
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。  @% j2 o8 k' ^
                                                ——blackbird
1 {  j" m0 z0 k* F, Z3 X+ h5 r% x 3 _) Y4 \3 Y9 n" i( N4 L
该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
/ E$ ^* h# M# Q/ Q, ^7 k6 g# z' R! W$ d希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!, U8 J1 f4 g0 K
% e! Y) G+ e- t) x
[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
6 A: P+ |9 e& E( P) k( X" c以下是用VBA求解的过程。
# {& f- T' [3 q" h9 @* y8 m! r- n; g, j附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

$ D6 |! U# q% o2 U
" I5 S) L! n' y( m& HSub NT()
( R- P9 B4 D' @+ N    On Error GoTo 10 '发生错误时退出程序3 b+ m; o  V0 K) v
   
" w3 Q6 z" X* \, B" S8 F    Dim A As Variant 'A点坐标
% ]  e$ R: l/ _' u0 m- `9 I3 _4 x# x    Dim C As Variant 'C点坐标
$ |2 a. t! D1 ^3 E" a3 [! [! M    Dim B(2) As Double 'B点坐标
. D8 ~- [) L1 r1 d) H    Dim P1 As Variant '直线12起点坐标
* z+ f- G0 C) T    Dim P2(2) As Double '直线12端点坐标. Q, h/ z3 \6 T0 O) H9 ?6 T$ K
    Dim R As Double '圆Y半径
" ]6 g6 a: v9 K# o' M; _    Dim LineAC As AcadLine '直线AC4 E$ O: I- j9 m: h* V4 C! Q$ i. K8 M
    Dim Y As AcadCircle '圆Y% L5 z7 L/ r6 [! M' C& d
    Dim OC As Double 'C点到直线AB中点的高6 P0 b4 e3 Q$ c6 [, Q
    Dim AB As Double '直线AB长度# I8 V. [( b% I/ h" T. w' F2 t4 e
    Dim M1 As Double '迭代运算左边界点的横坐标
' S6 A9 q) M' M  ]: p) y8 t: g3 z    Dim M2 As Double '迭代运算右边界点的横坐标% x0 L: D/ Y; @) Y
    Dim Yc(2) As Double '题目中拉伸点的坐标
* G) Y, v( z3 e% Q& U    Dim X As Double '圆Y与直线AB交点的横坐标/ u+ D( f0 w) j" c- {& A- ]
    Dim X2 As Double '圆Y与直线AB交点的横坐标  j0 u2 R1 R1 C. |' c
    Dim S As Long '曲线拟合点数量(3~32767)  N3 T6 G$ J) T4 ~. i6 t
    Dim K() As Double '拟合点坐标
& }. T. H% f; q    Dim St(2) As Double '曲线起点切向! o! H  q! w0 I* x2 D& c3 K
    Dim Et(2) As Double '曲线端点切向
2 f- N! x5 g/ i" {& C+ m- a    Dim I As Long '循环变量
& X1 Z& y# E' t( U* l, q" o    + o" X% O- a$ [. `7 h
    With ThisDrawing
9 {. M4 A3 u; M$ ?$ e4 |9 X+ F$ `# E        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
* T0 `9 P' o  d1 ~/ @: ]        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
9 W% H- G4 V0 c- i            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")# X7 Q2 W2 n: e: @
            If C(0) > A(0) And C(1) > A(1) Then Exit Do
0 R1 X& i) {6 F- S        Loop  H% c% M  f4 H3 p/ r. R
        OC = C(1) - A(1) '计算B点坐标
/ [  G$ x0 w0 r2 u4 b+ w# Y        AB = 2# * (C(0) - A(0))8 K, E" T' }, ^) C+ ~. b
        B(0) = A(0) + AB7 j; X1 H9 k6 z& e5 f
        B(1) = A(1)
: l9 _2 r( ?/ L- r2 `6 |4 t        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线
9 f4 K& Y" C1 D/ Y/ Q) [- {        .ModelSpace.AddLine A, B '画AB直线- G! E* a. T; s- g
        .ModelSpace.AddLine B, C '画BC直线9 l! ?2 r) b$ I; \$ z
        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。* O% N: ~6 e0 d3 J* m7 |
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")# `/ t! N1 O: z! a, W
            If R < OC And R > 0 Then Exit Do
$ C" Z4 w, P7 [9 r8 O        Loop; J0 Q6 Z* e3 e; t" i( z
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
  p6 q' t% j+ n5 N% O3 v        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点9 S* u! g4 U6 P
        P1(1) = C(1) '计算直线12起端点坐标" k: a) I$ t" w, \( w0 M2 g1 A
        P2(0) = P1(0)
8 _$ c- Z  [& |# v        P2(1) = A(1)
0 O" V7 U1 b; A* T% k$ ?        .ModelSpace.AddLine P1, P2 '画直线12
! O" }7 g1 O& I4 J, b        
5 \7 H9 P: Y/ F( Z0 s* I2 R        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界4 a: i* V2 \: X
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界& O( u; l! f! M6 v# y% O9 p8 j& h
        Yc(1) = A(1) '拉伸点纵坐标与A点相同: o- j# w( o; o; ?$ f* [
        Do '迭代运算% H8 c, P& ]) R, C
            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标
- F# Y: Z6 }4 Y) N8 l" r7 B            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 K8 s& w; N. [0 p' `            If X = P1(0) Then '交点与直线12重合,结束运算: F1 B: d! c6 s
                Exit Do5 c1 W$ q+ n5 r$ P) c
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算6 v) N: u5 ]6 ]; @
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果; \) ]! `2 p, v) _0 q
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)3 N- S6 A: E. @4 P8 |8 h, F
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
& y8 q" m5 ~2 G                Exit Do
) g! ?9 a: y2 H5 `. ~* Y            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算
: Y- Z2 @; L) f1 s9 d                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果- I4 P/ Q2 t9 t! F2 u) Z
                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
4 v8 w9 s/ w: h% u3 z4 f- \" P# S. o# U                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M12 k3 B1 ]  `  X2 d1 `3 N
                Exit Do
! s0 T7 k9 V5 }; T            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
) t$ z: T. N% w7 b3 }9 h                M1 = Yc(0)
4 C, f1 A, X' y! N$ ^            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
2 X2 w% r% j' g/ c3 P' M                M2 = Yc(0)  s8 i! w0 \# x9 k# o, F
            End If
  X! j( J# @6 G) [/ Z        Loop
: D+ d- D5 N) e& k& B% m        LineAC.StartPoint = Yc '按计算结果移动直线AC起点+ L  Y3 Q6 `0 Z: S. n+ s8 t) _* m
        Y.Center = Yc '按计算结果移动圆Y0 v( X1 T& v+ S/ Z' q  N; v- m
        
* D/ x* i+ S9 m3 t" a        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。1 _  i7 C; P6 C/ K
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")
  y  \; y. b' e' W6 l: l            If S > 2 Then Exit Do
6 v5 N) @3 U* {3 i* Q        Loop9 ~* y" X( m" k4 Z8 j! y" o8 s
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界4 W2 r2 C9 Q: \
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标8 B2 h3 E  Y( p8 a) a4 i: f
            Yc(0) = A(0) + I / (S - 1) * AB2 x& T$ a0 A8 u
            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)
8 l2 @: D4 n( g1 J* G. P# H' P% q            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)2 E) o$ j$ N$ F, f
        Next
: f5 a$ N8 w, W0 q  {8 w+ b        St(0) = 1 '曲线起点切向
/ c' a! W# K. M/ C4 L        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)))
; I: a/ |6 {: y        Et(0) = 1 '曲线端点切向, V& c5 }  H% n6 j4 }8 H% ~
        Et(1) = -St(1)
/ y, L8 Y8 P$ x7 ~8 a. I; @  O        .ModelSpace.AddSpline K, St, Et '画样条曲线: y' t6 g5 p" }
    End With' C$ N$ a7 n6 l$ v* v: P- x9 N
10
( k9 o  }. G* \9 Q# CEnd Sub
) a6 r. h. L* P8 ~- }8 P: @0 u5 e7 M: L( k
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

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

sj.rar

17.33 KB, 下载次数: 11

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

3 b2 Z; R6 {+ H- c0 j, i" \) D也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家
3 }* r& {+ [0 v4 b请看新贴:一种新方法“精确选点法”解CAD难题! w+ @( @2 H; \( y' D# m
http://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题6 e* K! L: q- K5 ^/ J6 v3 A2 j4 A
我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢9 Y6 h' q" C% u5 T/ E5 v7 l8 v' ~
解题步骤请看 23 楼的链接; G1 \+ o& }$ ]( S8 @) @* x+ q/ E# |8 T
尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为500000003 f4 R6 A6 _; C. `. g' q
附图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 )

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