def rotate a
      if a == nil
        Error.call "Angle is invalid"
      end

      rad = Math::PI * a.to_f / 180.0
      cpy = self # copy to have the same value in z
      cpy.z = 0.0
      s = Matrix.new [[ Math.cos(rad), -Math.sin(rad), 0], [Math.sin(rad), Math.cos(rad), 0], [0, 0, 1]]
      @matrix_op = s

      puts "rotation d'angle #{a.to_f}" if @verbose

      return (s * cpy.to_matrix).to_vector
    end
def rotate a
      if a == nil
        Error.call "Angle is invalid"
      end

      rad = Math::PI * a.to_f / 180.0
      cpy = self # copy to have the same value in z
      cpy.z = 0.0
      s = Matrix.new [[ Math.cos(rad), -Math.sin(rad), 0], [Math.sin(rad), Math.cos(rad), 0], [0, 0, 1]]
      @matrix_op = s

      puts "rotation d'angle #{a.to_f}" if @verbose

      return (s * cpy.to_matrix).to_vector
    end
== Parameters:
 a::
     The angle in degree

 == Return value:
 It returns the vector after the translation.