QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
3天前
查看: 7334|回复: 25
收起左侧

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
- i# |7 N% @+ N$ q2 r如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B3 k6 h' U5 K9 W9 |& ^% O
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
4 }- G) p+ }3 E* M: P) c+ G5 N" m: T/ C1 P# o+ A- \  E
8 K! E3 S9 @  w
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀............." l0 f7 E& D( A2 n% q1 m0 ?
各点不是可以直接交出吗..........; e3 S- A/ x0 K$ F
楼主要"精确"........7 D' d  ?, w$ n
曲线总是近似的呀................# M' e. U* Q3 _0 {3 \

8 Z, o6 i6 h; m- H% ^* T[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表. u8 ~3 w- B. `: s% e2 j
求这样的曲线有嘛意义呀.............
: G/ R+ S( r7 [. q8 C各点不是可以直接交出吗..........9 ^6 ~) [# V. Y# v! E! M6 X
楼主要"精确"........
9 r8 N7 w. o, {曲线总是近似的呀................

( U6 N/ \; @8 d5 x- m求解CAD难题简化
; f) O4 f" h. j  O3 |3 |9 K4 q  U  ?( l4 d" ^( t
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
1 \- c) R+ f, s1 I% \3 f9 ~按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
8 B9 a, {7 U* ^& z8 R注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。! N' M" y4 D% B7 n
加载yxgj.vlx,命令也是yxgj
" L/ C4 c  ^7 f" @$ y) r' P1 L
$ M6 D0 z& e7 E5 A+ S以下为操作过程的文本窗口:- k! m, q1 Z* `! x8 R
命令: yxgj
# U9 A$ j7 j# jAB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816& W, K4 E1 j, f2 Y, ~7 S
确定A点:int
! q' N: a8 \6 Y) P" W) |/ O( x3 U1 M/ x7 E5 @& f" ~$ C! W
确定B点:int/ J4 o2 S. `% Q% N* G

1 |- M5 c; h! J0 e确定C点:int4 y7 @( ~' [+ |: p/ l' o
2 h1 L6 v# \! h3 m- E7 X( p% R# m
输入圆半径:int
2 \% y& k# O' R' y- O于  指定第二点: int; D7 w  R( L: J9 @$ l9 E

) t' T  N& K% M2 s3 t% w! x* nGrade(确定计算等级)<12>:1 M( X, p) X3 i* A

9 A) p  P# \9 @! G8 b2 B+ [+ 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% f. L; [2 w/ r' U+ \$ _4 i% z4 t9 _6 J
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!
( G2 G& f8 W6 E4 x
) D, D) w0 _: y+ a+ B呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!7 D# \% J6 R! M8 ]* C& ~8 F

: z% f: E$ e2 I3 O% x真想得到这个赏金呀!可是.......哎......还没有学到家呀
. z2 G1 _# h, H5 S! I& ?

8 h( d* _% P! e4 Y) K0 R5 e
' e( w# i* s* Y[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表
. R7 ?4 w3 p# k2 S; w楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。3 h: V3 J' t- P  o
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
! \! d' a' H5 c2 b2 Z+ M注意捕捉 ...

. `' L4 G9 ^9 T* v( ~0 E# Y        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
3 T, K/ ]0 A/ ?; o; k) o# I        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。# k, x% h( [; n, b) Y
        看来这个维币应该奖给moonguy兄了。- p) i; g, d( Y! z/ L+ }
        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。
' n1 h) N& [! {8 I% @' F7 v7 p3 H  g9 @. x+ |
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!; E6 N' t  d6 z9 L7 b% _
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表" l/ O8 Z* r( A$ D1 Y2 N

# o# E. d3 o3 g+ g        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
( }3 _3 w' [2 Z, i       ...
, x" y" ]) W2 F7 ^! E) a

1 r; D9 a+ F0 o6 B6 h1 G, `我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。  V$ L2 y" ]: _3 c- J" |

7 z$ Q( M1 J  ~0 T' r5 O7 J这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
( J, @  @  R) f& K- W) [6 D
0 l% Z1 S$ f, o9 w+ _4 X5 M我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。. ^5 B! ?7 P% R- F) G: o

3 u; q+ T& H3 o9 i 1 f  y/ H* [, m0 z9 J- [
2 O3 [7 P* W! W" z! U" l
再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。
: W! l, A2 B! T6 z可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。3 p9 L+ c8 u% G
1 m; ?# j: L3 u. S: u
[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

& H5 a8 q7 B3 F# Y; U[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
& m4 @: c$ [1 Y- z3 \7 Q5 \以下是用VBA求解的过程。4 C1 B3 u9 m' B( N
附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图
; A6 n. y5 G1 c, g& U" U  _7 N

5 i) B- n. L1 b$ J7 `  y( O. ASub NT()
" [/ O, _3 T* f1 U; _    On Error GoTo 10 '发生错误时退出程序
$ ~6 @& p* w9 ]/ \* W1 q   
* d7 t+ @" A* j8 V! B    Dim A As Variant 'A点坐标" P4 |* G  k1 B3 o) q8 l- h
    Dim C As Variant 'C点坐标
