QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线  W- P$ g3 l" G) \, w& i- A# N
如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B
, T3 }9 r/ H7 s8 y# SY与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
( W% [, h3 w* H' g) w( j' M& [  P$ r8 A8 A- i2 H: \7 ^

1 {1 q% D# f) X. f- \' l  F" h[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 32

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............! c+ P5 x5 n: N0 e
各点不是可以直接交出吗..........
) i" o( T3 H% x5 G+ m* t2 n楼主要"精确"........* n& V5 w" a: G. U# B' q
曲线总是近似的呀................  s: C1 ^% Q6 w! D

- G+ {! P  D( q& }[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表
/ e6 n& U+ J# g% U3 N: l求这样的曲线有嘛意义呀.............. d& p% H1 i7 O$ f
各点不是可以直接交出吗..........
, N  k& p3 q: K, a# i* Z; u8 Y3 G- Z楼主要"精确"........
  X( I  U+ K, t9 Y6 f6 P曲线总是近似的呀................
3 F" }: D+ b8 Q+ V
求解CAD难题简化( }5 v4 |5 [2 v, S( F, x

8 ]2 R" v* p, P, w[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
+ [* |( `, C# L& }按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
/ a/ ~0 C0 c! ]" h3 o注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
* h) E' w6 ]! ]4 K加载yxgj.vlx,命令也是yxgj
* c, p/ Y0 W# w; D2 M  g# x3 u) b: _6 N  M4 {
以下为操作过程的文本窗口:7 K! e; q4 T; g7 l
命令: yxgj
3 E7 I0 x2 F# M8 x- {AB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816
" |+ ]- U+ u1 P3 j0 }- ~/ I. Q确定A点:int) s; d$ v6 T; D. \
" y+ @1 ?8 |( H# k: D8 |6 ^. y
确定B点:int6 o) A% b! e' l$ t) V4 Q
; G, [! [& q2 j5 _, p  w
确定C点:int$ A! e5 P7 Q3 N/ F+ J4 ~, v, G# D, i

- d: {9 Y0 r! D* b$ s! h$ |输入圆半径:int6 w9 k8 Q. ~' l$ y
于  指定第二点: int
: {* Z$ Z  C& q2 A% A' @4 K3 e+ S* q) X
Grade(确定计算等级)<12>:  ]9 J; h0 p( h$ ^

0 j( n# Z" |  c  Z: a[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?3 n/ _/ Z' ^# k9 N

4 Y5 U* t7 O+ R1 }5 X; y' }CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!
9 i$ ?- J6 K8 R+ o
$ d! ]6 E+ R/ T$ H$ \! o. O呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!
0 r$ E% n  v# V. u7 k6 n) V& c# \) C! W! D: M
真想得到这个赏金呀!可是.......哎......还没有学到家呀
* a# o1 K; F  x! O& o/ P( }: i

0 c6 c  K% t7 j, @& e% ~* L" {+ o  v6 B0 |2 x- ^! U5 Z( Y3 i
[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表" j$ v% }" m0 u; i1 J4 r
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
/ Q& M- a8 i! V0 p4 ]$ S按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
1 b+ Q  \5 ]+ W' `8 Y3 D) q; Y注意捕捉 ...

0 ?  m* k" n% ?. j9 p0 z3 Y        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。& l  B5 x6 E- E" B, X# t5 r3 h
        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。
) A/ ]' y2 F3 B$ _% N        看来这个维币应该奖给moonguy兄了。4 S. N* d+ a5 w. A
        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。# y# x9 j3 g9 ^, l" M
. p/ ?# C/ }: q
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!9 h' b: x* @# Z. h1 T
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
4 b" J# K  C; C) x4 e6 ?, ^1 X/ z: q: e0 H: I
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。* \$ ~. L2 @8 Y2 T
       ...
. B6 ?+ l8 S/ d3 U# x- o. ]* M
8 b/ o4 d. v, A. V( m. W2 j' C8 W
我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。: N  Y% b1 H" J0 s" }, }# `  h% y) b
  P0 }) O8 `3 E' s, l( b+ w! _) r
这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
# j( D$ \: ?4 j' @/ s! x! T/ }
7 e2 \- _: s' j9 [我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
6 O- Z/ j* R& h8 O2 u7 r, R3 b
  v$ y* w3 C+ g# Z' d7 E) r4 G: E 4 V5 f# o' [6 A0 \1 S

$ e: G: a. A7 e" q0 `' t( f再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。
8 O6 g" e: {9 ?可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
$ H2 O) r6 h. A5 R
- S8 c/ T7 r' e( z2 Z) @[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

你小子居心不良,存心让我在众多高手面前出丑(开玩笑)。再一点,我不是“老师”,我跟多数人一样是到这里来向真正的老师--比如★新手★、还有aishengchen(如果我猜得不错的话)等等--和一众高手(包括你哦)学艺的。
7 i0 ]8 S: a- G- n. H不过既然点到我了,我就做个发言,有不当之处,还望各位高手海涵。
" P5 m) {* m, x: [; M, O一、我之所以没有正面回应这个贴子,是因为我对楼主的动机心存异议,不想顶这个贴。我知道楼主是个高手,他出这个题目不是真的在求助,而是在挑战。这个题目本身是一道钻牛角尖的题,类似“用尺规做图法三等分角”。他坚信没人能拿走这100三维币。
& Q: A1 G' U  ~二、对原题的看法:我认为,autocad只提供给了我们圆和椭圆两种二次曲线,其它曲线一概用样条曲线代替(包括2007中的螺旋线和渐开线)。而样条曲线在autocad内部的数学模型只是一个拟合函数,在拟合点足够多的情况下,显示的曲线和我们理想中的曲线“相似”而已,永远也谈不上“准确”。9 [3 r5 g/ P5 H1 W# L
三、对简化题的看法:表面看起来,题面被简化了,不再需要画不“准确”的样条曲线,但我们只要把已知条件画出来就会发现:这是一个用部分边长求画直角三角形的问题--这个问题在论坛上已经讨论N久了,前段时间被★新手★版主关闭,现在找不到了,估计是被删了。' b( ~" [$ F4 o% |; O# \
  说实话,单纯用画图法解决这个问题,在下无能为力--因为我还没找到用画图法开立方的途径--而且我也没看到过别人“准确”地“画”出这种图形。我遇到这种问题,通常使用autocad的VBA,而且可以保证得到的结果和在autoCAD上用画图法做出的精度完全一样。如果楼主承认这种方法属于“CAD方法”,我就立即上传我的宏,就怕届时楼主为了保住自己的三维币而拒不认输。( c, n4 V+ R7 @, @( N, M, }
四、尽管楼主动机不纯,但题目本身适当地加以改动后还是有利用价值的。  e" v- X$ M, _# [% q' c2 `9 f* J
  1、对原题加上以下限制条件:用线段AB的五分之一做为拉伸线段AC和圆Y的步长画出样条曲线(拟合点--含样条曲线两端--共6个)、画曲线时必须考虑两端切线方向。# ?9 \5 f4 d7 n( g5 |
  2、简化题中的直线12改为水平方向。3 ^5 s% S1 _8 ]* u, L
  这样改动后,两道题就都能用autocad命令画出来了,其中第一题稍复杂一些,第二个相对简单。如果版主能对上传答案--特别是答案正确--的网友适当加以奖励,就应该能达到既活跃了论坛、又能正确引导大家的努力方向的目的了。
) ?9 @6 }4 l: E( U/ h: A6 L) G/ e4 T
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?5 N: l  P$ P- q  h) |" \
# Z2 {& \+ j1 G9 q+ L- p
0 r: N& ?7 c9 @; {/ K! k; K8 @6 b
看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
% T- k4 @3 G$ G1 S& V7 ^# x4 F; c6 v- Z. W
[ 本帖最后由 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不能精确求解。: w7 Z5 w2 m" C( [. h) b/ }
故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。/ f1 }% V. M1 B. K! x

8 k# }+ a9 x) }2 V) \' ~! q. ~但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
: f8 h% H: g* ?0 V, x
* t- e" m9 K# F3 d同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。
/ `6 h, z# b4 z0 l                                                ——blackbird) b$ a5 u+ B, [7 P0 f( f! S

4 F6 R7 ]+ l3 B  t; J该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
! W8 y: w% T/ F/ [. h希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!
. x0 H* ]7 g8 @: N+ i4 Q0 r7 ^
; i- Q8 Q( |0 }+ E6 k' E2 Y[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
& X  c8 e1 h9 v9 k* K9 A  Y4 o% F. Y以下是用VBA求解的过程。
$ R0 f, E$ ?8 z) o附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

+ D; l9 f7 F+ Q
' V. @/ ]! f3 s5 {/ A# ZSub NT()4 \1 N6 l, l; N. l7 A9 C
    On Error GoTo 10 '发生错误时退出程序
  [: q: G7 T+ t& p# O$ d   
) L: e& H& J! B  y1 _    Dim A As Variant 'A点坐标
! [- a; ]: J4 |8 g3 [    Dim C As Variant 'C点坐标; `1 D/ N) W  F5 b6 H: {2 A0 `
    Dim B(2) As Double 'B点坐标
5 K- n$ L, R2 k    Dim P1 As Variant '直线12起点坐标0 r% n0 q- Q3 V. i6 U8 l5 h) O. q% V
    Dim P2(2) As Double '直线12端点坐标
# p! v& |; K5 V% j    Dim R As Double '圆Y半径
9 n3 q' L: x* F6 k) N    Dim LineAC As AcadLine '直线AC
$ m3 T% J# a% J# |4 l    Dim Y As AcadCircle '圆Y# B4 [8 a9 [% s% ~
    Dim OC As Double 'C点到直线AB中点的高% I4 L2 o0 x0 q" d3 g1 E
    Dim AB As Double '直线AB长度$ Y* Q" D6 y, B* R/ F
    Dim M1 As Double '迭代运算左边界点的横坐标
$ z3 v& d- `$ X8 D- W    Dim M2 As Double '迭代运算右边界点的横坐标" P" j1 B  C+ Q  m' M! D# ~' P
    Dim Yc(2) As Double '题目中拉伸点的坐标
' K  l3 @$ {7 C2 D    Dim X As Double '圆Y与直线AB交点的横坐标
8 C2 v4 W0 @) P, w' M3 }2 [9 r5 U    Dim X2 As Double '圆Y与直线AB交点的横坐标; n9 N& F) L$ n4 Y. p/ f
    Dim S As Long '曲线拟合点数量(3~32767)5 x6 H) q) k2 b: N% g; d! ~9 H4 v
    Dim K() As Double '拟合点坐标9 z0 q$ [% k  K$ c; X
    Dim St(2) As Double '曲线起点切向* @3 ^6 F$ l9 w8 O: l3 ~$ R. v
    Dim Et(2) As Double '曲线端点切向
