QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 7189|回复: 25
收起左侧

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
9 J1 _2 l6 [; _. m如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B3 }( y  r; [& _' E! q+ z2 T
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
3 L/ Y& ?/ N2 q$ h6 o1 o& f/ W) Y/ R: G) r7 B! E
  A9 V; p! J$ y. S% s' ~1 [
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............
, G: r6 R, ]0 t$ |9 C0 P各点不是可以直接交出吗..........! E! {$ [: q! v; c  _; @7 d
楼主要"精确"........
2 c4 T- N1 v- u+ e7 o- [曲线总是近似的呀................
: n  P1 v+ i3 F6 c, l. R* C- D
2 _  D7 q2 O4 K) ~" c! X. w3 `[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表) ?8 m! p% t5 Q6 S# S* p; P# h3 R* a
求这样的曲线有嘛意义呀.............
* L: L. U! T) R1 |! ]- R8 I6 M" D各点不是可以直接交出吗..........! s# c% [+ ]1 R6 z
楼主要"精确"........
/ p1 x: r5 a& K3 h& \* {% b曲线总是近似的呀................
6 _" I1 }* o: x0 {5 y
求解CAD难题简化
* B, S  J4 ~5 {9 |' e
# V% I0 M5 u: ][ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。; Q/ n( t4 {; x5 d' p6 R
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
$ J$ s4 n, c' g/ S/ a: C9 E) G注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
/ L, o. a5 L+ f加载yxgj.vlx,命令也是yxgj3 N1 p: _( V' G) K7 L
9 \5 {* v3 g2 }0 o* s. i
以下为操作过程的文本窗口:# x7 H! t$ q' S8 ?" }
命令: yxgj) W6 R4 c, o  E* `  \  g; q
AB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 12188167 D; R  ]7 a3 F% f( o" U3 r
确定A点:int
, @8 `3 O% _- `: k, w7 @* W; A9 t6 u. I: R+ Z
确定B点:int
, _4 r6 L2 J9 q( Z% h4 w5 x: L) s+ @
确定C点:int
1 @. x  n+ w3 T( _5 d& H8 j/ r- |) z; j- y9 i$ p2 H7 D, G( c3 u
输入圆半径:int, @6 }  T0 U% A# @
于  指定第二点: int
2 l* i3 e! K! S3 D2 F6 i7 y9 H( b. y4 |, X% W0 U" c+ C
Grade(确定计算等级)<12>:
7 _1 g% l% x& p" Y7 w+ L& k
! D6 R. F$ N! t. C& G" G" E2 d- [5 W$ Z[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?* M& `' D' u- Q1 p8 l/ N6 a4 v! a
7 j) F; V5 A$ h3 E# W, _
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!! N6 X- y+ N9 \; r5 o  a
5 U* V2 C6 Q8 z" n* r
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!
* k5 U3 V" K2 p+ E$ ]
/ ?6 k- u1 {) y2 m% {真想得到这个赏金呀!可是.......哎......还没有学到家呀4 G: I: C. H8 F; @) v4 s. z

3 W/ J- \9 Z' c( t" S' D4 L) T
& h# }1 b+ V8 v$ a& Q[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表
: K0 `6 H2 E5 B  P楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。* m; u7 t& j: n& E, \
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。. Z! q1 l+ i3 D# @7 J
注意捕捉 ...

0 i- `& o* G6 M+ V( B! Q8 H        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
4 W5 }& |3 |  N. ]- t6 F$ {        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。
' M. v# m+ _6 e# s# ~4 G" J. h9 y        看来这个维币应该奖给moonguy兄了。
- Q6 h' `7 U8 t        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。2 p$ v8 s7 L' j; i

6 ?4 `" [! f0 X( L9 L[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!& X" c' w7 L& n3 R* M# D3 @
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表3 q2 v4 ]% |, O2 t& k

: I& x6 ]) V' h7 U7 e& s4 \; Y6 p        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。& e+ T7 u+ @  K/ D  d- g; c/ k
       ...
0 H, M+ |, q  X- x& f0 {
4 a# O+ W4 g) s8 s9 `
我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
7 S  v6 \8 n1 ?4 ]3 J: v; \2 h6 J" \3 r
这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
- }7 C+ F/ C0 B/ c: N/ V2 @1 z
' y+ C" G' z# x+ h3 l6 J% Z我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
7 c! E+ h6 \! t% e, p, c* T + D& H4 N6 O$ A6 d8 w: i

