发新话题
打印

[基础] 关于“下标越界”问题求助

关于“下标越界”问题求助

以下是一个凸轮轮廓曲线,总是有一句出现下标越界,请高手指教!多谢!


Dim G() As Double, H() As Double
Dim I As Double
Dim Q As Double
Dim Num As Double
Dim Q3 As Double
Const pi = 3.14159265358979
Const Con = pi / 180
'初始条件
e = 0.125
A = 80
L = 24
Q0 = 30
Q1 = 22
St = 2 '步长设定为2,可根据实际情况调整步长
I = 0
Num = 0
For I = 0 To 180 Step St
Q = I
Num = Num + 1
If I < 180 Then
Q3 = 2 * Atn((1 + e) ^ 2 / ((1 - e) ^ 2) * Tan(Q / 2))
ElseIf I = 180 Then
Q3 = 180
Else
Q3 = 180 + 2 * Atn((1 + e) ^ 2 / ((1 - e) ^ 2) * Tan(Q / 2))
G(Num) = -A * Cos(Q) + L * Cos(Q3 - Q0 - Q)
H(Num) = A * Sin(Q) + L * Sin(Q3 - Q0 - Q)
X(Num) = G(Num) * Cos(Q1) - H(Num) * Sin(Q1)
Y(Num) = G(Num) * Sin(Q1) + H(Num) * Cos(Q1)
End If
Next
Dim ef As Double
Dim First  As Boolean
First = True
Dim Tx, Ty '临时变量
ef = 0.01 '两相邻坐标点相对差
Open "X:\XX\曲线.txt" For Output As #1 '打开文件用来写入主滑道曲线坐标点
For m = 1 To Num - 1  '若相邻两点相同或太近,建模时会出错,因此排除这样的点,这里用e来判断,具体情况可改变该值
If Not (Abs((X(m) - X(m + 1)) / X(m)) < ef And Abs((Y(m) - Y(m + 1)) / Y(m)) < ef) Then
If First = True Then Tx = X(m): Ty = Y(m): First = False
Write #1, X(m), Y(m), 0
End If
Next m
Write #1, Tx, Ty, 0 '曲线首位点相同,封闭
Close

Set swApp = Application.SldWorks
End Sub

TOP

你按F8逐句的调试,你会发现你的数组根本没有付值。
下面的代码根本没有执行,执行的话也会下标越界的,因为你没有定义数组。
Q3 = 180 + 2 * Atn((1 + e) ^ 2 / ((1 - e) ^ 2) * Tan(Q / 2))
G(Num) = -A * Cos(Q) + L * Cos(Q3 - Q0 - Q)
H(Num) = A * Sin(Q) + L * Sin(Q3 - Q0 - Q)
X(Num) = G(Num) * Cos(Q1) - H(Num) * Sin(Q1)
Y(Num) = G(Num) * Sin(Q1) + H(Num) * Cos(Q1)
在使用数组的时候,注意要指定数组的长度,可以使用Redim语句.如 Redim G(10)
换个头像,看见广告就眼红,直接封ID。

TOP

多谢管理员,我再改一下试试!

TOP

发新话题