QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
% q& u( w* T* c+ b如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B5 {7 z6 u2 @; @7 k( Y+ ~' V: Z
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢0 p$ j* ~& r5 y: D2 I. ~: t

* X7 f8 [& T' ]4 Y8 v* ?# A9 I) |; L% a/ [! v) l4 W2 H: }0 i
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............
7 r  p: J7 J* U7 v: h各点不是可以直接交出吗..........
+ ^3 S3 b, O2 e/ I8 x楼主要"精确"........
/ c4 v# x% v3 x' l* |曲线总是近似的呀................" e& V6 h6 w+ P8 s
# N4 A' _( G! c$ |" k; L- e
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表
% x( f7 r4 G4 f$ K) ^. r# u% b) T求这样的曲线有嘛意义呀.............
( P3 y' }. R% ~各点不是可以直接交出吗..........
- \1 u0 c; _( m$ t: N: [( w& i% }7 @楼主要"精确"........& C+ s% t, v1 B5 Q, C. f
曲线总是近似的呀................

4 i4 ~$ V2 ?$ N3 E求解CAD难题简化8 ]4 }9 o8 I+ S( {# c  ?* B
6 o4 m( ?: a4 a$ ?8 w& L
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。: k3 N; H- c# X" [2 B
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
+ @7 o/ V5 z$ R9 r) w注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
1 K0 d! g+ e8 a4 I加载yxgj.vlx,命令也是yxgj6 f7 ^& M' A$ w. Z9 m
1 B/ N( r$ y' ]- g( W0 B
以下为操作过程的文本窗口:
! |8 E& p4 U" r# N8 t命令: yxgj/ Q4 |% Z2 B! Y3 @7 g4 T
AB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 12188164 E6 ~- n# O7 f
确定A点:int* g. p* A8 X- ^" q6 T. f# U$ Q

2 f7 m( S$ h, E确定B点:int
$ N! k0 q  n. @$ S# U4 q, K# @' S+ `& ?% a4 s
确定C点:int
4 d' Q. p8 `/ T' l- O" ]. ~1 r+ w( a$ V6 ?. W* M/ j4 d( c6 J
输入圆半径:int
5 h1 V. `& l( p2 v0 A于  指定第二点: int/ h4 M( C/ M- j. j4 l& C& w/ ^$ [
( \, T: ~6 n: R: ~  |
Grade(确定计算等级)<12>:
$ Q( z$ G* O4 S
7 Z: l) V/ {; [6 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?
" y0 D2 ]3 J. F3 g& ^2 r5 F2 `3 f! G) z: M" s  I6 m+ I0 _
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!9 d  f) ]! k, p: l, Z) J
; u, U/ [* J3 z0 Q
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!
4 m8 o% t* {, V& o
  \' |9 i3 Z* i3 U0 H真想得到这个赏金呀!可是.......哎......还没有学到家呀
! V7 J- X7 V. D! E
8 \; K/ B4 s. m( @: W  w6 N* z6 M

! V$ N' M2 M% V$ f7 i[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表
; y/ d: V$ e2 [. B) w; q楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。. Y! O5 p/ E8 P4 e6 |+ t
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。" \  x- F, s0 t& J& g
注意捕捉 ...
1 z8 R8 ?8 ~2 H2 l: b8 C+ M2 c* b
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
- O# k- v2 ~8 j; b1 {        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。: |" \6 y, o9 o- `+ C8 v7 s! r
        看来这个维币应该奖给moonguy兄了。" E* I  A7 i9 X# v/ W
        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。* F5 a; m) ^" g* r

! d! n+ F" a+ O[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!
- D$ l9 F$ C/ q( {& W而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
1 x0 g9 g- k4 I. U5 C) }. E1 Y
; V6 ^0 F; H+ |9 }8 c! g        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
% P; ^9 n& f# n' w; z       ...

) L/ R5 f2 @' N1 q: N
( m6 W# c: u& o8 j8 F" e我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。; d1 D1 |! @& W+ `
+ s7 M" N; _8 D6 I
这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。. |: t, I; x: ?9 x
( N" y2 _5 a2 T/ v! |7 ~
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。  w6 ^: }/ v4 L( g; X( q( Q

% F8 U* v; H% j
2 f8 L0 u6 l7 i" d- d2 f 4 f9 p3 g# T' Q* j
再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。( O9 N& p+ x% b9 V4 E
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
+ B! g( X3 s$ ?7 N$ S7 s& A, U. }; y# b4 n- s' B
[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

你小子居心不良,存心让我在众多高手面前出丑(开玩笑)。再一点,我不是“老师”,我跟多数人一样是到这里来向真正的老师--比如★新手★、还有aishengchen(如果我猜得不错的话)等等--和一众高手(包括你哦)学艺的。; V8 Z9 Q, O" O2 r: u! V
不过既然点到我了,我就做个发言,有不当之处,还望各位高手海涵。
6 N/ i# c5 J3 z* m1 Q" r+ X2 `一、我之所以没有正面回应这个贴子,是因为我对楼主的动机心存异议,不想顶这个贴。我知道楼主是个高手,他出这个题目不是真的在求助,而是在挑战。这个题目本身是一道钻牛角尖的题,类似“用尺规做图法三等分角”。他坚信没人能拿走这100三维币。% [/ n* B* I2 Q, Q1 n6 ]3 _
二、对原题的看法:我认为,autocad只提供给了我们圆和椭圆两种二次曲线,其它曲线一概用样条曲线代替(包括2007中的螺旋线和渐开线)。而样条曲线在autocad内部的数学模型只是一个拟合函数,在拟合点足够多的情况下,显示的曲线和我们理想中的曲线“相似”而已,永远也谈不上“准确”。! H7 _2 o4 i7 D* R* `1 R
三、对简化题的看法:表面看起来,题面被简化了,不再需要画不“准确”的样条曲线,但我们只要把已知条件画出来就会发现:这是一个用部分边长求画直角三角形的问题--这个问题在论坛上已经讨论N久了,前段时间被★新手★版主关闭,现在找不到了,估计是被删了。
/ |7 R: B, p9 P( g  A. q  说实话,单纯用画图法解决这个问题,在下无能为力--因为我还没找到用画图法开立方的途径--而且我也没看到过别人“准确”地“画”出这种图形。我遇到这种问题,通常使用autocad的VBA,而且可以保证得到的结果和在autoCAD上用画图法做出的精度完全一样。如果楼主承认这种方法属于“CAD方法”,我就立即上传我的宏,就怕届时楼主为了保住自己的三维币而拒不认输。
: M6 E: |0 }* Y/ u! v四、尽管楼主动机不纯,但题目本身适当地加以改动后还是有利用价值的。
' s% o" z# P% I5 \4 {: k* c  1、对原题加上以下限制条件:用线段AB的五分之一做为拉伸线段AC和圆Y的步长画出样条曲线(拟合点--含样条曲线两端--共6个)、画曲线时必须考虑两端切线方向。
8 O  }; w& ]8 {7 T4 i  i- o  2、简化题中的直线12改为水平方向。
# N* D# _9 n0 J  这样改动后,两道题就都能用autocad命令画出来了,其中第一题稍复杂一些,第二个相对简单。如果版主能对上传答案--特别是答案正确--的网友适当加以奖励,就应该能达到既活跃了论坛、又能正确引导大家的努力方向的目的了。
4 Z6 }+ g$ |! c4 T% I* @( V3 R& F8 F" N# R* x% R1 |
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?
6 a( x  K( I5 M8 n/ h) M
% }# z( s0 }- i9 S 0 N) _* |) U+ T9 i& ]
看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
4 L; b- ~! o7 T  ~) `6 j  @4 g- 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不能精确求解。' y7 O4 `% q: Q
故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。
; y( O6 e& T. N! l, ~, [
4 K2 ]& U* i7 f3 D3 J但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
% v* L; ]4 G. [! G- Y; M) B3 b) z
. Y- V; {; d8 E4 P; H* R$ f同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。
  P6 {" G5 ^) x1 f9 _, D                                                ——blackbird
! D( u3 z: ]$ L - J+ u/ ]8 @" D1 }' ^# B* X8 G
该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
; B+ r9 D/ ~% f3 U希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!$ l: B; l" F2 [, S- Y+ Q

$ k2 W. x1 H" C  f+ _; T- c4 J[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
4 _8 T3 L1 `* \以下是用VBA求解的过程。
) V) S2 `, D- n8 @附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

: p, N2 d, V5 @. H8 ^, _( o: _8 o+ R1 ?
Sub NT()6 W7 g9 K, d' ~1 ?5 a
    On Error GoTo 10 '发生错误时退出程序! b1 x. b# E6 F/ e
   
: ]! s0 r- b4 }5 Z9 A5 Y    Dim A As Variant 'A点坐标
5 V" s& q2 j0 s3 Y3 N    Dim C As Variant 'C点坐标
4 R6 }1 O) K8 o3 i2 w: O  U. I    Dim B(2) As Double 'B点坐标7 m  m) [5 \( b2 `. B9 ^% `& y
    Dim P1 As Variant '直线12起点坐标+ Z% _. F9 l; X* H6 N8 }8 R$ p' R$ S
    Dim P2(2) As Double '直线12端点坐标
# {1 s) Q9 s- @9 c    Dim R As Double '圆Y半径
3 P3 _+ A: M2 L+ m1 V3 W8 ]    Dim LineAC As AcadLine '直线AC' w* E2 H: o  ~. B. N+ C
    Dim Y As AcadCircle '圆Y
( I/ d! D5 @- G# X" v    Dim OC As Double 'C点到直线AB中点的高; G# s3 h9 ?& D' `# v
    Dim AB As Double '直线AB长度5 o8 e8 a$ k/ U1 W6 t/ k) P* h
    Dim M1 As Double '迭代运算左边界点的横坐标  W! D, A0 l$ m: h& ^7 h; }8 S
    Dim M2 As Double '迭代运算右边界点的横坐标
/ E) w; V1 I% T' \    Dim Yc(2) As Double '题目中拉伸点的坐标
: u1 v& X+ J& X    Dim X As Double '圆Y与直线AB交点的横坐标
5 K* L4 l' _* I3 O! v0 `    Dim X2 As Double '圆Y与直线AB交点的横坐标
( e& k+ p$ X" Q8 l    Dim S As Long '曲线拟合点数量(3~32767)& b  b- ?; c8 S) v. J
    Dim K() As Double '拟合点坐标
! r6 s& N! `6 i) v# i8 }+ z9 {9 L    Dim St(2) As Double '曲线起点切向
1 r  Q+ e8 e, P; `/ m) B    Dim Et(2) As Double '曲线端点切向+ R7 _; s) H, z$ f( P# B
    Dim I As Long '循环变量
8 U1 w0 S/ j9 z# [% O2 Z( x   
% U: l7 L3 b; z+ y' H    With ThisDrawing; F& u5 T, N9 y! t1 H$ Y
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置6 ^' l2 d/ p: {" n/ j
        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
, P2 E6 ^7 `0 A3 b- A4 C0 l            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
! @' h, u* x; w" j/ b            If C(0) > A(0) And C(1) > A(1) Then Exit Do5 Q% v- N% C7 l& H% E
        Loop* u: O, w  v" [" S
        OC = C(1) - A(1) '计算B点坐标, s0 z& P9 q/ i9 Z8 b% Q" {* e, `
        AB = 2# * (C(0) - A(0))
; a; O! ?5 l5 H5 w$ b$ J        B(0) = A(0) + AB. ]5 M' r' m$ ^4 u( i
        B(1) = A(1)0 g) ^2 }: L0 ]+ Z: [/ ^3 p
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线
8 i$ A) n7 ?- a) u        .ModelSpace.AddLine A, B '画AB直线
" }% K  d7 i! Y; }) o        .ModelSpace.AddLine B, C '画BC直线1 L2 ]. F- B$ i4 H7 G
        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。; A; ]# |7 f; \! g1 q4 a8 ^5 ]: s& @
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
) J% `4 |) b' Y3 b! T- k            If R < OC And R > 0 Then Exit Do
8 V/ \' q* q! u        Loop# T0 _# ~' r( d% y  e# x& Y* V- _
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
, Z+ f' \/ v' O$ S- K7 {        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点3 w* T0 Q( w1 I0 k/ R- F0 T5 Z1 i
        P1(1) = C(1) '计算直线12起端点坐标
6 Y1 W& t, _1 `" C+ L6 h/ a        P2(0) = P1(0)
$ B1 H6 c/ Z) \9 `# x: ?+ h$ ?& f        P2(1) = A(1), E5 D4 j) }! h) U8 V: f7 Q% R
        .ModelSpace.AddLine P1, P2 '画直线12. M% U1 r! D0 {% c
        
1 A* `+ O* _- ]1 c6 L+ x, c: @" z0 Q        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界* T7 ?6 o6 Q( V' w. w1 Y  A/ B5 ^
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界
, g& {$ I; _) V        Yc(1) = A(1) '拉伸点纵坐标与A点相同0 l) L. ~4 s- q" d. n  l
        Do '迭代运算