+ o: D1 M: J7 {( ^7 f# V, z
6 k6 u2 k) i; g5 S7 a. G再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。! I- X( X4 r2 I5 ^9 g- `6 ~
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。5 y* e7 a' h. i' F$ h$ p
, O5 B' v2 ^( n7 p
[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

, X; f5 i: z* [6 F% R. X( H但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
8 q! K% B! n7 ]" d1 O- D$ E# v& [: m4 M  X8 P. t% F" V( s8 R  E6 F
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。9 p: s# F8 |* A
                                                ——blackbird
) \4 D& l1 C1 t4 b
5 _6 F6 k* g  T" W, X该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。1 r3 I/ l8 b% J! s; D9 S
希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!
/ l' ?+ ]8 G' q+ g2 q' F$ K! _$ L  C8 A" Y
[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
( D  y1 `! G* l/ a2 N' A9 Z) p以下是用VBA求解的过程。! x8 M7 D% M7 p& t
附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

  \3 B" g6 I2 p' P6 R2 m$ _6 U$ A$ u4 W5 v' }: ]: t
Sub NT(), h2 L3 c6 H0 h$ ~0 G2 c
    On Error GoTo 10 '发生错误时退出程序
) v7 p" o3 X( X! N    ' M/ \0 b! w: ]8 U
    Dim A As Variant 'A点坐标$ _5 L7 t0 O+ \$ m& w; }. m
    Dim C As Variant 'C点坐标
4 O& a; }3 R! z    Dim B(2) As Double 'B点坐标
( O4 J6 j, U3 [/ S0 H5 \' k# ~    Dim P1 As Variant '直线12起点坐标
" N4 d3 }1 L1 }2 n1 s    Dim P2(2) As Double '直线12端点坐标4 M$ n- I7 d8 e, I1 N( K
    Dim R As Double '圆Y半径
' ]0 B' t0 M  k* D" @( z: d8 A    Dim LineAC As AcadLine '直线AC
# i8 ~* {  ~: @2 R8 b6 e: R0 l    Dim Y As AcadCircle '圆Y# @$ `% u/ P. q% I2 [; y
    Dim OC As Double 'C点到直线AB中点的高  y( m! R5 m! F+ e% i: e. p/ |
    Dim AB As Double '直线AB长度; t! x2 B4 i: `
    Dim M1 As Double '迭代运算左边界点的横坐标
. o, Z9 G$ ]$ G; K' V- k    Dim M2 As Double '迭代运算右边界点的横坐标
% i( N$ `# j  H( u* D3 `    Dim Yc(2) As Double '题目中拉伸点的坐标* K1 e, C8 V; Y. M7 Z  _
    Dim X As Double '圆Y与直线AB交点的横坐标
5 K5 I9 ^' G: x5 U" W# M9 r    Dim X2 As Double '圆Y与直线AB交点的横坐标% Y9 w% {+ V8 \3 M8 i
    Dim S As Long '曲线拟合点数量(3~32767)
5 g8 z' ]' w5 |; K, ^9 q    Dim K() As Double '拟合点坐标  _* v- U9 `! t% i, @" Z8 T. o7 O
    Dim St(2) As Double '曲线起点切向
- v$ D4 A# q5 X7 c* T0 p4 i6 ?    Dim Et(2) As Double '曲线端点切向
0 y% R& x$ x1 e" |; P    Dim I As Long '循环变量! O. \& |" U6 V3 a; x
   
" U' n$ D3 s% O/ O9 T" x    With ThisDrawing
# Y  k, M) f* o  x1 X* j        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置  Q6 D4 u: b2 N
        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。# l% T/ l3 ?, e# Y
            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")" [0 A# K2 [: X  c8 I* |4 j
            If C(0) > A(0) And C(1) > A(1) Then Exit Do
( A' S" b. _& X! N        Loop" E  f% z* N# l2 W' T1 y" s- q7 `( `
        OC = C(1) - A(1) '计算B点坐标
; P6 s2 r4 c# v        AB = 2# * (C(0) - A(0))
( y. O# |# |% ]- W7 r1 m        B(0) = A(0) + AB
% z$ w; f% z2 ]+ ~, G, K- H; w1 l        B(1) = A(1)
1 B" q. K# T7 Y) H- B3 \8 b        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线4 j/ \/ s- r; e( |
        .ModelSpace.AddLine A, B '画AB直线# O4 g) y4 z8 N9 D" h
        .ModelSpace.AddLine B, C '画BC直线3 g. x1 L9 U6 i2 O1 V) j
        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。
, J+ N9 r4 J& U4 c+ }" A, ^            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
) F! C" T2 Y8 f1 M+ m6 _  O# [# }            If R < OC And R > 0 Then Exit Do
) a; `/ |0 @# j% b8 I; I        Loop' y' q4 c8 s' g" b* ]$ z# w+ k9 f! ^
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
0 T0 W8 E# O# e, z        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点: o( @6 ?; A# F5 e5 \' z
        P1(1) = C(1) '计算直线12起端点坐标3 l& P2 P4 y- e$ v, B  X
        P2(0) = P1(0)
( X2 ~$ ]; }+ b" I! w        P2(1) = A(1)
; n, _/ t# G8 t4 r5 A' p' G' W        .ModelSpace.AddLine P1, P2 '画直线12- m8 n7 g5 x) r  ~, ?
        
- s$ S/ W: P# F) O1 [        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界
. i) F. K; v1 [% T) N        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界1 K0 q2 H. s$ M8 f; K* ?
        Yc(1) = A(1) '拉伸点纵坐标与A点相同2 A( R3 }! x9 I
        Do '迭代运算
8 N* {7 j6 T$ j+ D) a  G            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标6 v" B. J" Q4 U7 y4 c0 s  J. \
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2)9 w" x9 w$ d$ R' o
            If X = P1(0) Then '交点与直线12重合,结束运算
" h; `# Z3 G: S                Exit Do/ l' p2 k5 Q" J: D+ P/ {6 Q% U) |
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算2 i* [: w. s$ o; e4 o4 E
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果0 w( m) S4 m4 k5 U0 m- O' b
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
8 v! I* X+ @2 J3 V5 j5 T                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M20 T- c# T' e" }
                Exit Do
. a5 N3 P9 _5 e9 n: t0 N            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算( u) _! G- q# ]9 V# o( X5 h. `. s
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
0 G3 b9 d% m; j: ?' M                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)+ o0 |& o/ O- j4 h  [- U
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M16 \" w, v* T1 Z
                Exit Do
' L0 j% b6 H4 |; D; B4 p            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
3 o) ^* X+ n3 A# @0 B8 V# s                M1 = Yc(0)
3 s1 U+ }/ i& n. N  R4 d            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算( W" I2 i$ ]7 ^  y# B
                M2 = Yc(0)
* K( y- @* Z% b# u  _            End If
1 a  h9 G2 o# Z9 Y/ P% N        Loop
/ ]( z6 P5 v5 t/ H        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
: s* C0 }: H: i$ b  ]        Y.Center = Yc '按计算结果移动圆Y% z1 o! K' g% a$ J' L! ~, Z
        % `) R; g5 n4 ?* g
        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。
0 {+ H3 G- }  D+ {8 V/ B- J) b            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")$ P7 K+ i$ `; Y+ m
            If S > 2 Then Exit Do! y# V$ h3 A" g0 X
        Loop0 Q2 y  x1 c: M& z
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界3 T) B6 T: Y- O6 n
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标' t8 g3 B6 J1 x; J2 n3 O5 n
            Yc(0) = A(0) + I / (S - 1) * AB
