def *(matrix)
    #produit matriciel
    #convert vector -> matrix
    if matrix.is_a?Vector
      Error.call "Matrix::* : Transformation implicite de Vector en Matrix", Error::ERR_LOW
      matrix = matrix.to_matrix
    end

    if matrix.is_a?Matrix
      Error.call "Matrix::* : Invalid multiplication at line #{matrix.lines} and column #{@columns}", Error::ERR_HIGH if @columns != matrix.lines

      result = []
      @lines.times do |i|
        result << []
      end
      #colonne de resultat = colonne de matrix X
      #ligne de resutlat = ligne de self Y
      @lines.times do |y|
        matrix.columns.times do |x|
          result[y][x] = Matrix.mult_array(get_line(y), matrix.get_column(x))
        end
      end

      return Matrix.new result
    #produit d'un entier et d'une matrix
    elsif matrix.is_a?Numeric
      result = @v
      @lines.times do |x|
        @columns.times do |y|
          result[x][y] = result[x][y].to_f * matrix
        end
      end
    return Matrix.new result
    #message d'erreur
    else
      Error.call "Matrix::* : Impossible de calculer cela (#{matrix} n'est pas une matrix)", Error::ERR_HIGH
    end
  end
def *(matrix)
    #produit matriciel
    #convert vector -> matrix
    if matrix.is_a?Vector
      Error.call "Matrix::* : Transformation implicite de Vector en Matrix", Error::ERR_LOW
      matrix = matrix.to_matrix
    end

    if matrix.is_a?Matrix
      Error.call "Matrix::* : Invalid multiplication at line #{matrix.lines} and column #{@columns}", Error::ERR_HIGH if @columns != matrix.lines

      result = []
      @lines.times do |i|
        result << []
      end
      #colonne de resultat = colonne de matrix X
      #ligne de resutlat = ligne de self Y
      @lines.times do |y|
        matrix.columns.times do |x|
          result[y][x] = Matrix.mult_array(get_line(y), matrix.get_column(x))
        end
      end

      return Matrix.new result
    #produit d'un entier et d'une matrix
    elsif matrix.is_a?Numeric
      result = @v
      @lines.times do |x|
        @columns.times do |y|
          result[x][y] = result[x][y].to_f * matrix
        end
      end
    return Matrix.new result
    #message d'erreur
    else
      Error.call "Matrix::* : Impossible de calculer cela (#{matrix} n'est pas une matrix)", Error::ERR_HIGH
    end
  end
== Parameters:
 matrix::
   This argument is a Matrix or an Integer.
   If it's a Matrix, it will do matrix product.
   Else, if it's a integer, it will multiply each coeficient of the current Matrix.

 == Returns:
 Matrix

 == Matrix_Product:
 little explanation::
   If matrix is a Matrix, we will multiply 2by2 each coeficient of the column X of the current Matrix and the line X of matrix.
   Then, we do the sum of them and we put it in a new Matrix at the position X. The is just a sum up, view the details on wiki bitch.