QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线! W8 e  p. p7 l1 Q
如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B
6 A; |! a4 t8 MY与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢9 E6 F* y. r5 R. s5 L" l

  ?; @$ k: {' F" C7 d* y0 [6 e# d3 w+ j0 j# ?
[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 33

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............! r  l5 s( }/ ]8 S  V
各点不是可以直接交出吗..........* e  u9 o) f5 {/ y3 U  ?+ j/ S% n+ @
楼主要"精确"........$ O; E" R) z( Q& I9 a) ?
曲线总是近似的呀................1 j  `& t( B$ v
5 S% @% J( z5 q* }" C
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表
0 u  @+ f; y" x, k( r; B求这样的曲线有嘛意义呀.............
" a: t3 D* x$ Y) I9 W各点不是可以直接交出吗..........
3 u6 ?) X; E0 C! A' i2 h楼主要"精确"........* A% J0 X' e' [/ ?( ]4 L& b
曲线总是近似的呀................

- U+ k5 m+ L8 s6 G! O求解CAD难题简化. R7 I7 w- h3 T4 R3 ?- g$ ?

4 s- K9 u' H7 y! _8 @1 }- ][ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。" e7 `6 [1 J. q
按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。8 y6 u2 C5 f5 x2 A: k/ ^; D
注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。. h- `7 h9 e; }5 s. _+ T
加载yxgj.vlx,命令也是yxgj, n2 F* K+ }# b. r+ f
1 {# \, J% s' g
以下为操作过程的文本窗口:2 L4 u1 V% @" @
命令: yxgj+ ~& [& H1 l% ~0 \  C' e2 m6 A
AB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816, c  O, F1 Y. W: N( D8 w7 z
确定A点:int9 d% d5 Y* w# V! J
3 X6 G" p* F  p, K0 j& Y, B
确定B点:int
3 G' m% G# h2 A# h7 X7 N" a& o8 r
确定C点:int/ k- ?2 J# D# H% F3 `0 w) A

) ]9 K: B/ v8 ]5 Q输入圆半径:int
) K6 [$ ]; G5 U于  指定第二点: int
% J; h) }8 `" }
0 u& p" S2 [5 r: W% I1 qGrade(确定计算等级)<12>:
1 X( e7 g2 W! Q/ {$ V) C6 J, K
+ _. E  V, x0 m$ k) b4 F4 @) c9 Y! O[ 本帖最后由 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- Q6 A3 r2 d9 V
: }4 G9 t& b  k6 B* Z5 E9 W  dCAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!% @3 \$ P! `, ~7 F