' G: k* \" C0 A6 q6 I- l. 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)
! e' n$ F$ T( k) ^" K            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)
; c, d1 t. r7 r" N( O% L        Next
$ d9 C! j- b  S- Q- _; N6 p        St(0) = 1 '曲线起点切向# b, a! d, H! m6 \* u6 G
        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)))
, u3 D) A- \. N& e' b# O        Et(0) = 1 '曲线端点切向& [6 v& b# d) y0 a
        Et(1) = -St(1)! [; l. [/ d$ N
        .ModelSpace.AddSpline K, St, Et '画样条曲线1 M, E+ K0 r+ m! {+ g5 d) i2 M; M& B
    End With8 |: Y3 S/ {* N+ a4 p
10/ ^9 ], C7 X) n
End Sub
- f7 i% ?3 O: d2 }4 X9 @# B. ^+ R2 a+ D9 e7 ^8 x: ~5 y
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
2 U/ j, m% ^2 k可应用excel序列功能,非常方便,具体步骤看excel压缩文件。
! @3 {: i  K3 U, F2 h7 y% K7 [; ]- V/ `, |6 s+ M3 X3 `
[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。
$ I' X5 S( L$ S        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
. k. g; W' a, _; J" X( K  I        原贴已经关闭了,就发在这里吧。4 h0 |9 T* l, p+ O. V
+ @- g2 M6 m$ b2 T) A. Z$ v6 l! C
[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

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

/ W0 [9 H/ K) \. d; r也希望以后有误会的时候,先通过短消息沟通解决,让论坛能有一个畅所欲言的好气氛。
 楼主| 发表于 2007-1-16 14:29:37 | 显示全部楼层 来自: 中国广西南宁
     非常感谢各位对我的支持,现将我的成果展示给大家; j/ l- U( c6 Z# Z3 }. Q, Y3 u
请看新贴:一种新方法“精确选点法”解CAD难题
+ {% d" @% E3 p8 m3 nhttp://www.3dportal.cn/discuz/viewthread.php?tid=201404&extra=page%3D1
 楼主| 发表于 2007-1-20 16:35:58 | 显示全部楼层 来自: 中国广西钦州
21 楼的两道根据不完全边长画直角三角形的题
0 x9 ]  p6 k) W+ f7 [# z. J我采用精确选点法画出来了,算不算是CAD基本做图命令做出来的呢
9 r# x* {0 {% K* n4 {. Q解题步骤请看 23 楼的链接* j/ z* o! x  g/ C: e: ^; m
尺寸50放大后达到的精确度为50000000.00000000,(图上尺寸值在标注时由CAD自动生成,由于小数点后8位均为0,对齐标注显示为50000000
+ Q- c' w: d+ ?4 I7 Z2 {
附图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 )

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