# V/ E& d; @4 ^            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标
6 b2 D5 k, O+ d% n- {            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)4 s/ q* L  S; Q: r- F3 H4 |& H4 q
            If X = P1(0) Then '交点与直线12重合,结束运算
( P+ n* i% t: ~0 w; c9 G$ J2 B6 O                Exit Do
3 d* C6 ~: `6 F4 M3 s: x            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算
7 q0 o+ X) j) w                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果
2 |# o% ~3 S/ ]$ x& v                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
4 j/ d$ M  j4 S0 d; t5 n5 L1 M                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
" b2 b- d% ~& a; E# Y5 A                Exit Do
6 Z  D- p8 U/ t; h+ R+ n  w            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算
# ]0 [* w" k  P* D/ J* G6 Y                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果2 N4 k2 e# R  L* j4 X9 I2 ?
                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2). P7 f, y9 X( W* D# h
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
5 M: [: U% l1 Y0 \5 ]1 z: G  f                Exit Do
; e. J/ Q# Q/ c/ g            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
, B; f. x, k& t8 P- n4 [                M1 = Yc(0)5 }- g4 o& p3 c/ Q) m
            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
# J/ f: l; C: g( I' I; J1 F! y5 M                M2 = Yc(0)' U) J1 [+ `; j; r/ i- N" K1 i
            End If; U9 j+ q' C4 a$ v0 J  ^
        Loop6 h: [( t0 v0 `# c0 {$ `
        LineAC.StartPoint = Yc '按计算结果移动直线AC起点, i* P; i# \, a% w: h" Z
        Y.Center = Yc '按计算结果移动圆Y
, Z8 w" F) o% E1 d        + Q- n) g. S3 ]& n# ^1 R
        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。+ S# N6 Z( X6 W9 h
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")  G2 G3 z9 `8 p" V1 a% h0 I
            If S > 2 Then Exit Do
$ F) D, y) {# b  K) \7 P4 h        Loop
9 }7 M: j2 H3 o; v% d+ c        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界6 ?- A* ^3 O9 [: e$ `
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标
; v7 p8 L; c7 M5 p( [" k            Yc(0) = A(0) + I / (S - 1) * AB* g3 `. z: q4 g. u9 ^' x/ r
            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)
+ i+ @3 n+ |6 g: P            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)
/ p# [8 H: Q0 M8 v6 I/ o3 h! ]        Next
2 m9 R+ ]& @- Z1 k1 U! ]        St(0) = 1 '曲线起点切向- @1 o% C5 N4 {
        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))): g4 s/ V  d1 I7 ~
        Et(0) = 1 '曲线端点切向
