QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线, n  t/ d, H$ L# p; ]& t( S9 G
如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B2 ^2 h9 ~3 n$ w, o: j3 E5 i" v
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
, r7 p; H9 X: Q5 R
" ?7 J; f; R4 i0 E# [$ j) W- i5 g  R/ i' t5 F% C
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............
8 ?5 [+ x0 o& \9 T$ g各点不是可以直接交出吗..........
/ w$ F9 t9 N# m3 j! ^楼主要"精确"........
. B" D# Z) C; C曲线总是近似的呀................
: s' m. `8 D, B9 P* l, [
$ a9 L; d. e- Z6 r# U3 i* |. J[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表! J/ m5 h3 _. O  v; i+ k
求这样的曲线有嘛意义呀.............( m' T. l4 C$ C, a( t& v
各点不是可以直接交出吗..........! c/ a, ?% L& H# d9 I
楼主要"精确"........% N6 e5 K: `: q$ S  `" R* q* ], L# |
曲线总是近似的呀................
* g; u0 w, q) J/ y. Z. ~1 F
求解CAD难题简化
% J/ o; j3 n" W/ n$ Z/ a5 n2 p
/ q& f. C+ z) W5 T& X[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。# Z3 |# Y  e* E; [0 x
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
* t4 L  d1 z6 \) K1 d注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
/ b* B: q. l% v0 b" i7 O加载yxgj.vlx,命令也是yxgj
) r& X( B% A, f2 Y. ~) _. j3 F- {7 V; ^7 s% q
以下为操作过程的文本窗口:
- c2 j$ b2 ?% f) l- i, r; b: _0 v命令: yxgj
' B+ C3 T" }6 t) Q# c% O9 R' f; c9 IAB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816
& U( [8 _9 N( m& x确定A点:int
5 m" _' y$ i6 U. w" M9 j
0 \6 M2 G) h: f5 Q- m4 J5 D确定B点:int
* s8 J2 E$ h) i. h; \. N2 |2 H* `5 A' q# i
确定C点:int
3 R% T! k4 T5 i9 _6 p4 i" y' Z  X4 c2 S" M: [: F
输入圆半径:int7 L9 \; K1 P1 K' Y( j+ R! @, j
于  指定第二点: int
; |+ x$ a1 t- r7 Q, O2 a( b8 P8 _( \8 l; h3 s" b
Grade(确定计算等级)<12>:7 F+ b' ?  ]  i& ]
+ u  _9 U6 Y3 I3 x. _, ]( ]
[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?3 x+ O: B, ?" z. j

, p5 L. k' `0 [1 o- }( XCAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!
5 u# V+ g; e3 `! X" r2 R
3 s4 {! i! O, Y# a# J  o呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!3 `- L* |7 T2 l$ y& P" q% c

: n' c5 l* p4 P1 U- ?% K# x真想得到这个赏金呀!可是.......哎......还没有学到家呀
- }/ I9 l1 f8 ?, s" b+ S
$ c' X2 c. j, Z$ O

0 p; f+ q* d1 O1 Y1 q# O. i& j* B[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表
' a7 [  j" x3 E+ O  \  O9 p楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。1 w; d* g, W# a" }/ E' \
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
" {3 ^0 x0 `0 t; F注意捕捉 ...
* L* X7 s# B3 ^0 O, j! f" x, k) Z
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。* k: d4 l' o4 u# ~; J& \# f5 o
        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。
& a6 L% d! S$ u: W8 w8 f        看来这个维币应该奖给moonguy兄了。
! {4 ?5 Z* k* X+ [4 a        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。
7 S1 X1 T) |& s+ D# d- P: z& c# @- B" q- q! Y; }
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!. v8 h8 z. {, F4 p. S! \" Y
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
3 u) M& y9 H7 z. G, Z+ I  M: @& z( k. ]
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。7 K, [( b! P% X
       ...
" l; m( B( r$ g) |8 h

; r$ y8 c- }" K6 y7 k我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。  {" x0 c; p! P' B0 j

8 u! _! W& w6 S* t这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
. }$ w/ \$ b# t. X" D- e, o; j9 m) h4 a7 u
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
* M. E2 V4 d/ |( ]* B   I& F' u4 c4 N6 u. {& J! `: B$ s
0 V1 p+ `8 l  f6 ~0 R
+ L- y' z5 X7 R6 T/ h+ u- h# \( I% Z/ P2 h
再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。% _0 D$ i, S7 V* x% B1 Y3 ^3 G
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
5 G$ S* S% _; T% z+ U' `
+ J- K4 t7 @& f3 o: j! l5 Y/ N+ G[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

7 H9 B3 W( M  B1 O7 E
+ q8 R3 l- l" @. @3 Z0 G看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。9 p$ t2 b  O. q1 C4 `' [8 D4 ?3 b

* F) `1 I: z' t[ 本帖最后由 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不能精确求解。
  P/ F& J% M5 {% J故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。
2 @* f8 |5 @6 c, ?
2 T2 R! b! ?  |4 y- @/ D7 z( L但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
: A( q# A, `$ c/ X# ~" H2 z  B9 B7 G; o
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。
$ J4 P; D% a, D4 f                                                ——blackbird6 w4 l6 N  z: t- k/ ^( [3 E

# O5 f# d) Q8 A! Y, j9 C' f该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。! o$ _) B( G- l; b( B
希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!
, k0 A0 Q2 N' ?+ Q4 P# d& F9 X# x
[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?! J% c, \* s6 [$ j! U* x- y) X
以下是用VBA求解的过程。
4 f7 A5 Y! M( r附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

; Q# x% e" |5 D0 g3 M$ P
/ O* L" l( q  o/ N, L+ h5 ZSub NT()( b/ O' R; S' F. `/ j
    On Error GoTo 10 '发生错误时退出程序- \% l. |; E! r* H2 n6 `: W
    : D, z' g2 [$ x
    Dim A As Variant 'A点坐标
& e% B4 v" y$ M/ ]    Dim C As Variant 'C点坐标
+ Z! Z% s; ^$ I8 ?    Dim B(2) As Double 'B点坐标
: \4 x/ ?, l' X( P* u    Dim P1 As Variant '直线12起点坐标
3 v) H9 b1 }6 k: E0 W8 O' D. N2 d    Dim P2(2) As Double '直线12端点坐标4 x# ^4 x4 V& n/ \. G4 E7 w
    Dim R As Double '圆Y半径
) O& C, L5 x$ p8 u! g: A    Dim LineAC As AcadLine '直线AC; S& y. }& l$ O, l- w3 L6 g
    Dim Y As AcadCircle '圆Y
2 p: [1 k4 x! i4 }) c7 s/ \    Dim OC As Double 'C点到直线AB中点的高
5 g1 o8 h& ]( \4 ?: S1 I    Dim AB As Double '直线AB长度& v2 H* g7 D9 y
    Dim M1 As Double '迭代运算左边界点的横坐标
0 d1 j. L1 A* T5 w* h4 y6 m    Dim M2 As Double '迭代运算右边界点的横坐标. w# L+ {- {6 E( E9 R0 S3 P+ t7 g
    Dim Yc(2) As Double '题目中拉伸点的坐标
) X" h8 J0 L% T, D3 E" G6 ~, ^8 ^    Dim X As Double '圆Y与直线AB交点的横坐标- n6 j5 o7 [$ m0 j4 O4 ~8 T: E+ S8 f
    Dim X2 As Double '圆Y与直线AB交点的横坐标
& R% W5 \0 u9 K) Y    Dim S As Long '曲线拟合点数量(3~32767)6 w# n4 J2 Q! H  d% I' c
    Dim K() As Double '拟合点坐标* M  f( ]5 ~9 Z5 |: ~
    Dim St(2) As Double '曲线起点切向9 F9 M$ k7 C" ]+ `( j; L3 L3 I  I- M
    Dim Et(2) As Double '曲线端点切向7 U4 {, j) ^! H, [
    Dim I As Long '循环变量8 `- T- Q# _. ?, z, ]) q
    / S2 ?( e  u4 f+ ]1 y% q3 G' h
    With ThisDrawing- k. s9 }8 {! k# d" p) `
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
9 v; v8 X) K% b2 B        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
" G/ k: F! y6 q/ N/ I" j9 x. U            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
0 \5 F# o# m1 p: h. B: a' q- S            If C(0) > A(0) And C(1) > A(1) Then Exit Do) j, p) S, h$ p' e7 ^
        Loop
3 K. C0 V6 x, F6 O; y: U        OC = C(1) - A(1) '计算B点坐标) [0 C3 {& H  C
        AB = 2# * (C(0) - A(0))( j7 }3 h" G$ [) d& D3 O% U3 c4 W
        B(0) = A(0) + AB+ E0 n# G: I6 t
        B(1) = A(1)4 N- F, o/ j3 n( w
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线5 W1 L7 l3 k0 k5 F" c5 Z
        .ModelSpace.AddLine A, B '画AB直线
5 E. H- k7 w8 o$ n        .ModelSpace.AddLine B, C '画BC直线2 K6 |5 W& ^& n
        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。( L2 o3 U! S% k: n4 y6 j
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")" T3 v' H# H; h5 o+ i
            If R < OC And R > 0 Then Exit Do
4 v" N1 S: ~* @: y* p        Loop
0 i/ `2 Z4 p% [& F7 `) p+ Z& k        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
/ v! \2 ~: @3 D% s# n0 s        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点! G' d! t* c# }6 `; b9 T0 a
        P1(1) = C(1) '计算直线12起端点坐标
/ Y' A1 m0 G. {/ Y/ d        P2(0) = P1(0): [( R7 x- M4 X0 M  f1 {
        P2(1) = A(1)* |# t/ \( S- G# {  H' A8 z  Q. ?0 }$ O
        .ModelSpace.AddLine P1, P2 '画直线12; J. o4 v/ W: d$ _
        0 t1 s1 o. \( \; q% l
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界
  l  J( @2 h$ z* X/ q( _+ H) ?5 V        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界
) N2 p# w- P3 Y& _8 a0 W        Yc(1) = A(1) '拉伸点纵坐标与A点相同6 ]2 U5 Q! m9 W$ b( W% g
        Do '迭代运算+ g2 |, z7 R/ }+ C. a
            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标; a: t, O. S9 e+ ?! f1 F( G2 z
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)
" d- f. F: F+ h9 h7 d0 t; d            If X = P1(0) Then '交点与直线12重合,结束运算: C9 r- W1 Q: t0 [
                Exit Do: F2 X. R( i# R# d( q; z
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算( a& z0 W# M4 s* V/ s3 I
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果- i% ^0 ^7 u7 ~, W
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
) O$ E& F! w7 e1 z" Q# ?5 z                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M22 K$ b- h$ H+ k9 Z( E
                Exit Do
* {; d! ?! K( D; G  ~) @            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算
, p# ?5 j* w( Y! ?, n  A3 U3 L* u. [- D                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果, {: m8 |' t! y  R. i! Q
                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
$ T0 C4 z$ H$ _! h  K! M2 o. J7 O" i                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1, s8 l' z' o- U1 ~8 k* c- e3 W  q
                Exit Do- u, t3 K- f3 B; j8 V; q5 T) e
            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算6 _! B  g, Q' r7 l
                M1 = Yc(0)+ l- S7 t5 k$ E5 j6 g
            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算# R: r: w, r; m  D* X" |' B! e! z
                M2 = Yc(0)$ k2 P! P/ N* |/ S; g4 n5 I
            End If1 G% E1 u% p0 y5 ], p# g( m- V4 g% U
        Loop
. a7 K7 ~& b' B        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
! N; W! s! |: ?, M" O        Y.Center = Yc '按计算结果移动圆Y
# F( Q8 T: E  |1 ?        5 d7 u8 q# ~  n5 ]' N
        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。
. d7 e; R6 M/ e) F4 {0 a            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")
* ~$ D9 X; s+ D6 q            If S > 2 Then Exit Do8 ^$ V5 S$ `/ E% ?% [& a$ d
        Loop
& X. e7 v+ G+ n7 }, [9 n% p0 R* S% |        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界  [' w; y+ h9 d: T# i# {7 A' Y" v
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标+ l! I6 F7 C/ S; i6 Y$ i7 n. C$ J
            Yc(0) = A(0) + I / (S - 1) * AB
- X; z! `+ Z- Y% C7 i1 @7 \            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)
+ ]7 N0 V. s& z# u$ p4 @/ M- O- _5 \: R( O            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)
6 }' _1 B4 s- `/ o        Next
6 p' W' {, ?% x/ H: K+ ?( [# l        St(0) = 1 '曲线起点切向9 F( `( h9 U" w# `4 ]) r
        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)))
