QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线+ Z, v6 w7 W/ ~4 J/ M& G: |4 A; j
如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B  @; N7 A5 }. `4 Q; T' P
Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
' V; \& L& X# }7 y2 R' K) C
5 T6 ^) z. J, M' v1 [; S
; r/ G+ y9 e; \2 B[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............: F+ w. Q* C& ?
各点不是可以直接交出吗..........
2 a3 B# W' d% l5 P, ~: p楼主要"精确"........
. |9 l: v% y' z' O! f* s# s曲线总是近似的呀................
- E% ^. z3 C. J3 t: `  ?" ^" @, x* ]! ?5 T( C3 M$ y5 C1 M4 ?
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表; _' Y! x4 l5 d4 n& k
求这样的曲线有嘛意义呀.............
* X# y; a4 U: _7 e各点不是可以直接交出吗..........
0 Y0 [- q( D# v9 T0 w+ |楼主要"精确"........
5 b- H/ q& o* B% w, y曲线总是近似的呀................
; [" H- Y3 u# S2 H0 h" \6 Q2 K
求解CAD难题简化
4 `. x& M9 T$ U! q
  V7 ^: H/ E# \; I[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
2 U+ z2 K" H; f: |# M按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
8 h+ K" G- [2 _6 S- ]4 N% X4 P注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。
% [& g1 J- ]! x# ]加载yxgj.vlx,命令也是yxgj2 G1 O6 i6 I6 [5 M  ~8 Z) h

* A& ]' t( O! d% W! F以下为操作过程的文本窗口:
( J3 Z0 x- C( ^, A命令: yxgj
# L5 R& r* t% H. o0 HAB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816: I5 M$ T7 P2 {( U# O6 A
确定A点:int* a( D% A( o% Z" ]
7 q& W$ y1 |3 B7 W7 T: ?4 g0 g3 O
确定B点:int- ?  ^( O: [6 U0 I* `
0 \" ?3 _3 z' h+ A8 t
确定C点:int) S3 c4 N' b. G8 }7 ]

3 J; z: H& k* D; q输入圆半径:int. c4 h2 ~: Y- F1 _
于  指定第二点: int
8 i3 ?0 `5 i" R" N7 u- j. }" f! y, x. H) _, o; @: _
Grade(确定计算等级)<12>:/ j5 h7 u- F! m5 C. p& M
* w0 a. |5 m8 J7 l( y' r/ 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 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?
3 t: m9 g( Y  l+ H. D/ Q4 l2 B$ a# L  ^2 X! ^$ s+ o  p
CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!
% h+ U' r* \1 X+ {. F/ c' @* d# m2 ~% W( @! ^- N
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!) U( |8 [( A1 Z( [
0 F2 x2 D: V. y/ A! f" V
真想得到这个赏金呀!可是.......哎......还没有学到家呀
# V; z# U* e* A

6 u. ?: l6 N. C5 x$ b8 K
% r# |% E) l0 ]3 h" L+ s[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表7 K7 M3 g/ a1 F, z: |" c
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。  W8 `0 T9 f9 ]5 ~
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
% ^1 K% t! a6 K' |  g- s0 V) R/ k! a注意捕捉 ...

# R0 h8 }' C1 j6 s        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。/ ]+ ?2 D" J- n, T7 @% T
        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。( [0 c+ H% `; r: k
        看来这个维币应该奖给moonguy兄了。
# @, a/ b. k' ]' P* a; D) b' {        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。
4 P3 f8 U: v5 H5 ]8 ]" b" F2 P% u! N$ j( {6 M. G2 Y
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!+ f5 M: @' _; C, W3 ]7 z
而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
1 z- ~# C% z& |6 H. A: z9 C( ?! B4 W  N1 l
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。  F; s. S: \, j$ ^  T2 B2 E
       ...
# m3 x2 Y; l  i8 R" D* u' E

- k$ R# w4 y$ @4 Z' e我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。
9 y' E3 Y4 J2 K  k. a! r. w
4 ~: k+ u6 Z6 g5 P这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。+ x, u1 R" Z' H  m8 J5 _

' q1 w4 a0 |$ T6 p; `- f( K4 o我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
1 J* F8 i! }8 j) C
+ ?5 Z1 O' G  ?  Z" c
' t# L3 @2 E/ X# Z0 y. ^
! g6 c5 }" ]  I再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。
7 A% Y6 x9 I  y: E可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。* V! N4 w& ?  S) h: Y. x

8 _6 T5 ]/ A0 e* Z( v  m& z8 y- J[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

' k0 ^) M0 e" k# Q+ {; d看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。1 d+ _  K" n& c# s! \7 D

9 S1 H( W/ J+ H0 r( I[ 本帖最后由 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不能精确求解。. I; b1 ]: T8 R
故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。0 Z( C0 D' K5 L0 R( S+ L
0 n, i& X/ r. _; O5 r1 e0 h/ }
但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。/ {8 t- G1 J9 F

% y/ N6 w/ m' h, c" m; ^3 A- E3 h同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。, ~3 J+ |' `! A
                                                ——blackbird
  R( q: T& v3 i% w/ r
0 [9 U9 x1 h7 \" B* O; F0 f该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
$ D4 O) r5 p  s: Z& n# T& n希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!: ?- d+ y) T. X; N3 y% O0 p! d

" e# o. H. I$ e[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?% y+ s1 }2 u( W8 Z/ x- U2 P
以下是用VBA求解的过程。3 w, `3 U( w; g3 f
附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图
& K1 _+ q% o! m: A

. I  z# N- d2 p7 `Sub NT()  J' Q1 `% ^/ V
    On Error GoTo 10 '发生错误时退出程序
$ f7 ~4 o: c7 Z& I/ B" R    + P5 _3 `. M% U2 M/ q. t2 r" C
    Dim A As Variant 'A点坐标
/ W. t. I0 x2 P$ F( ^    Dim C As Variant 'C点坐标8 o; f1 o0 J; h8 \
    Dim B(2) As Double 'B点坐标
+ F( w3 c- F) M5 e" b* `    Dim P1 As Variant '直线12起点坐标0 e8 @# G$ Q8 i3 v' q/ W  z1 s( k, y
    Dim P2(2) As Double '直线12端点坐标5 s6 G3 H" O" }( X3 j$ [+ s
    Dim R As Double '圆Y半径2 C* \: r3 b. y" q# g" b$ A
    Dim LineAC As AcadLine '直线AC" _) V! C% j5 X
    Dim Y As AcadCircle '圆Y
; C2 N0 S3 _8 r. {    Dim OC As Double 'C点到直线AB中点的高
9 u5 V  l& H6 J& Q' l2 t% V    Dim AB As Double '直线AB长度5 H) t2 v9 i: y- ^  C
    Dim M1 As Double '迭代运算左边界点的横坐标% c, ^; r8 [% c3 I
    Dim M2 As Double '迭代运算右边界点的横坐标8 f& C4 `4 K% c
    Dim Yc(2) As Double '题目中拉伸点的坐标* @, e/ Z, S' x3 G
    Dim X As Double '圆Y与直线AB交点的横坐标
) A, [( J  ~6 m3 a7 d) ?6 H    Dim X2 As Double '圆Y与直线AB交点的横坐标2 y; N5 A  O2 a$ u
    Dim S As Long '曲线拟合点数量(3~32767)
  h# c1 D3 _: I* p    Dim K() As Double '拟合点坐标
, H# }$ X0 S7 T% P    Dim St(2) As Double '曲线起点切向. }4 n6 ]) j4 M" @: J4 w6 e
    Dim Et(2) As Double '曲线端点切向4 ^; i8 t+ t* n$ e8 @
    Dim I As Long '循环变量
% I& d- v, @5 [3 ^. b3 c      [% b$ G" ?0 }" T1 C8 G# X
    With ThisDrawing
  w4 k: a& `& W( Q* L+ X        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置0 z: |. |$ _% E- S) q
        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。8 \) Y* N) e. e
            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")0 @4 r- |; P5 E- s9 U9 K
            If C(0) > A(0) And C(1) > A(1) Then Exit Do+ N3 C, f# ^$ t
        Loop
4 P* J3 h( \; j& Z! E; O        OC = C(1) - A(1) '计算B点坐标& W, R7 G* `& g5 R+ r' w( ^
        AB = 2# * (C(0) - A(0))
; f, \4 A# f8 \+ k  U& K        B(0) = A(0) + AB- w$ i2 n! [. E% |2 ~
        B(1) = A(1)+ B; l$ B" X2 ]
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线/ [. {2 ]' e- d. P
        .ModelSpace.AddLine A, B '画AB直线
' O; f5 h4 F9 t        .ModelSpace.AddLine B, C '画BC直线
5 X  J7 @5 Z& d; u        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。8 D$ j7 d2 @& E
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
, u- j/ [, R$ {9 y+ }( f1 i+ @% X            If R < OC And R > 0 Then Exit Do
1 j( P+ d/ ~, `& q% T# u7 `        Loop5 y9 r/ F0 W/ b# @& G  t
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
- v( G2 |1 d1 c3 P# D8 ^# Q- G1 j        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
' j# Z1 W$ l" b* a' I0 C        P1(1) = C(1) '计算直线12起端点坐标# }; E1 a" a- v9 K+ z' G, t
        P2(0) = P1(0)6 d3 E1 P4 V2 d
        P2(1) = A(1)3 a; O" s- h0 J- h1 N1 S/ {
        .ModelSpace.AddLine P1, P2 '画直线12, C( V2 t. M( g) U, g) [# T' I
          N$ Z2 f+ {7 J, y5 p' W& o% i
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界: b% W7 Z3 H% E% p3 }+ Y5 j" x3 `
        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界
3 e4 c3 o9 I0 U/ `- U" J" ~        Yc(1) = A(1) '拉伸点纵坐标与A点相同, Y3 N; m5 D% _
        Do '迭代运算
+ h3 e7 o+ L) N: {& x' l- M            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标" b5 `- \+ u2 L3 D( E
            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 ~& t% L& E7 x; b) o5 @            If X = P1(0) Then '交点与直线12重合,结束运算
% b0 ~4 S8 e  c                Exit Do9 {7 f- O; h; P! {$ U
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算
; ]2 H6 v9 e' i( l                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果; s) l8 F5 v" S1 j/ t6 U5 g
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
7 G6 W& S9 R2 D                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2$ J1 t3 R& p5 d! J* n' a9 t
                Exit Do
* g+ P" ^4 }, B6 v1 c- t& `            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算
5 C3 p8 w; j( B* S                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果4 o8 }0 Q4 [9 e1 T
                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
7 R% A) ^+ |' \1 p- c5 m/ P9 E1 ~                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1) n" ?& i! U6 T- W( ]- K3 N3 w. d
                Exit Do
9 W/ ~9 s  ~& e; u3 |0 w            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算; C' i3 J% g$ ?5 @" _" H7 s
                M1 = Yc(0)
8 d/ \% `! |; M% z, |) \* I$ u+ x            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
7 c& R& }0 ^: d- R" j2 r! ], \0 f                M2 = Yc(0)5 m9 a4 A# r$ Q( a. W
            End If
7 M( r& O# H* l5 _& g        Loop
4 c- v6 a- f9 J        LineAC.StartPoint = Yc '按计算结果移动直线AC起点1 ^- X5 |' N9 [3 O) J9 a8 h
        Y.Center = Yc '按计算结果移动圆Y
0 O; n3 v# Z+ N2 Q5 W. Y        8 ^$ f  U& d+ _8 k& T9 X# ~9 [
        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。+ t, r, d! r: s9 T4 @5 C( y# i
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")6 y: H  u1 w7 R* {4 }6 _% b
            If S > 2 Then Exit Do
: z6 _& \3 r# h2 Y  J% z) Y, H        Loop7 i+ p# T4 k9 e/ X  R
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界8 ~; r6 \- b1 O! B
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标3 F# p% Q% p/ ~! t" `: ?# `/ P
            Yc(0) = A(0) + I / (S - 1) * AB, O9 P* D9 w2 @
            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)$ g/ e& Z: h/ S% t$ Q: f: R6 Y, D4 K
            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)
$ f8 h. @4 ^& }; C) R* }        Next5 ?! I  _0 e7 A- K$ p1 U
        St(0) = 1 '曲线起点切向% E$ `1 c4 g8 [) j' 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)))
; Z- R, ~. o# Y1 t! g        Et(0) = 1 '曲线端点切向  ~. F0 X* a# q' k, @9 a6 ~
        Et(1) = -St(1)
1 c! H4 G+ m7 u' A2 W4 f6 D        .ModelSpace.AddSpline K, St, Et '画样条曲线
8 ?' `3 z8 _; @* ?8 h3 K    End With$ C& M# H* {" [
10
! Q- @, V) `6 T+ u% r. SEnd Sub  Y8 }2 X( c9 v* E) y
7 G  A% a: S8 C% V- Y+ Y" a/ A. ], N
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
$ F! l9 x# l: {1 t: }$ ?, ?: t0 w可应用excel序列功能,非常方便,具体步骤看excel压缩文件。
/ h% L1 Q- b/ F7 p
0 w1 r  h" b" a" l. K$ |[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。, F& B2 B0 _0 Z4 l1 r
        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。0 }6 U4 l& ]# o1 {
        原贴已经关闭了,就发在这里吧。
6 i6 A8 T# o& T9 _
. E$ e) F" j% h3 d' Y8 v5 H0 R[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

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

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