QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
4天前
查看: 7335|回复: 25
收起左侧

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线: R2 d+ F9 a4 _8 u* ]5 e3 k6 G
如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B, X- _% f( l: h# z7 e
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
4 \2 @' `$ J5 W9 @# A! X+ X4 T5 r% h! u- G$ p

* g$ h+ N6 m+ E% X! i2 u. y+ Z[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............
  i0 e- H4 K+ K$ p6 V. T各点不是可以直接交出吗..........4 W" _) [) L% m: r5 ^* z
楼主要"精确"........
) T+ m8 t; O/ L) w8 N; z$ y( P曲线总是近似的呀................
; R9 V$ Y; i. h4 E6 y" P
+ F* D1 p) A' w3 ^[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表
+ ~' E3 a* E# ~" m求这样的曲线有嘛意义呀.............5 D6 P' R+ x$ x, |
各点不是可以直接交出吗..........( r6 ?3 T4 b1 }, _7 |$ L1 J! b
楼主要"精确"......../ x9 T; j& H! l  X2 o- `$ e% y5 O. ]
曲线总是近似的呀................
/ T8 _3 R* \% @1 O
求解CAD难题简化9 e' C5 v# q7 I3 O7 v

7 k* ?/ g6 i$ @! T. Q% B6 F[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
0 J0 a6 t' [! g; T6 i, ]' s* q- U( d按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
8 w5 k6 {/ J' |6 p) k' x5 n# V: v注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。1 h9 D1 ]3 h: r/ E7 A
加载yxgj.vlx,命令也是yxgj
3 ^0 f: C+ g; j: Y1 o
! `5 `8 v2 x; a以下为操作过程的文本窗口:
8 t$ v$ j! D9 ^命令: yxgj8 ]8 t: y$ ?+ x2 n( T' h
AB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816
+ l3 z) E" ]( @( {( X& M4 }/ n' [确定A点:int) r7 Q$ n/ q! q; {2 ]

3 C$ m3 n# A. E" ^3 ~确定B点:int! _4 C$ M7 C) E1 V- E$ m
9 d0 G& U5 y1 ?$ w, V
确定C点:int1 I# Q8 O( C* |9 p5 `
9 b$ l. c' `/ t- ^7 `* Y
输入圆半径:int6 R/ A% U' {( }  \  E: |
于  指定第二点: int. ]3 }  B9 f8 u6 D2 k- g& p: G

% s# F  h5 ~; ~8 iGrade(确定计算等级)<12>:
& l/ M" n# p" h, B: C, }# ]
/ j$ r* U# `+ D: i2 y) r/ b[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?
# j) i+ D/ J) v% @* I; N9 e  f6 [1 N2 k0 Q0 y, I& Z9 ~
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!
, O& L6 m. J& T& P# J1 k# }1 g; r, h3 Y( C, M' \
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!
7 a9 b, M! U/ m' ?) y( V+ {) R' i9 {. M; M/ {4 \2 p8 y0 @. y
真想得到这个赏金呀!可是.......哎......还没有学到家呀+ B1 H6 E/ c1 ?% T! T# R2 A

4 y! u# L4 ^( T* [# k
8 c1 O8 Z  l+ [+ a- V5 h& ^[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表( X, w0 ]6 b) O) T9 B
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
' X$ r+ k8 g* x/ ?" S5 {1 H* d按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。7 }$ n8 a; L3 q5 f) I
注意捕捉 ...

$ L6 T- m  ?: x, X" J: f/ U        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。' m" K# W- o2 [4 Q# {1 ^( W  O0 u1 @
        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。6 f4 w& V5 }) b0 k! J' f' M- n
        看来这个维币应该奖给moonguy兄了。
9 j, u! ]: c. c. Q        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。
3 _# A; r& e% D: S8 A* ^) i& d  z( t
- Y4 ?- _& @8 Y4 D8 D) f) X9 f* F% ^0 h[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!
  E( s2 o8 w+ U4 J% t而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表# }$ P; X7 Q2 w& z3 h

# |' p& }  q( V8 z        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。+ Y8 O* ^8 c& d- _0 K* \
       ...
4 g0 Q7 \) `5 k8 K% J0 z* ^
) ^6 N! V# ~+ G: h4 R! i
我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
  e3 p+ I9 O" G: ?$ ^5 i% h: L/ b! o: F2 d/ ^
这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
( ^6 N* o+ S5 C
3 |% C1 B* T! R7 x9 J9 z我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
2 ~% Q$ b* Y  o, B) x+ Y * S' ~5 @+ R- G/ G

/ e$ V6 L) c; r; ~. M( I7 G * v! C% L* @% t; k% S" U
再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。+ T. a, O+ V2 D2 m
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
. K/ Z; b3 }+ M  ~4 Y7 @$ `' B3 [: F, V3 W' m7 R
[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

' Y% j: R, X0 a2 w9 ?! c) r' U但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。& k9 o, r. y" b0 B; ]- k! g

) F8 |/ B% b+ ]; L同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。
5 z/ ]- C: x7 m8 w                                                ——blackbird
) ~  o. r- p6 Q- P0 u " i8 c) j# J( f, T, z+ ]
该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
2 X* P6 n$ m) D$ L2 x  x希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!3 A# c* H6 G6 a' A' _