$ G7 q& F# j% U  N" e# O    Dim B(2) As Double 'B点坐标1 l: V* T, }5 Q$ v2 R; m4 v
    Dim P1 As Variant '直线12起点坐标
9 l" O" T' W2 H: I    Dim P2(2) As Double '直线12端点坐标, V# Z0 C1 K* s: n, _" ~
    Dim R As Double '圆Y半径
/ C% f" k: V) I6 n6 r) T    Dim LineAC As AcadLine '直线AC! _2 e; g  n4 v1 |5 [  S. R
    Dim Y As AcadCircle '圆Y
! v* V, t! |4 l& z" j    Dim OC As Double 'C点到直线AB中点的高
: `5 K9 _4 |+ A% f3 P; j  t& T! |    Dim AB As Double '直线AB长度9 y; O) ?3 `; {0 Z
    Dim M1 As Double '迭代运算左边界点的横坐标, M) x, @" \$ h# o
    Dim M2 As Double '迭代运算右边界点的横坐标
9 t2 i* X% }" i    Dim Yc(2) As Double '题目中拉伸点的坐标  W' z+ |& G; J
    Dim X As Double '圆Y与直线AB交点的横坐标/ ?# ]+ ?( i0 R1 o/ s& M4 M
    Dim X2 As Double '圆Y与直线AB交点的横坐标0 l, z- L% [, z9 ^, T
    Dim S As Long '曲线拟合点数量(3~32767)
# R/ x- W6 t& l  j' }    Dim K() As Double '拟合点坐标8 E* Q3 O* R1 D5 u7 z" I
    Dim St(2) As Double '曲线起点切向! r. E: ^7 l6 U
    Dim Et(2) As Double '曲线端点切向3 g* Q1 }6 m9 g- x6 i  P4 n
    Dim I As Long '循环变量
0 b) W. Y1 |  t   
+ t+ m6 u% g* b: n- G. Y+ h& M+ J& t7 R9 f    With ThisDrawing
1 f3 G& F& b5 o& k7 r        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
1 ?1 m- O0 k, [( ^; g  t5 T        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。3 \3 m! q6 s" o3 d
            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")) ]& L" V; J9 }2 @6 y) _
            If C(0) > A(0) And C(1) > A(1) Then Exit Do- X1 A8 q3 o6 y6 d9 F3 |, T. \; B6 [
        Loop
6 n- [0 o6 `: q: q+ V        OC = C(1) - A(1) '计算B点坐标
# z  i& k' \% R9 k. N+ I        AB = 2# * (C(0) - A(0))- i" I+ n# b9 t
        B(0) = A(0) + AB: \1 d& [3 a& ?& b1 Z  o
        B(1) = A(1)& b8 \3 S" ^3 Q/ u3 j
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线
% [% @$ y  N$ S  _5 K( i& v1 B        .ModelSpace.AddLine A, B '画AB直线4 v7 P9 [$ R$ D, D
        .ModelSpace.AddLine B, C '画BC直线
* J* U8 K! J$ z+ \* P* T        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。' r+ }' H- g( _( k8 W9 Y0 o& f
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")6 G* \, a/ D8 K% i$ {' Z$ M  [# R
            If R < OC And R > 0 Then Exit Do
( A4 X! d; W; [2 s        Loop
7 S5 S+ L' E8 D+ p        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
# s  g9 s6 H& w" p1 D4 l& Y- S        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点7 e: ^* a8 A' {; q5 P. T1 V4 ^) m
        P1(1) = C(1) '计算直线12起端点坐标
) F: C; T9 y/ ]; u: I9 ?        P2(0) = P1(0)6 x! h3 ]+ W' o. P! D" ]4 ?! b
        P2(1) = A(1)3 _- U: {6 j$ D* J1 S0 i
        .ModelSpace.AddLine P1, P2 '画直线12
6 f9 s$ G+ ^5 g$ P" [/ e        
* \* r1 C" l) ^& S* d9 V        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界. }, p, ?" g& _
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界
8 @6 D9 R. D- v' k* z        Yc(1) = A(1) '拉伸点纵坐标与A点相同
2 J1 ^% |0 o+ @- \# {2 q        Do '迭代运算
! N! M/ ^1 e5 S. a7 R: Y$ a; `+ y            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标
* V% w; ^* A% o( a' x            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)2 z4 m! v* q, z$ W' ~. a
            If X = P1(0) Then '交点与直线12重合,结束运算- M$ i9 j" n( F2 }4 A1 v: q( Q+ [2 M
                Exit Do+ }7 X; m% T# z- X6 [" b  d4 l
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算
! n1 r/ }4 r7 o2 K4 M2 L1 Z                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果% S& b4 v0 g/ I6 I0 X6 ~. S
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)2 V7 j' F: ]  X" K$ ?9 |, R
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
# `- k* l5 |5 L3 |, D& s                Exit Do# |% j% _' x1 u: x- x- N0 e1 J- F( I
            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算