& L) |: M  v: z3 D! C7 i8 o        Et(1) = -St(1)  Y3 c  f( o! M  i: b
        .ModelSpace.AddSpline K, St, Et '画样条曲线
" D+ p) e) j$ ]6 [1 }- A7 I    End With
# A, R8 d- A, y0 }$ f10) D  [. r2 _) K  B
End Sub$ h, V3 w1 a- d. _
4 l3 Z0 T4 @2 u( E; q" Y
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
, _1 J5 o3 ~- s+ R9 t可应用excel序列功能,非常方便,具体步骤看excel压缩文件。
5 e" a  x* d  t2 m+ X
+ q6 L6 p* K/ p; p; t[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。- e  S9 @) ^( x' g4 ~) ?
        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
# {( x( W  R; R5 a) v        原贴已经关闭了,就发在这里吧。
/ _2 `( p7 ]( k
5 U3 K4 D2 m$ f# T9 e# S[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

发表于 2007-1-15 20:55:32 | 显示全部楼层 来自: 中国吉林吉林市
15#的内容发贴时间太长,不能编辑了,希望版主有空删除,或者只留"请楼主举例说明一下,哪个软件有三线交点的捕捉功能?",误会已经澄清,放在那里不太好。6 \+ M" i& l' b( |1 c, [" x
楼主发的这个主题,以及各位高见,对我的帮助很大,对楼主表示感谢的同时,也真诚地道歉,对不起了,我应该先通过短消息和楼主沟通会更好些。希望不要影响楼主和大家讨论的热情,也盼望楼主有时间分享自己相关的心得体会。
6 W6 `) W! W6 A5 y% \/ Z+ Q
也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家
, e/ j8 E8 F2 b请看新贴:一种新方法“精确选点法”解CAD难题
2 y7 O. }0 f% ~# Z5 G9 ~7 A: Vhttp://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题, t( W. E* ?3 ~: l! S  a+ d2 P
我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢
6 R1 F2 J2 t9 y8 D# f解题步骤请看 23 楼的链接
9 h3 U" V8 j  X: l% E  u尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为50000000& _& n# n! m# ~* Y, ?: t3 V
附图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 )

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