QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
求解CAD准确画出圆Y与直线AC的交点轨迹线
- I2 M# f0 T7 G3 L* \% q! o; s如下图:同时选直线AC及圆Y,由A点沿AB拉伸到B
: [' _7 h, i% \  ?Y与直线AC的交点轨迹是一条曲线,如何用CAD准确画出此曲线呢
! f* [0 q$ [' _1 F5 L5 J8 K1 w$ ?5 |& X/ u% L4 [

& I, M9 E8 A: ?' I( {; F[ 本帖最后由 blackbird 于 2007-1-11 18:10 编辑 ]
悬赏100三维币求解CAD难题.jpg

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

11.97 KB, 下载次数: 32

发表于 2007-1-3 15:33:06 | 显示全部楼层 来自: 中国江苏扬州
求这样的曲线有嘛意义呀.............4 ^; h3 V1 F( E# j6 r. K- H" V
各点不是可以直接交出吗..........  j) D$ {! k* d& H0 f" a" I
楼主要"精确"........
( t2 o7 K5 }1 C+ C曲线总是近似的呀................
, M: r, P( O4 F* r9 ]) \# e7 c- X5 z8 L9 u
[ 本帖最后由 山联2 于 2007-1-3 15:34 编辑 ]
 楼主| 发表于 2007-1-3 16:05:22 | 显示全部楼层 来自: 中国广西钦州
原帖由 山联2 于 2007-1-3 15:33 发表* C5 y: ]3 L( x1 k* n- W# {
求这样的曲线有嘛意义呀.............8 B& P5 b5 ?% b+ ~6 ?
各点不是可以直接交出吗..........
* |1 f8 [4 y, P5 }; y' u楼主要"精确"........& X1 @6 n$ y8 Z' F
曲线总是近似的呀................
+ L4 s$ J( b1 a/ d5 G' k! j/ [& t
求解CAD难题简化
' v4 k, i# N. g3 c( m" e2 Z% p# N3 J0 v; S" V3 W& n
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
- H: l0 w, Y5 p8 U5 i按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。: d& J: e- O. C0 _, [
注意捕捉时用捕捉工具栏或者手动输入捕捉方式,不要使用自动捕捉。( ~1 Q+ M5 U2 W, p! G
加载yxgj.vlx,命令也是yxgj+ a. S7 }; V" j- H
/ k" d4 u$ q- ]7 q7 {& n' l
以下为操作过程的文本窗口:
4 p; \# A6 V* m0 \# K5 w' q0 Z1 Y命令: yxgj
  k) f& s6 c( ?7 r% b+ P0 BAB为水平线段,圆与线段AC交点轨迹曲线程序2007.1.03  月近人  QQ: 1218816/ v/ S  }$ m* k7 h- A/ Q) W
确定A点:int4 {! n# f8 y' Z
3 w5 \" h4 }6 u! e
确定B点:int4 N/ _$ w% Y5 {' B' _

) n6 Q$ V* k- _( l* z确定C点:int) H6 v0 K: x% n1 c, ]3 J- H

( p" ^/ z/ a% M7 n1 N5 u输入圆半径:int: @$ r. M# H7 p- o
于  指定第二点: int
0 @" q+ i7 x* ]$ L7 O
- z7 N6 z/ m; YGrade(确定计算等级)<12>:5 p4 h+ a/ s2 w+ T; t
+ O; ]% |/ z; F, p
[ 本帖最后由 moonguy 于 2007-1-3 19:06 编辑 ]
yxgjjg.jpg

yxgj.rar

1.35 KB, 下载次数: 19

评分

参与人数 1三维币 +5 收起 理由
blackbird + 5 技术讨论

查看全部评分

发表于 2007-1-3 19:25:09 | 显示全部楼层 来自: 中国辽宁营口
楼主这题太难了呀!能把直线12改成水平方向吗?
发表于 2007-1-3 21:24:03 | 显示全部楼层 来自: 中国山东德州
我认为4#楼朋友的作法是正确的,因为要求做的是一条曲线,用作图法不可能很精确。如果用编程的方法,那只有高手能做到也就没有悬赏的必要了,我个人的看法。
发表于 2007-1-3 22:06:00 | 显示全部楼层 来自: 中国江苏镇江
楼主要这样的曲线是机械设计的需要吗?想问的就是实际应用的意义有多大?+ v" T' z; t1 C

  Y% L( a/ r: `5 ]6 l; _CAD并非作图的万能工具呀!有些图单纯的用CAD是做不出来的!
6 y. ?, j# M4 W" v& x( a$ S1 s3 r+ {; G: J
呵呵.......不是打击楼主积极性哦!希望能得到尽快解决呀!& Y* v6 I; q( V

- u2 |% F8 L4 [* L& A. ?& e真想得到这个赏金呀!可是.......哎......还没有学到家呀9 V) d4 v: Q! n" X
: N3 w% T4 w2 z2 H# p2 S, h. A
7 a" I: Q& |3 a3 W' T
[ 本帖最后由 ★新手★ 于 2007-1-3 22:08 编辑 ]
发表于 2007-1-3 22:12:08 | 显示全部楼层 来自: 中国广东广州
原帖由 moonguy 于 2007-1-3 19:04 发表
% p9 E6 Z7 ~8 d9 K楼主的问题通常用编程的方法解决,我编了一个小程序,楼主试一下,按需输入计算等级,等级越高精度越高。
7 S  [. d: o$ y- w" v8 }( I按提示捕捉A,B,C点,提示输入圆半径时,可直接输入数值,或者捕捉圆心和圆与直线AC的交点。% O3 f& R, J4 _3 v
注意捕捉 ...
* W' \( M' C: j7 T7 h9 @- V& c5 F
        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。3 K) H/ \3 }; G1 R% o4 L' b0 R. N
        按出题者的要求,这个轨迹是要“精确”的,编程画的线还是分段连出来的轨迹线,严格意义上说,不是“精确”的。但我也想不出还有什么办法能做这个“精确”的曲线。, S! ^# g9 q0 W' S
        看来这个维币应该奖给moonguy兄了。- i8 E* }  j& n7 q, ~& m" z
        不知woaishuijia老师有没有看到这个贴,也许他能想到些更好的方法。
" \. L& x9 M( o* z& P! k: W6 v3 M- d/ N& P; N% n
[ 本帖最后由 daguan8 于 2007-1-3 22:18 编辑 ]
发表于 2007-1-3 22:12:31 | 显示全部楼层 来自: 中国上海
其实就是机械设计中的凸轮的画法 这个查相关的文章就有说明的!
$ Z% }. n6 x5 N* i" t! R% }, H而且好像可以找到相关的程序来搞定~
发表于 2007-1-4 08:24:39 | 显示全部楼层 来自: 中国吉林吉林市
原帖由 daguan8 于 2007-1-3 22:12 发表3 F7 c5 o; a# I4 I0 Z1 f

7 U! p0 x: V! X% a        moonguy兄真是快速反应呀,我刚看完题没多久,还在想是否只能靠分段连线求解时,moonguy兄就已把程序贴了上来了。但moonguy兄只考虑了AB线水平时的情况,如果AB线不是水平的,就画得不对了。7 C; `7 i/ E2 i6 i9 i  |! F
       ...

6 r- Q0 N( q* o* P: _
" _' A  h% u& e: }8 q1 A* d) ^我理解的"精确",只能是小数点后面有多少位的问题,本来就不会是个整数解,通过输入计算等级数值,就可满足要求。/ O9 ?* L  r* Q6 G8 @  d

4 P: a2 d& \8 V7 v8 q5 ]这是个特例,不用把编程搞得太复杂,ABC是个三角形,如果AB不水平,只要用参照旋转的办法,把ABC这个三角形的AB边旋转为水平,就能划线了,然后再用参照旋转的办法,把三角形和所得曲线旋转回去。$ X- K9 Z8 F# I% Z
# U1 y  s6 [" H- x
我的想法和你一样,也等待做图法。做图法我是做不出来了,期待着有没有不用编程就能解决问题的办法,那样对更多的朋友都有参考价值了。2 v0 e9 B1 L! Q% l) f9 b

  x0 o- {1 f; l8 I( } $ Y$ p6 r& ^& r7 F- p

0 x5 ^4 d1 n# W: c再补充说明一下,如果求曲线与12垂线的交点,只要以垂线为边界,修剪曲线,然后捕捉那个剩下的曲线端点就行了。如果直接捕捉直线和曲线的交点是很困难的,特别是计算等级高的时候,因为曲线是由线段逼近的。3 v0 r9 Q. w' ^3 A" g
可以比较临近等级得到的两条曲线与直线交点的坐标差值,判定当前所求交点的精确小数位数。
# P7 h+ X7 b1 x9 _% t' s: @
9 S! ^1 N/ ]1 U5 `1 T[ 本帖最后由 moonguy 于 2007-1-4 08:58 编辑 ]
发表于 2007-1-4 09:54:17 | 显示全部楼层 来自: 中国辽宁营口

回复 #9 daguan8 的帖子

你小子居心不良,存心让我在众多高手面前出丑(开玩笑)。再一点,我不是“老师”,我跟多数人一样是到这里来向真正的老师--比如★新手★、还有aishengchen(如果我猜得不错的话)等等--和一众高手(包括你哦)学艺的。
% g! B4 t+ V7 _0 `  i2 }不过既然点到我了,我就做个发言,有不当之处,还望各位高手海涵。
( v2 C, u$ I: e  o一、我之所以没有正面回应这个贴子,是因为我对楼主的动机心存异议,不想顶这个贴。我知道楼主是个高手,他出这个题目不是真的在求助,而是在挑战。这个题目本身是一道钻牛角尖的题,类似“用尺规做图法三等分角”。他坚信没人能拿走这100三维币。3 {$ R9 c7 f$ J$ S' ?0 r$ F# {
二、对原题的看法:我认为,autocad只提供给了我们圆和椭圆两种二次曲线,其它曲线一概用样条曲线代替(包括2007中的螺旋线和渐开线)。而样条曲线在autocad内部的数学模型只是一个拟合函数,在拟合点足够多的情况下,显示的曲线和我们理想中的曲线“相似”而已,永远也谈不上“准确”。3 K: }  i; s$ F2 M# H9 x9 a7 \
三、对简化题的看法:表面看起来,题面被简化了,不再需要画不“准确”的样条曲线,但我们只要把已知条件画出来就会发现:这是一个用部分边长求画直角三角形的问题--这个问题在论坛上已经讨论N久了,前段时间被★新手★版主关闭,现在找不到了,估计是被删了。( K3 B; O  s' ^7 l
  说实话,单纯用画图法解决这个问题,在下无能为力--因为我还没找到用画图法开立方的途径--而且我也没看到过别人“准确”地“画”出这种图形。我遇到这种问题,通常使用autocad的VBA,而且可以保证得到的结果和在autoCAD上用画图法做出的精度完全一样。如果楼主承认这种方法属于“CAD方法”,我就立即上传我的宏,就怕届时楼主为了保住自己的三维币而拒不认输。
# {6 r- L! W  k% r' v四、尽管楼主动机不纯,但题目本身适当地加以改动后还是有利用价值的。
$ M0 m* k" ?% w' {; i+ Z' c5 F. m  1、对原题加上以下限制条件:用线段AB的五分之一做为拉伸线段AC和圆Y的步长画出样条曲线(拟合点--含样条曲线两端--共6个)、画曲线时必须考虑两端切线方向。+ \% q2 q8 ~7 B! X0 u. v9 S7 d
  2、简化题中的直线12改为水平方向。# Z: |' O. Q, }( n( k# U5 I4 r# m
  这样改动后,两道题就都能用autocad命令画出来了,其中第一题稍复杂一些,第二个相对简单。如果版主能对上传答案--特别是答案正确--的网友适当加以奖励,就应该能达到既活跃了论坛、又能正确引导大家的努力方向的目的了。
) S4 [# U, S  H0 G" r, R* ^/ @. H8 U7 N6 P
[ 本帖最后由 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 | 显示全部楼层 来自: 中国吉林吉林市
请楼主举例说明一下,哪个软件有三线交点的捕捉功能?
+ z6 K! X# M3 Q2 _7 }8 U1 j: c / }: K% M; Q1 \+ l6 W% r
3 D. t8 D9 X4 O+ ^7 m/ j
看来楼主不知道如何开悬赏贴,请版主帮忙把此贴设置成悬赏贴,扣除相应三维币,好让真正的高手出面帮忙。名不正言不顺,影响大家的应助热情。
, {: V* i/ W8 ~/ Q# @) }
: \% B# a% n9 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不能精确求解。
3 Y3 s. ?3 w2 p故将此帖关闭,如有疑义,可到申诉区申诉,或短信与我沟通。, b: U! O3 h7 |8 {/ v
* a3 o0 n( z% `# b. H( a; ^; z' I
但通过此帖,引发了会员的积极讨论,希望大家以后能继续将积极讨论的气氛发扬开去,在三维度过一段美好愉快的时光。
2 Y0 M8 B, b6 J! P8 s8 b. m7 K+ K6 l0 \. v5 z
同时,练习题不要以难倒会员为目的,而应该考虑到一般会员即可上手,这样才能达到真正练习的目的。
# r& V0 |# U  O6 p/ n                                                ——blackbird
: d( n3 f: Q- e % L% J6 v1 o6 b, n" _
该帖引发一段争论,经会员投票讨论,现经编辑后重新打开,供大家继续讨论。2 q. v( T+ u: k+ m, B; y6 |
希望大家珍惜这样的机会,不要跟一些“谢谢”之类的水帖!# W0 D: o# C* [
3 `7 ]5 D; ~: f+ [
[ 本帖最后由 blackbird 于 2007-1-11 18:13 编辑 ]
发表于 2007-1-12 09:22:11 | 显示全部楼层 来自: 中国辽宁营口
autocad的功能极其强大,使用基本画图命令、计算、编程都是可选的做图方法。“条条大路通罗马”,用最简洁的途径,得到最准确的结果,才能称得上是技巧。限制使用某些基本做图命令而不去尝试autocad其它更强大的功能,窃以为不妥。试问:谁能用画圆的命令生成一条直线?, V9 k% F' Z. j$ R. ]1 Z' @5 t* F$ o4 h
以下是用VBA求解的过程。- i9 }8 {% |" i" n  U; v
附:源代码

程序加载和做图过程

程序加载和做图过程

程序注释用图

程序注释用图
: q2 h2 `$ \4 ]- `: o; G+ X. w+ L- u9 k
1 ?% u; w! O+ @0 E. D3 y
Sub NT()
6 l. {( j- K3 M    On Error GoTo 10 '发生错误时退出程序
, ~/ l2 L: I& |" i0 n    + c. ~* }3 A$ `8 r4 L2 O
    Dim A As Variant 'A点坐标# B; ]% H( n8 W3 D
    Dim C As Variant 'C点坐标
1 g9 J, d% Q( x* U    Dim B(2) As Double 'B点坐标
# U$ Z0 F5 y5 q% w$ \, c! y    Dim P1 As Variant '直线12起点坐标
0 S( }3 Q, I8 @9 r    Dim P2(2) As Double '直线12端点坐标  |( B2 r0 k6 S2 i3 S
    Dim R As Double '圆Y半径+ b9 y: a1 Q2 ?8 r; N1 u
    Dim LineAC As AcadLine '直线AC
( o  w( ?# F! ^* k    Dim Y As AcadCircle '圆Y8 V) m+ q8 `8 i2 I3 i/ z# `' c% u; @0 @
    Dim OC As Double 'C点到直线AB中点的高9 Z7 W0 I, e! u* W, F( n
    Dim AB As Double '直线AB长度
* @) d' @3 V( c/ I1 ^    Dim M1 As Double '迭代运算左边界点的横坐标$ V- I; Y6 }6 A# ?4 i: P- @
    Dim M2 As Double '迭代运算右边界点的横坐标
; M6 K7 F2 }1 g! d8 x    Dim Yc(2) As Double '题目中拉伸点的坐标
. U( j- E9 n  m0 V, ]    Dim X As Double '圆Y与直线AB交点的横坐标) L) i& _6 Q1 K. K  ^
    Dim X2 As Double '圆Y与直线AB交点的横坐标
9 ^3 n) |! }9 ?$ ]: e8 ?- k    Dim S As Long '曲线拟合点数量(3~32767)! b! C) b) d0 q1 A, u. ^
    Dim K() As Double '拟合点坐标' x. a  o2 N9 g% M% {
    Dim St(2) As Double '曲线起点切向
$ t) I3 h1 F' [' O    Dim Et(2) As Double '曲线端点切向
9 m. y/ W4 i' |, I    Dim I As Long '循环变量
, p: X$ }) ~6 F3 }9 x3 n; @, q   
" @1 ]: j1 l- O0 {1 E    With ThisDrawing- Q6 V: Y( g" I
        A = .Utility.GetPoint(, vbCrLf & "指定A点位置:") '指定A点位置5 k' {) H% B/ O2 L: y( m8 B
        Do '指定C点位置,当用户给出的位置不在规定范围时重新要求指定位置。
, O- X% b0 L! d% a6 ^2 W            C = .Utility.GetPoint(A, vbCrLf & "指定C点位置(在A点右上方):")& {& d/ R8 p) D, z: `
            If C(0) > A(0) And C(1) > A(1) Then Exit Do8 C( O% l7 j* _; @: h) A0 c: A
        Loop# x4 r2 C  Z5 d6 v" o% K
        OC = C(1) - A(1) '计算B点坐标
+ f3 Q. F; N! j/ [( F        AB = 2# * (C(0) - A(0))0 ^/ o4 j1 O( T7 V  x
        B(0) = A(0) + AB
4 d1 _+ j$ O0 M/ F0 z) O. \        B(1) = A(1)9 J. V( \. |2 ^1 _
        Set LineAC = .ModelSpace.AddLine(A, C) '画AC直线
6 x/ f+ x% ^# ~        .ModelSpace.AddLine A, B '画AB直线1 C1 r- Q" f$ }& n  E2 s# R
        .ModelSpace.AddLine B, C '画BC直线
, N$ F/ \- \6 e7 f        Do '指定圆Y半径,当用户给出的半径不在规定范围时重新要求指定半径。
5 L/ i+ F% b$ t% D8 A. G            R = .Utility.GetDistance(A, vbCrLf & "指定圆的半径(小于AC长度):")) S9 Z+ N2 X/ j$ h
            If R < OC And R > 0 Then Exit Do
) r- P3 U0 T/ ^& @- ^- e3 ?2 h3 ?- W        Loop+ U9 o- G4 A, k8 ]
        Set Y = .ModelSpace.AddCircle(A, R) '以A点为圆心画圆Y
: [# T% e1 t0 C        P1 = .Utility.GetPoint(, vbCrLf & "指定直线12位置:") '指定直线12上的一个点
- b+ ^2 ]0 t6 z: W# |        P1(1) = C(1) '计算直线12起端点坐标; o( L3 Y0 Y! P
        P2(0) = P1(0)* D' I3 L! E$ R* T
        P2(1) = A(1)
  c& G8 l% t- b8 [9 K4 v5 v3 [; L        .ModelSpace.AddLine P1, P2 '画直线12. N4 P" h: m- s* a  Z+ ?
        % z3 D! a+ x: d  r1 a8 c
        M1 = P1(0) - R '以直线12左侧R远为迭代运算初始左边界
: X2 \( S. N, k( L        M2 = P1(0) + R '以直线12右侧R远为迭代运算初始右边界6 y7 _% b/ [* |% a3 n
        Yc(1) = A(1) '拉伸点纵坐标与A点相同
' k3 q+ q8 k+ z* ?6 t( |        Do '迭代运算6 L/ Z8 t& r- [& r
            Yc(0) = (M1 + M2) / 2# '把拉伸点置于两边界中点,计算此时圆Y与AC交点横坐标! E# L% W4 ?" f9 b6 d8 r+ z
            X = C(0) + (Yc(0) - C(0)) * (Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((Yc(0) - C(0)) ^ 2 + OC ^ 2), ~3 J! p: }: S/ W+ j: {% [
            If X = P1(0) Then '交点与直线12重合,结束运算+ D$ \% u/ F1 ]. N
                Exit Do# o! p& m, @, ?; t) M) K
            ElseIf Yc(0) = M1 Then '拉伸点与左边界重合,边界已收敛到双精度数据极限,结束迭代运算* x/ n7 M# i8 I+ _2 k
                '以右边界为拉伸点,计算交点,并与左边界为拉伸点时的结果比较,取精度高者为最终结果; |6 _+ Z: F6 ^$ U( z$ d' C
                X2 = C(0) + (M2 - C(0)) * (Sqr((M2 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M2 - C(0)) ^ 2 + OC ^ 2)
; [, w( J& `( r! W9 w                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M2
* l. v# C3 y3 }% J. }/ B1 `                Exit Do% c( y  h1 @3 Y1 O* v4 q
            ElseIf Yc(0) = M2 Then '拉伸点与右边界重合,边界已收敛到双精度数据极限,结束迭代运算/ j2 u  o3 V2 B; @% V9 |+ u& B6 O
                '以左边界为拉伸点,计算交点,并与右边界为拉伸点时的结果比较,取精度高者为最终结果
( m$ \- |9 Q9 T% W) K1 c7 g                X2 = C(0) + (M1 - C(0)) * (Sqr((M1 - C(0)) ^ 2 + OC ^ 2) - R) / Sqr((M1 - C(0)) ^ 2 + OC ^ 2)0 L5 D! x& G5 H
                If Abs(X2 - P1(0)) < Abs(X = P1(0)) Then Yc(0) = M1
) m! P' u8 z0 q/ e% ^) e                Exit Do7 ]0 {: E" x; A  p. a
            ElseIf X < P1(0) Then '试运算的交点在直线12左侧,将左边界收敛到现拉伸点,重新运算
" b! u- U+ g% i* s& h8 ~                M1 = Yc(0)5 C4 T- L3 O& b7 Y5 @3 f7 V
            Else '试运算的交点在直线12右侧,将右边界收敛到现拉伸点,重新运算
' T$ c% m' G/ z* d7 I3 Q  c8 K6 Q* T1 s                M2 = Yc(0)
9 p; m1 a/ l/ A( t            End If6 E  w0 h& x$ S; h8 N* [
        Loop$ P# O# t4 i! O6 I1 m
        LineAC.StartPoint = Yc '按计算结果移动直线AC起点
1 F: g$ X- k. K6 q" X2 _8 ]        Y.Center = Yc '按计算结果移动圆Y# C& j! Z  W7 a# a4 e% H
          S4 n$ j& D* O& v6 r
        Do ''指定拟合点数量,当用户给出的数量不在规定范围时重新要求指定数量。
5 f8 f/ T3 K7 l9 V; P6 U9 u            S = .Utility.GetInteger(vbCrLf & "指定曲线拟合点数量(3到32767之间正整数):")
; v# P  [* [0 n) a0 ^' \            If S > 2 Then Exit Do7 @2 M/ U4 T* X2 O$ r
        Loop, _; U& t: g; q; ^; o- X: I- V
        ReDim K(3 * S - 1) '按拟合点数量重新定义数组上界$ O6 z% `1 s2 T
        For I = 0 To S - 1 '圆Y和直线AC起点以直线AB长度的(S-1)分之一为步长从左向右移动,逐点计算圆Y和直线AC交点,做为拟合点坐标& C) T: [- E+ N$ i+ _8 q
            Yc(0) = A(0) + I / (S - 1) * AB& c$ F4 m# `  Y7 ~; E" Z' k
            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)
# u" A7 y! ?$ S+ h            K(I * 3 + 1) = A(1) + Sqr(R ^ 2 - (K(I * 3) - Yc(0)) ^ 2)
2 }, }7 S6 _9 [; s# ?$ C- Z) F* [        Next( m* |5 R( c/ U
        St(0) = 1 '曲线起点切向9 t/ b; S: E. q9 \
        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)))
! r" F' ^. q$ a  A8 E8 e! l        Et(0) = 1 '曲线端点切向
1 Y8 v+ H6 ~' j% V        Et(1) = -St(1)
' b6 B7 Z; d6 g        .ModelSpace.AddSpline K, St, Et '画样条曲线
  x: x# e1 k0 R. Y! G0 U    End With
8 b) C0 L' B' I/ f: u10
* ?( ]1 v  I( vEnd Sub* d; Q* v% W1 n' T

- B* Y7 w/ q$ b( p8 |[ 本帖最后由 woaishuijia 于 2007-1-12 19:24 编辑 ]

nt.rar

12.66 KB, 下载次数: 12

程序和附图

发表于 2007-1-12 13:25:41 | 显示全部楼层 来自: 中国江苏无锡
本人不会什么编程,只能自己手动解决了。
, x. w# p' f# q( D! O; F' w可应用excel序列功能,非常方便,具体步骤看excel压缩文件。# _$ e9 o# j" z
5 O" J$ d7 ^7 s& h3 Z! l& y
[ 本帖最后由 zcf108 于 2007-1-12 13:28 编辑 ]
Untitled.jpg
11.JPG
22.JPG

excel文件.rar

2.24 KB, 下载次数: 9

评分

参与人数 1三维币 +5 收起 理由
blackbird + 5 技术讨论

查看全部评分

发表于 2007-1-12 20:43:45 | 显示全部楼层 来自: 中国辽宁营口
网上流传两道根据不完全边长画直角三角形的题(见附图),号称“难倒一片CAD高手”。当然,这两道题用CAD基本做图命令是做不出来的,但如果使用CAD二次开发功能,这两道题就迎刃而解了。
9 F9 a5 Z2 P' ~: `: x        有朋友可能会笑话我,这是算出来的,不是画出来的,我觉得这种说法有些牵强。既然有捷径可以走,为什么还要死钻牛角尖呢?要知道,计算机其实是个大傻瓜,它除了加法什么也不会。我们在前面“画”,它可是在背后偷偷地算--我们画的结果都是它算出来的,其它软件的“尺寸驱动”功能其实更是靠算的,不算怎么能得出结果来?软件的命令再完善,也不可能解决世界上的所有问题,碰上相对复杂或是不太常见的课题,就需要我们用编程方法告诉CAD算什么、怎么算,让它把我们用基本命令画起来很麻烦甚至根本画不出来的图画出来,这就是二次开发的意义。
. n& ?. I0 I5 u+ m4 y3 s        原贴已经关闭了,就发在这里吧。% u" E3 M, a8 m( d: a' P: w. Q
1 u9 ?* T+ V3 }* y9 A
[ 本帖最后由 woaishuijia 于 2007-1-13 06:22 编辑 ]
2.gif
1.gif

sj.rar

17.33 KB, 下载次数: 10

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

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