0 s8 K9 X& }# C4 J& a        Et(0) = 1 '曲线端点切向* z1 O( G/ ]$ K' G6 [" Y
        Et(1) = -St(1)6 d; b1 K- }, P6 H1 G
        .ModelSpace.AddSpline K, St, Et '画样条曲线
# I$ W) D+ V0 U, _    End With
% B; s& K# _& C# X10- O' y: Y1 b! z/ a$ [- A  P
End Sub
$ l( X8 z+ S' Z; ~$ S/ |- i1 T- h% {. R, W/ Q
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。1 m: R7 v; H6 f/ U& R8 p
可应用excel序列功能,非常方便,具体步骤看excel压缩文件。
. B8 N6 n0 H* x( D
! E0 p: a2 |( s' h[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。( N* C  K2 ~/ X; K5 W
        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
6 c2 {" Y: {0 e' H5 r        原贴已经关闭了,就发在这里吧。
/ a. C* b- P. g- N1 \. a. F% X% }1 N, S4 m! M" M" C
[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

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

. q9 V7 p; i+ L也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家
# x8 H, `! c0 x3 I' M) {& H请看新贴:一种新方法“精确选点法”解CAD难题; k0 o* Q' {9 a' f+ s
http://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题; h" b7 j4 q& t1 D+ S4 }
我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢3 a8 ]; k5 |2 ?' Q0 w" L  J  `
解题步骤请看 23 楼的链接) K/ X  K' \( h- P( Q1 H
尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为50000000- y7 u' B1 |( R% 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 )

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