& v8 A. s1 |5 d+ _7 t/ j3 {                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果4 c1 v$ u8 l' \' h
                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
$ R: W# f) s# _6 V2 R  C: n; Y8 `                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
$ V: n( p2 `  X) d5 E                Exit Do& r1 |# ^+ E6 f$ O. v8 m8 u7 f. _
            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
- C" V/ w6 [6 W1 X1 c1 c  H                M1 = Yc(0)
( C) e& j; r, M2 M. a            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
9 x  j/ s$ A8 X; [! w6 v                M2 = Yc(0)6 f# S- j4 E% c/ d3 ?3 {4 Z6 f
            End If
+ @4 k: z" D8 p3 G- D: u        Loop
! E5 G/ H; d8 x5 S  j$ _        LineAC.StartPoint = Yc '按计算结果移动直线AC起点+ a# h. n  g% b( g( B5 B1 c
        Y.Center = Yc '按计算结果移动圆Y
2 j/ I6 B! M5 }9 F* W. m        
2 T+ Z9 ^, E: M9 ^, o. K# w        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。" K5 t0 |$ N( }+ S; d% t
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")
$ b) k/ U6 r8 K& r: P" t, Y7 b            If S > 2 Then Exit Do% Y3 x. t; l2 S  H2 N
        Loop
- W% a% W8 U5 ~+ k5 H        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界
4 c0 E7 S/ F% |% M# S1 l        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标
( M3 W- l) w  P8 ^            Yc(0) = A(0) + I / (S - 1) * AB: @& G4 u" B9 n  Y
            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)
1 {* g- Y- S3 O: X" q            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)
  R& T$ ?; A: D$ A/ R        Next
4 o% m2 y. X) U) V        St(0) = 1 '曲线起点切向) k& E8 `- S# u; D6 F" x' |
        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)))+ Z  c* Q& y) H. M( C% e
        Et(0) = 1 '曲线端点切向
( ~4 f/ U$ g% K        Et(1) = -St(1)3 b; w7 L- F7 s
        .ModelSpace.AddSpline K, St, Et '画样条曲线
8 }1 k: T- v% ]( Y  w/ g$ M    End With
: t; N/ Q4 z! S/ X! g/ S, D10: o2 m) ]. g+ I
End Sub
5 D1 `" P% J4 O1 x) c3 m4 g) }# x9 a8 I3 e
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。) S* f. S) Q8 L3 r2 @  S# G
可应用excel序列功能,非常方便,具体步骤看excel压缩文件。0 L! L! k( U, j

! K1 H& M* _: z1 ~[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。) A) M+ Z7 c" J+ D" Z# s* F
        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
) K2 s* t7 S5 \        原贴已经关闭了,就发在这里吧。& P+ ?' b# E- v+ u
# B+ ?" u: c7 k: Y9 w/ B' Q
[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

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

3 C; h9 K- D$ w* w也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家5 h  \4 l7 M+ G9 [: f
请看新贴:一种新方法“精确选点法”解CAD难题
& X1 r# }' e& v# }0 chttp://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题4 q3 O. P; @2 W# n  }; X; h
我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢' B. v2 H0 c3 G- V: M
解题步骤请看 23 楼的链接
4 Q+ j1 y* l) J% j" l尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为50000000
* t4 v' Z$ D; d$ k" e
附图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 )

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