; e$ x7 D6 ^: [, P呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!
& z0 p' ]$ u; I5 U, U- \, ^
4 U) ^7 H9 A. d6 I真想得到这个赏金呀!可是.......哎......还没有学到家呀; ?% K7 M! w( p: n$ F* Y
1 N3 Y& a- q7 X7 j4 U* |& M1 u
4 ~' I3 D! q7 ^3 e- Q- A9 h& s
[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表
. ^  i- D- t% e1 z- ]8 c7 d楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
. Y1 b: a4 t7 T$ q4 w  J( s% G& _按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。
/ V6 c+ g' _' n- }$ L8 e2 h% \注意捕捉 ...
* [" b8 ?9 Y0 \4 E+ w) X
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。' p2 c* x8 m& q: a1 I
        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。1 a: y6 r+ D5 w( e7 A' z
        看来这个维币应该奖给moonguy兄了。
0 {, B2 `1 Q0 L0 _, _        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。) }5 n  m, a9 b7 N6 w; e% E( ?7 O1 b

- n# g7 K! S1 V2 M" L; `9 }5 s% o[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!
: H) m* y1 U8 D5 X9 i而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表
) u; e( S7 ]+ H! r# a' H$ J; {8 x/ W" s$ O
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。
: v- ?# B3 [8 P: `8 t       ...

$ e/ @6 g$ }3 `+ K8 e) a  E# H) H* |: \
我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。. h0 {9 G, m9 L4 N7 i
5 G$ q6 {$ O3 l' V! T# C4 k7 G( v
这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。
. F' S, _3 G( _( d; u; G& I4 q* i0 c$ ]1 A) G& s8 \; K
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。
& U8 g" ?% m- u
' m! l9 n7 J5 P2 H
$ p: V3 I% T- y- a. `+ W6 d2 w3 L9 P
5 P9 D- u$ Y5 I! q再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。8 k8 r# I1 _& i# T" ~# ?
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
& M% H+ ^1 a! L$ q( L& w, ^( B: O8 [# O* v3 j: g& v
[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

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

. G! H' b3 e/ D
: B/ J# p& L7 B+ k4 P看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
# Y1 f7 A1 h0 [6 Y  @
8 \9 R/ A' \. R; w$ F; N[ 本帖最后由 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不能精确求解。
# E9 Q) p2 k# Z% e0 ?3 U故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。6 B* D2 n$ i+ A, K5 u( r# v

6 C. P8 X+ }2 y! p: r但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
) I. T3 H; b9 V+ t7 u
/ Y  S5 u* ~' b) `& [* e4 d同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。" B5 w% S; i* F  e
                                                ——blackbird% o! x/ B# C' a$ f/ ^, T0 j7 \

. t# D3 n4 I3 _. v" r, T该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。
" A8 m4 g9 B# L希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!$ b1 l- _! W- W2 y" j

( r( V$ h& v8 a6 s6 V! b[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?
. A8 C1 C8 b% q以下是用VBA求解的过程。
6 k/ K1 D( L7 L7 U" H附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图

  j" A5 h, b, E5 s5 a7 Y$ j4 Y( K0 ]  L! j
Sub NT()
( i( H; R  x# S( F; O: V    On Error GoTo 10 '发生错误时退出程序
8 \0 f7 y1 c8 V$ k7 p, a' N7 ?    / ?9 G( V. u* [  S
    Dim A As Variant 'A点坐标
  b0 v) `  I  b; _    Dim C As Variant 'C点坐标
% R/ ~6 q. s& `    Dim B(2) As Double 'B点坐标
1 l$ j2 z' @5 D# H- T  Z    Dim P1 As Variant '直线12起点坐标+ @0 e9 u' x1 }. b
    Dim P2(2) As Double '直线12端点坐标
0 h  |0 ^* h8 O" ]    Dim R As Double '圆Y半径
( d$ F: L4 F; e7 x! @9 ]    Dim LineAC As AcadLine '直线AC+ Q  @% |2 L1 b9 e8 z1 Y
    Dim Y As AcadCircle '圆Y
/ o& D) J1 _: h3 ~2 R) @' `. Z9 U    Dim OC As Double 'C点到直线AB中点的高5 ?0 U9 C2 ]( ]3 l
    Dim AB As Double '直线AB长度
) e# c3 z" [9 }6 @    Dim M1 As Double '迭代运算左边界点的横坐标
$ R- W+ B9 Y$ ~: n7 m    Dim M2 As Double '迭代运算右边界点的横坐标1 x! R. O2 D" \5 h1 X9 c, R1 ^
    Dim Yc(2) As Double '题目中拉伸点的坐标
  p& w( Z, ]+ t4 G+ r0 L% O    Dim X As Double '圆Y与直线AB交点的横坐标
7 d0 c% A& S* v9 D3 Y" D    Dim X2 As Double '圆Y与直线AB交点的横坐标1 q3 {6 l  u5 f4 r* ]* X& e
    Dim S As Long '曲线拟合点数量(3~32767)
6 c# `2 q5 _+ L    Dim K() As Double '拟合点坐标
' r3 z" ?, Z! |) G    Dim St(2) As Double '曲线起点切向* q+ A, s2 H  u
    Dim Et(2) As Double '曲线端点切向5 g9 Y1 P3 c* W
    Dim I As Long '循环变量, S8 W$ q' e/ s; z: e
    7 @5 f0 v0 o5 x- _5 N# n
    With ThisDrawing
& Y0 R/ @7 Z3 M, i% t/ f, K/ s        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置
& n) G  v3 e( V- D* ~        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
% b& l, A3 m+ l4 \: L0 B. E: x: w& c            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")
# j8 [2 N) }4 B# c% E            If C(0) > A(0) And C(1) > A(1) Then Exit Do
: H' ]5 r6 I& Y6 y- j7 n        Loop
* m$ d* I& P" i        OC = C(1) - A(1) '计算B点坐标/ c; [* B: w  j6 ?, x) r& o8 v$ Z
        AB = 2# * (C(0) - A(0))2 A+ a( H* q( B. \4 V! t
        B(0) = A(0) + AB1 \) H# n' }/ x& H4 `3 H* U8 i$ M
        B(1) = A(1)% O2 j% f, N7 g% J1 K  r6 x
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线: ?& e' V- x1 v  V( @. h
        .ModelSpace.AddLine A, B '画AB直线
) G  `0 z6 S# ~  S) R0 A        .ModelSpace.AddLine B, C '画BC直线+ o4 C, m+ H, f0 i& T
        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。6 C' S6 X7 z/ ~! G
            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")
; K$ C! ^8 t3 A3 U0 ?% Q) W9 X' O            If R < OC And R > 0 Then Exit Do3 e. d/ y% N, {5 j7 i; H( E  d
        Loop
. Q. `5 o. T- P        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y- g1 j! Z4 I& E8 U% |
        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
5 c# _% g2 _8 ^  w7 z' F& b) q+ M        P1(1) = C(1) '计算直线12起端点坐标& Q$ G" S- M7 B4 M, v
        P2(0) = P1(0)
% s  J$ a- z! b+ R        P2(1) = A(1)
( A. n# E) @, B. L2 s        .ModelSpace.AddLine P1, P2 '画直线12  C. o" t# E- E  e# Z: W
        4 V" p/ V2 V& R) e! t7 J
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界
1 w) A: i4 b  [: r( T- `        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界
2 ]$ v! e+ R: f1 x4 C! a4 T6 K; N        Yc(1) = A(1) '拉伸点纵坐标与A点相同
" ~' \2 t5 q  n7 n2 s        Do '迭代运算
0 C$ `) G0 T3 v) h4 H8 n% S            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标; g" D: u  N2 U
            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 I0 F  j; v/ u8 V7 N3 X4 g2 |/ R
            If X = P1(0) Then '交点与直线12重合,结束运算
7 Z2 }% m+ W6 [, u' `) d9 U                Exit Do5 a+ Y' `" G/ u( u
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算' A- E+ j1 k7 |. i/ n
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果9 L$ P8 j, V' Z
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
! W- @; D/ R8 g                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
% L% \. C$ l/ ]                Exit Do
1 L( r5 V0 Q! Z. D            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算, H6 r2 c5 V3 p! \- T3 q
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
4 a' S% I' ~& i. P- c0 _8 r                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)
! r; A5 U7 g6 f& ^7 Y& b% }                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
' O. M2 c" ]5 e/ T* g& n& J) _                Exit Do
' K* T+ F4 S% j7 M! j8 b            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算7 H) v; ?/ A$ v, n/ K6 z
                M1 = Yc(0)
1 d# x+ h7 r4 P/ S9 {9 ~3 x            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
/ |( [+ t: |3 T, N                M2 = Yc(0)
4 X) n/ w6 M, ]6 |) ~            End If
0 T: g: x, s( x/ r: _        Loop
4 |$ V* L% U+ S        LineAC.StartPoint = Yc '按计算结果移动直线AC起点1 t& [6 Z' d, N8 E
        Y.Center = Yc '按计算结果移动圆Y
4 q- V2 z( F# m        2 c' w( }+ n6 N
        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。, J# V* g" B8 j
            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")  ?* {+ p! a! @4 V3 a' E* W
            If S > 2 Then Exit Do, _$ K+ w+ r6 F$ W8 I. H
        Loop6 L+ h# f$ ]7 S; B! w  n
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界
6 D. A* Q0 q$ x$ R3 b( w+ f6 G& ~        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标
' e3 b7 `' T! f) d, S" }6 p  u            Yc(0) = A(0) + I / (S - 1) * AB
7 s3 l* }4 J5 M$ ^7 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)/ X  X) \# N  _0 {5 R! U& L6 y
            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)5 q- G0 C+ p  X5 Y' X/ W/ d1 s' m
        Next. N5 t% a  I5 F' a) |$ O
        St(0) = 1 '曲线起点切向* m& j4 o6 o" C! u
        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)))
" ]( X: X  }  `% Y: ?1 ^2 b        Et(0) = 1 '曲线端点切向
8 L; ?6 r+ t+ Q6 w        Et(1) = -St(1)
6 u1 k3 V3 f1 q; Z) O        .ModelSpace.AddSpline K, St, Et '画样条曲线
, C- U. |5 s6 Y2 e/ H' `) s    End With
$ F. T! K3 J( b% F9 G5 A10
" g/ N" B) Y4 ]End Sub' v$ N3 S( U( S3 J( t! A
6 K! h* y* s1 S/ X
[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 13

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
: z4 V4 e- u$ l& }* f4 u7 K% }可应用excel序列功能,非常方便,具体步骤看excel压缩文件。3 A3 c9 M) H: ^, N% f1 H
4 c- g( x3 P% W" q: G3 u$ H! r4 I
[ 本帖最后由 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二次开发功能,这两道题就迎刃而解了。
% j" d; Q8 {1 {1 _! n, s* N0 @. Z% a3 k        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
; R+ r, {" `8 \% h5 o! k. g4 C        原贴已经关闭了,就发在这里吧。. N+ y+ X- |; @# B: D4 M  u

( I5 q5 ^. x: o: F  `# A[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 11

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

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