' J4 @9 n- G) j, d[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
, V+ @1 s1 J- ^0 ?( ^以下是用VBA求解的过程。5 d3 G2 d5 D9 x* B& o
附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图
/ p; D0 k" ~! h5 i

( ]8 `5 J* R- s! `Sub NT()
# r( o* x3 m) y0 e& t9 T/ ^    On Error GoTo 10 '发生错误时退出程序) h- g; S0 V/ L
   
; D  I  C+ u; G, ~    Dim A As Variant 'A点坐标8 m" I0 U" I1 [' X9 [' A% p
    Dim C As Variant 'C点坐标
3 [; v9 u% i! u0 U& p    Dim B(2) As Double 'B点坐标1 t# {: f4 K3 |$ Z: e5 j
    Dim P1 As Variant '直线12起点坐标
$ D* H+ h4 O" `' b# |- B    Dim P2(2) As Double '直线12端点坐标
! n; B  x/ t, k0 c- L9 p' E0 y    Dim R As Double '圆Y半径& q* E# j0 R; U. B4 F' Z3 I- n
    Dim LineAC As AcadLine '直线AC) l0 F+ _9 z  J1 |  ?4 r
    Dim Y As AcadCircle '圆Y
2 G5 W' E  ^+ k0 L3 ]1 X    Dim OC As Double 'C点到直线AB中点的高( |+ B! b3 ]; R9 n8 U0 X8 Y
    Dim AB As Double '直线AB长度
& k. d. Z2 Y3 v: a0 H    Dim M1 As Double '迭代运算左边界点的横坐标$ L( r: R! w: q5 w
    Dim M2 As Double '迭代运算右边界点的横坐标
  d" o9 B; @% E! X# j- t    Dim Yc(2) As Double '题目中拉伸点的坐标
: P9 s* Y% I' ^    Dim X As Double '圆Y与直线AB交点的横坐标
2 \% F& Z. Q, _    Dim X2 As Double '圆Y与直线AB交点的横坐标
% {" ~, B8 _$ a0 n9 T" l    Dim S As Long '曲线拟合点数量(3~32767)
6 E4 w4 U6 J% c6 `5 w/ t5 A    Dim K() As Double '拟合点坐标8 `1 K  Q6 S/ L# Y& O
    Dim St(2) As Double '曲线起点切向1 V) y! e$ k7 r0 f: @, c) ]" ?
    Dim Et(2) As Double '曲线端点切向
' M4 I9 c1 M0 J3 q    Dim I As Long '循环变量  k% _2 w: F" {/ A( Y
   
8 g  R3 Q3 ]' F' \    With ThisDrawing+ Q; ]1 m* I& c0 ^  z7 {' n
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
8 q! Z/ J( |% u9 L4 [4 U        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
+ }1 c1 \  h* K9 f2 e            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")0 r" @: f/ \4 d) @$ d& D
            If C(0) > A(0) And C(1) > A(1) Then Exit Do8 ^  G  {( v6 q$ i; @& e; n- _0 T
        Loop9 G7 B6 h- D, H% S& }
        OC = C(1) - A(1) '计算B点坐标, `; [: R: [0 g6 _1 y8 ?
        AB = 2# * (C(0) - A(0))
0 C+ U8 N0 f0 I- V6 L0 |        B(0) = A(0) + AB
8 u; a3 M: H9 h        B(1) = A(1)
( b6 v6 _; X6 `, ]: z3 x+ u        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线: y; g0 }# L  ~' Q2 }& R
        .ModelSpace.AddLine A, B '画AB直线
  b6 J) X; p$ j2 T        .ModelSpace.AddLine B, C '画BC直线
# a9 w  i+ v' o$ G6 e5 T0 h        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。
; V# Z3 k8 j; R9 w8 f            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")' S" u4 {" F% X; b4 s" _
            If R < OC And R > 0 Then Exit Do
0 G9 L2 j2 q- K5 A7 x        Loop) A5 o' y5 U* p( h& s; u0 C
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y  b5 ~! r7 z! \+ u
        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点9 J1 y1 @7 K4 e0 d
        P1(1) = C(1) '计算直线12起端点坐标7 y0 B9 [' z: V& R6 y9 O7 }
        P2(0) = P1(0)- M3 U" k" j3 a2 ^, B$ x
        P2(1) = A(1)
/ h$ f  W" D- f* g; P4 P4 t        .ModelSpace.AddLine P1, P2 '画直线122 ]9 q. \' O; Q" a9 W/ S- ?) `  y
        9 m3 v% h/ k$ h; Z$ @
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界8 u; x5 ]9 {6 V
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界
* K" g% o' X& j6 k: n  _1 v        Yc(1) = A(1) '拉伸点纵坐标与A点相同
: n+ O( G! a1 Y2 o        Do '迭代运算& \% @2 _: m3 X6 _5 d: ?$ E
            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标5 l/ R/ P  Y% ?6 @* p# J* @# L) L
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)" p& s- [1 J; x; j
            If X = P1(0) Then '交点与直线12重合,结束运算
! c* X# E0 L- o5 }' H+ K                Exit Do
9 R) T9 |* K" ]* x            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算
4 D4 c. r2 g7 y3 G6 w7 ~                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果  v  ~% `( r% N1 H+ h/ L
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)& F: y1 n9 O4 }& a1 J* p" P
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
* b& ^7 E2 J6 X; a2 O                Exit Do
- d  A/ f, G; _* I6 J            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算0 {# q/ }8 r7 p
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
7 K5 x( |6 l& n$ q                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
# @) Z) `: F" X5 {- L% o4 f                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
' T; s4 k( d# W' ]+ K                Exit Do
" y. U7 N# N' [7 r5 j            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
" k; M! d5 |) k                M1 = Yc(0)
! ^: W9 B# i) o6 T            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
7 {8 T, w& O$ e0 R                M2 = Yc(0)$ w6 M& y9 v7 ~" X" C+ f3 ~- x
            End If. i7 X6 n  Q3 K2 Y
        Loop
, f. e: Z" S% n1 P; o8 o        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
: W, y! u8 _8 J9 \        Y.Center = Yc '按计算结果移动圆Y
2 `5 V6 |3 q1 M) s( u- w        , i' y7 Q$ ]; Z3 c8 @+ m
        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。
+ C3 _2 d$ b$ s% m7 a- ^/ L            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")
9 B2 ~8 K' p+ @6 A5 X9 k3 {- L            If S > 2 Then Exit Do
3 c6 D7 j- E- K) k: X6 Q* `        Loop
2 v" _7 y( E7 K$ t4 V7 D0 j        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界: P8 d7 W6 o* G
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标
, [$ |6 z, a3 O7 t            Yc(0) = A(0) + I / (S - 1) * AB1 |- L! d& y6 v/ n/ o5 s4 M
            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)& {* m' t; s3 M' c9 @, j0 s$ h
            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)
; `- X1 m( X7 k% Z5 V5 }        Next
/ _0 X1 Q1 F* E  D1 ?        St(0) = 1 '曲线起点切向2 q$ Q2 o8 r, e7 w& e
        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)))
2 ~: t8 Y4 J- E, t" @1 t+ u( b  X        Et(0) = 1 '曲线端点切向
& i* l9 _5 k0 S8 b( V% H        Et(1) = -St(1)
1 t& W; ~; F2 `. A7 C# |! i! j        .ModelSpace.AddSpline K, St, Et '画样条曲线7 X; H8 B3 I3 u6 M6 A9 ?
    End With
# X& `; Y/ P. S' g, C7 K- n10- u! V0 X% V1 w0 @
End Sub
' H9 w/ P& d: u& r' {# M, X$ t( O; O$ Z$ o2 h3 J" q4 W" P5 [! j- V
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
6 v: [$ b. _' w- p可应用excel序列功能,非常方便,具体步骤看excel压缩文件。. N1 `% p& {4 Y0 h6 T1 E
5 g$ u2 t3 o2 R6 j
[ 本帖最后由 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 y) [; M' \0 m# i+ s5 O' p
        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。  l. g1 y8 X5 w" }' j9 y; Z
        原贴已经关闭了,就发在这里吧。
9 O9 P! W& `1 @# C+ x
5 h2 r' `! _( H: K4 ?* j' x[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

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

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