0 J, Z  V9 h( t5 a  L9 O: M2 ?. ?, J    Dim I As Long '循环变量: |6 |7 t+ a+ A. b
   
+ U5 U) \% x3 S( d    With ThisDrawing
% k7 A9 G$ r9 C        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
' w4 R$ E9 Z- I$ @# W% c        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
1 ~# E' x: a0 E0 M# f            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")" z* v, y' ?/ j3 U
            If C(0) > A(0) And C(1) > A(1) Then Exit Do! Q1 D8 a% J' P4 c; k- ~
        Loop
7 b) \+ c6 g# |" k6 q2 j        OC = C(1) - A(1) '计算B点坐标
! z$ Q# M& y# B        AB = 2# * (C(0) - A(0))9 r5 i& |" U4 l9 T
        B(0) = A(0) + AB
2 e' [( {& L( h        B(1) = A(1)
, k- A$ Z8 @* _% m* Y) c: r        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线. d/ W: u7 `1 @/ T- o# f
        .ModelSpace.AddLine A, B '画AB直线7 v# G% _! j2 F$ M, v6 ]& W5 T  B
        .ModelSpace.AddLine B, C '画BC直线& m4 @" W/ F" e  ~
        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。
. l) g6 d: I7 m$ @( S, j4 J* H            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
9 S8 y( l- `/ X( j            If R < OC And R > 0 Then Exit Do
3 m9 P: N8 r& w, x9 D7 ]        Loop6 f( q8 J. |, j/ Z+ ^$ e& Q
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
1 ]0 Y& L+ w  e4 s" B        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
( D2 w+ a  S7 z  X/ n7 E        P1(1) = C(1) '计算直线12起端点坐标% l% w8 U- x: j4 H" [& C
        P2(0) = P1(0)
4 s3 v5 n3 n1 J4 E: Y        P2(1) = A(1)
! D6 ^: a6 {1 E& X        .ModelSpace.AddLine P1, P2 '画直线12, E" _' u- m8 i7 \' Z0 u  q
        # n, v* A& }5 k( }6 C
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界( U: P! M' L7 \  j. s" }: C
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界( A/ R8 {+ v9 \: s
        Yc(1) = A(1) '拉伸点纵坐标与A点相同1 S1 a3 u' `) o# K- V/ z
        Do '迭代运算
( Z2 o4 l; T. m' `6 h  r            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标. x2 B" b+ h5 ^+ r4 L  g
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)
' T$ [0 E3 ]: O" m7 _4 M            If X = P1(0) Then '交点与直线12重合,结束运算/ ^, n* K% `: ^$ x: M
                Exit Do
6 s4 Y+ |3 J, ?: V/ @            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算- w& P# c9 S& r+ H& A
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果
  [" t6 A, B- R6 Y5 M; \2 I) r                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
2 B, S, e; x/ j( y" z. h# O                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
0 G+ R8 o( w3 A0 o6 T/ h                Exit Do/ W& V/ y* N2 m" x% A
            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算' Q3 ~" B6 y9 J( H' z
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
+ h! F: o0 S% D) |                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
/ s1 x, [1 P5 W$ z& S                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1. Q# Q# e+ ^: e4 m
                Exit Do
6 g6 N8 p+ U1 O: y2 `2 r# a! z            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
8 ?* S# o: \$ v) ]/ E                M1 = Yc(0)
5 i: L" i# ?3 T' g0 u4 D) n            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算$ u7 a* z& _% M5 x  S$ V3 t7 K
                M2 = Yc(0)$ j8 l4 @; R; v! l
            End If) c$ n, Q- \% o* k- n+ I! i3 a. |
        Loop
  B6 y7 S7 ~5 q; w* Z        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
( K, M& H7 Q2 w& n5 @  b' q% B        Y.Center = Yc '按计算结果移动圆Y
" U* |2 y( h1 p6 ]5 T' f$ ]        2 N4 k/ E- t! {" }3 F
        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。, p! @/ I' A1 [$ |: p. R& b
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")6 b6 Q2 ~& S5 Y
            If S > 2 Then Exit Do& C1 J. P+ r7 `6 B
        Loop/ e# h' y5 @) a" D) U
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界8 N* o, a" f; C
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标
$ d3 Q1 m7 m# b            Yc(0) = A(0) + I / (S - 1) * AB
) Y- z5 q8 N7 I& H1 a- K            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)
0 b/ `) z- Q2 `/ f' K) N# ~9 d. G            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)1 E1 V% \3 ?- y/ D
        Next
. o( x! i0 s, _8 p9 R$ A, K        St(0) = 1 '曲线起点切向
" r0 M' P$ z& e) w        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)))
" p: x2 Y$ f, o& X        Et(0) = 1 '曲线端点切向
2 z% ?, T2 X' J- Z0 d, z        Et(1) = -St(1)
( M/ I5 d! E/ a        .ModelSpace.AddSpline K, St, Et '画样条曲线. I2 s3 X/ j9 _/ E$ E
    End With
# D6 M. j2 A, {- K( y  l10' d; w0 D# k4 ]6 Y" t! j0 k1 w% l" O
End Sub
8 N5 Q* g4 t7 ?% H0 V9 O
& v9 p4 g* m% q[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 12

程序和附图

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

sj.rar

17.33 KB, 下载次数: 10

发表于 2007-1-15 20:55:32 | 显示全部楼层 来自: 中国吉林吉林市
15#的内容发贴时间太长,不能编辑了,希望版主有空删除,或者只留"请楼主举例说明一下,哪个软件有三线交点的捕捉功能?",误会已经澄清,放在那里不太好。4 I, z4 v; F' O: h
楼主发的这个主题,以及各位高见,对我的帮助很大,对楼主表示感谢的同时,也真诚地道歉,对不起了,我应该先通过短消息和楼主沟通会更好些。希望不要影响楼主和大家讨论的热情,也盼望楼主有时间分享自己相关的心得体会。
7 N% a' Y0 w0 J3 h7 C# r0 H0 F! ?% l
也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家
6 f: N) C' g* h请看新贴:一种新方法“精确选点法”解CAD难题
0 P5 Z: U0 P: Y3 zhttp://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题& U% h4 Z- j' S0 R1 f3 Q
我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢" |0 q7 [' ?3 y
解题步骤请看 23 楼的链接' _5 z6 V9 n  R' g7 f- `/ `0 U1 G
尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为50000000
+ \/ a' g2 }1 k( P
附图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 )

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