def point_owned? p
    Error.call "Line::point_owned? : #{p} is not a valid Point" if !p.is_a?Point

    l = parametric()

    ux = (p.x - l[:x][:p]) / l[:x][:v]
    uy = (p.y - l[:y][:p]) / l[:y][:v]
    uz = (p.z - l[:z][:p]) / l[:z][:v]

    if l[:x][:v] == 0 and p.x == l[:x][:p]
      ux = uy
    end

    if l[:y][:v] == 0 and p.y == l[:y][:p]
      uy = uz
    end

    if l[:z][:v] == 0 and p.z == l[:z][:p]
      uz = ux
    end

    if ux == uy and ux == uz
      true
    else
      false
    end
  end
def point_owned? p
    Error.call "Line::point_owned? : #{p} is not a valid Point" if !p.is_a?Point

    l = parametric()

    ux = (p.x - l[:x][:p]) / l[:x][:v]
    uy = (p.y - l[:y][:p]) / l[:y][:v]
    uz = (p.z - l[:z][:p]) / l[:z][:v]

    if l[:x][:v] == 0 and p.x == l[:x][:p]
      ux = uy
    end

    if l[:y][:v] == 0 and p.y == l[:y][:p]
      uy = uz
    end

    if l[:z][:v] == 0 and p.z == l[:z][:p]
      uz = ux
    end

    if ux == uy and ux == uz
      true
    else
      false
    end
  end
== Parameters:
 point::
     Any point on the line. It must be a Point (../point/point.class.rb)
 param2::
     Any vector director of the line. It must be a Vector (../vector/vector.class.rb)
     It also can be a 2sd point of the line
 TODO : fix if if if if if
 Check if the point specified is ON the line
 == Parameter:
 p::
     p is a Point
 == Returns:
 true/false