已知有15根塑料管
假设第一个长为150   最后一根长为60,中间的塑料管长度各为多少时,使塑料管从第一根到第十五根,排列起来看起来有弧度呢. 可以类似于抛物线弧度. 高手请赐教,非常感谢

解决方案 »

  1.   

    嗯,是
    假设列表间隔为 50MM, 第一根为150MM,最后一根为60MM,总共有15根塑料管(包括最大最小两根). 
      

  2.   


    其实不难,数学问题。比如你利用椭圆曲线,其短半轴是最长和最短塑料管的长度差,长半轴是它们之间的距离。1 得到椭圆曲线公式。
    2 算出每根塑管与最长管的距离 X, 带入公式,求得 Y。
    3 Y + 短管长度就是这根管的长度。
      

  3.   


    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 SubPublic 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 FunctionPublic 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
      

  4.   


    PipeLong(51, 1, 15),测试程序输出的字符串:A
    A
    AA
    AA
    AAA
    AAAA
    AAAAAA
    AAAAAAAA
    AAAAAAAAAA
    AAAAAAAAAAAAA
    AAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
      

  5.   


    公式推导:任何一本数学手册、课本、Wiki、百度都能查到的椭圆方程(适用于题目所指情况):
    x^2/b^2+y^2/a^2=1 (a>b>0)公式变换(初中数学知识):y^2/a^2=1-x^2/b^2y^2=a^2*(1-x^2/b^2)y=(a^2*(1-x^2/b^2))^0.5