def interpolate(astr)
      pvs = Array.new

      begin
        tc, idx_sub = norm_time(astr)
        n_item = astr == 14 ? 2 : 3  # 要素数
        i_ipt  = astr > 13 ? astr - 3 : astr - 1
        i_coef = astr > 13 ? astr - 3 : astr - 1

        # 位置
        ary_p = [1, tc]
        2.upto(@bin[:ipts][i_ipt][1] - 1) do |i|
          ary_p << 2 * tc * ary_p[-1] - ary_p[-2]
        end  # 各項
        0.upto(n_item - 1) do |i|
          val = 0
          0.upto(@bin[:ipts][i_ipt][1] - 1) do |j|
            val += @bin[:coeffs][i_coef][idx_sub][i][j] * ary_p[j]
          end
          val /= @bin[:au] if !@km && astr < 14
          pvs << val
        end  # 値

        # 速度
        ary_v = [0, 1, 2 * 2 * tc]
        3.upto(@bin[:ipts][i_ipt][1] - 1) do |i|
          ary_v << 2 * tc * ary_v[-1] + 2 * ary_p[i - 1] - ary_v[-2]
        end  # 各項
        0.upto(n_item - 1) do |i|
          val = 0
          0.upto(@bin[:ipts][i_ipt][1] - 1) do |j|
            val += @bin[:coeffs][i_coef][idx_sub][i][j] * ary_v[j] * 2 * @bin[:ipts][i_ipt][2] / @bin[:sss][2].to_f
          end
          if astr < 14
            val /= @bin[:au] unless @km
            val /= 86400.0 if @km
          end
          pvs << val
        end  # 値

        return pvs
      rescue => e
        raise
      end
    end
def interpolate(astr)
      pvs = Array.new

      begin
        tc, idx_sub = norm_time(astr)
        n_item = astr == 14 ? 2 : 3  # 要素数
        i_ipt  = astr > 13 ? astr - 3 : astr - 1
        i_coef = astr > 13 ? astr - 3 : astr - 1

        # 位置
        ary_p = [1, tc]
        2.upto(@bin[:ipts][i_ipt][1] - 1) do |i|
          ary_p << 2 * tc * ary_p[-1] - ary_p[-2]
        end  # 各項
        0.upto(n_item - 1) do |i|
          val = 0
          0.upto(@bin[:ipts][i_ipt][1] - 1) do |j|
            val += @bin[:coeffs][i_coef][idx_sub][i][j] * ary_p[j]
          end
          val /= @bin[:au] if !@km && astr < 14
          pvs << val
        end  # 値

        # 速度
        ary_v = [0, 1, 2 * 2 * tc]
        3.upto(@bin[:ipts][i_ipt][1] - 1) do |i|
          ary_v << 2 * tc * ary_v[-1] + 2 * ary_p[i - 1] - ary_v[-2]
        end  # 各項
        0.upto(n_item - 1) do |i|
          val = 0
          0.upto(@bin[:ipts][i_ipt][1] - 1) do |j|
            val += @bin[:coeffs][i_coef][idx_sub][i][j] * ary_v[j] * 2 * @bin[:ipts][i_ipt][2] / @bin[:sss][2].to_f
          end
          if astr < 14
            val /= @bin[:au] unless @km
            val /= 86400.0 if @km
          end
          pvs << val
        end  # 値

        return pvs
      rescue => e
        raise
      end
    end
=========================================================================
 Interpolate by Chebyshev's Polynomial

 * Case astro-no
     1 ... 13: Position and velocity of x, y, z (6 items)
           14: Angular position and volocity of delta Psi, delta Epsilon (4 items)
           15: Angular position and volocity of Phi, Theta, Psi (6 items)
 * If astro-no = 12, then location and volocity of x, y, z are all 0.0.

 @param:  astr (= astronomical no)
 @return: pvs = [
   x-position, y-position, z-position,
   x-velocity, y-velocity, z-velocity
 ]
   Case: 14:Nutation
     pvs = [
       delta-psi-angular-position, delta-epsilon-angular-position,
       delta-psi-angular-velocity, delta-epsilon-angular-velocity
     ]
   Case: 15:Libration
     pvs = [
       phi-angular-position,  theta-angular-position, psi-angular-position,
       phi-angular-velocity,  theta-angular-velocity, psi-angular-velocity
     ]
=========================================================================