|
发表于 2007-5-20 16:09:50
|
显示全部楼层
1、求做平面上任意四个圆的外公切圆,在理论上不成立(这与座标系和计算方法无关);+ x: w9 ], p8 Y3 I7 }6 d7 K& l
2、对平面上任意四个圆,可以求解和绘制这样的圆:其圆周分别与四个圆的圆周有相等的最小距离。但对平面上任意四个圆,求解一个圆:其圆周与四个圆圆周的最小距离均小于给定值,在理论上不成立(同样与座标系、算法和是否使用计算机无关);
/ b- F) Q& v- U3 |% Q0 h2 R! ~8 r' X3、对于本命题,四个圆外侧的包络线不是圆。* a) ]# r+ N4 v! X& J
在工程应用中,用连续的、相切的不同半径的圆弧和直线段在合理的精度范围内近似地表述某种曲线,是很常用的方法(这不是巧合),这在教学和实践(特别是手工制图)中经常可以见到(如用若干段圆弧近似地画出椭圆或一段渐开线等)。在数字技术得到广泛应用的今天,这种方法正在部分地被精确计算、制图并配合数控加工所取代。
- _2 _ e7 l; T' E# A! |: t4 Y 综上所述,对于本命题,笔者认为:用计算机精确地计算并绘制出四个圆外侧的包络线具有更为实际的意义。以下为笔者在AutoCAD上用VBA编制的包络线计算和绘制程序(由于命题中未明确给出小圆圆心轨迹的数学模型,笔者根据命题已有的条件假设小圆圆心轨迹为阿基米德螺线)
; [! W7 ~& U2 @$ _6 c& r2 D, ^ J: u8 C: P3 Q9 }, m' A
, M+ a# u; @) o( b( Z" u
Sub QX()
- D# K6 {% T6 c8 Y Dim R As Double, A As Double, B As Double, Theta0 As Double, R0 As Double
+ q5 Y9 z* I% t3 T7 d Dim Theta As Double, I As Integer, P() As Double, T1(2) As Double, T2(2) As Double
/ H% ?# a: `+ s" x M* @ Dim O As Variant' z. t; L5 O9 R
$ n: b7 j; D1 E! E: Q6 N R = 18.6 '内切圆半径18.6
4 F8 j9 n: U. X( J A = 5# / 3.14159265358979 '小圆绕内切圆旋转每180度半径增大5
% g) T2 _2 z- ]% i7 P2 t Theta0 = 88.4 * 3.14159265358979 / 180# '小圆在内切圆88.4度方向时半径为5
" ^1 y9 R. _4 W/ ? _ R0 = 5#- ]2 a8 u5 h' v$ T! r6 ]9 J
With ThisDrawing
$ J% O) J, n1 ?3 O! f! R O = .Utility.GetPoint(, vbCrLf & "指定内切圆的圆心位置:")
* N' X1 U( @% Z- K4 u( l% x) D Do Until Theta > 3.14159265358979 * 2 '计算小圆从0度角起绕内切圆360度的包络线轨迹,每间隔1度计算一个点的座标2 {0 i8 s3 Y7 S$ s7 k
Theta = 3.14159265358979 / 180# * CDbl(I)$ S5 l: u& |3 ^: Z" W
B = A * Theta + R + R0 - A * Theta0
% M# |% ~3 N# q; W If A * Cos(Theta) - B * Sin(Theta) <> 0 Then
% z. N2 }- w, L& v7 { ReDim Preserve P(I * 3 + 2): P$ }" ~5 e) _, v3 }# r
If A * Cos(Theta) - B * Sin(Theta) > 0 Then" I" J3 c j5 n( L
P(I * 3 + 1) = (A * R * (B * Cos(Theta) + A * Sin(Theta)) _! y1 ^, G' O9 v" u* k7 Y" g" B
+ B ^ 2 * (B * Sin(Theta) - A * Cos(Theta)) _. O: t( u0 l0 _& m/ O4 z/ L1 u
- Sqr((A * R * (B * Cos(Theta) + A * Sin(Theta)) _9 l9 G; w! N# v3 ^! M
+ B ^ 2 * (B * Sin(Theta) - A * Cos(Theta))) ^ 2 _% p6 t; Z) p9 F/ a
- (A ^ 2 + B ^ 2) * (A ^ 2 * R ^ 2 - 2 * A * B * R * Cos(Theta) * (A * Cos(Theta) - B * Sin(Theta)) _
W, t) G/ J' Y) b5 H$ `' \6 M + (2 * B * R - R ^ 2) * (A * Cos(Theta) - B * Sin(Theta)) ^ 2))) / (A ^ 2 + B ^ 2)( k# J6 @# b g4 y. f
Else
" C o* H: E, `( H P(I * 3 + 1) = (A * R * (B * Cos(Theta) + A * Sin(Theta)) _4 p2 U1 I: s; E+ A
+ B ^ 2 * (B * Sin(Theta) - A * Cos(Theta)) _) U8 \- [; y* ?! Y/ ? H: _5 ]
+ Sqr((A * R * (B * Cos(Theta) + A * Sin(Theta)) _
8 P8 Z( I6 @' h0 `5 } + B ^ 2 * (B * Sin(Theta) - A * Cos(Theta))) ^ 2 _
' d/ \# k: _: N' |6 j6 R4 i6 t - (A ^ 2 + B ^ 2) * (A ^ 2 * R ^ 2 - 2 * A * B * R * Cos(Theta) * (A * Cos(Theta) - B * Sin(Theta)) _
! a2 J8 u6 H4 M7 l; C3 E8 _9 p; R + (2 * B * R - R ^ 2) * (A * Cos(Theta) - B * Sin(Theta)) ^ 2))) / (A ^ 2 + B ^ 2)
; i6 K, d ^1 ?" Q' X- x: r End If/ w; q$ s1 k0 U( e2 P
P(I * 3) = (A * R - (A * Sin(Theta) + B * Cos(Theta)) * P(I * 3 + 1)) / (A * Cos(Theta) - B * Sin(Theta)) + O(0)* D, e x* Z, F
P(I * 3 + 1) = P(I * 3 + 1) + O(1)
* `0 T0 S& h/ j I = I + 1
) V5 D l7 A$ Y: t0 V' k6 ^! ^ End If
" `/ t9 y& P# y5 g9 a Loop4 L d/ C7 y5 _4 i8 w/ S4 F' n
.ModelSpace.AddCircle O, R '画内切圆
3 u* k) ?2 H: A' R/ F# d6 w( R .ModelSpace.AddSpline P, T1, T2 '画包络线
6 y8 ^! D+ R& ^6 ~$ S. e" f End With
5 j* Q! H/ D, w U4 r: f( Q$ _End Sub
6 b# ]. e; E! R* O F! I/ s9 E$ I' i" A' ~9 r4 c ~7 e: N" d" @; L
" Z5 n& _! @1 B8 {" z" h
$ v6 s; ^3 g; I, B! M: B
[ 本帖最后由 woaishuijia 于 2007-5-20 16:22 编辑 ] |
-
-
QX.rar
60.6 KB, 下载次数: 24
QX.dvb 主要演算过程.doc
评分
-
查看全部评分
|