7,762
社区成员
发帖
与我相关
我的任务
分享
公式推导:
任何一本数学手册、课本、Wiki、百度都能查到的椭圆方程(适用于题目所指情况):
x^2/b^2+y^2/a^2=1 (a>b>0)
公式变换(初中数学知识):
y^2/a^2=1-x^2/b^2
y^2=a^2*(1-x^2/b^2)
y=(a^2*(1-x^2/b^2))^0.5
PipeLong(51, 1, 15),测试程序输出的字符串:
A
A
AA
AA
AAA
AAAA
AAAAAA
AAAAAAAA
AAAAAAAAAA
AAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Private Sub Form_Load()
Dim tLongs() As Long
Dim tIndex As Long
tLongs() = PipeLong(150, 60, 15)
Text1.Text = ""
For tIndex = 0 To 14
Text1.Text = Text1.Text & String(tLongs(tIndex), "A") & vbCrLf
Next
End Sub
Public Function PipeLong(ByVal pPipeMax As Long, ByVal pPipeMin As Long, ByVal pCount As Long, Optional ByVal pUnValue As Boolean = False) As Long()
'PipeLong函数
'语法:[tOutValues()] = PipeLong(pPipeMax, pPipeMin, pCount[, pUnValue]) As Long()
'功能:产生椭圆曲线管组长度数据。
'参数: long pPipeMax 必要参数,管最长值。
' long pPipeMin 必要参数,管最短值。
' long pCount 必要参数,管数量。
' boolean pUnValue 可选参数,反向曲线。
'输出: long tOutValues()管长数组,数组元素从0到pCount - 1
Dim tOutValues() As Long '输出数组
Dim tOutValues_Length As Long '输出数组逻辑数
Dim tOutValues_Index As Long '输出数组逻辑数
tOutValues_Length = pCount - 1
ReDim tOutValues(tOutValues_Length)
Dim tPipeAbs As Long '管组相对长度
tPipeAbs = Abs(pPipeMax - pPipeMin)
For tOutValues_Index = 0 To tOutValues_Length
If pUnValue Then
tOutValues(tOutValues_Index) = pPipeMin + EllipseY(tOutValues_Index, tPipeAbs, tOutValues_Length)
Else
tOutValues(tOutValues_Index) = pPipeMax - EllipseY(tOutValues_Index, tPipeAbs, tOutValues_Length)
End If
Next
PipeLong = tOutValues()
End Function
Public Function EllipseY(ByVal pX As Long, ByVal pA As Long, ByVal pB As Long)
EllipseY = (pA ^ 2 * (1 - (pX ^ 2) / (pB ^ 2))) ^ 0.5
End Function