def distance(target)
      # with Point
      if(target.kind_of?(Vector3))
        return distance_to_point(target)
      #with Line
      elsif(target.kind_of?(Line))
        return distance_to_line(target)
      #with FiniteLine
      elsif(target.kind_of?(FiniteLine))
        return distance_to_finite_line(target)
      #with Plane
      elsif(target.kind_of?(Plane))
        return distance_to_plane(target)
      end
      Util3D.raise_argurment_error(target)
    end
def distance(target)
      # with Point
      if(target.kind_of?(Vector3))
        return distance_to_point(target)
      #with Line
      elsif(target.kind_of?(Line))
        return distance_to_line(target)
      #with FiniteLine
      elsif(target.kind_of?(FiniteLine))
        return distance_to_finite_line(target)
      #with Plane
      elsif(target.kind_of?(Plane))
        return distance_to_plane(target)
      end
      Util3D.raise_argurment_error(target)
    end
This function returns closest distance between Line and anothor element.
 [Input]
  _target_ should be Vector3 or Line or FiniteLine or Plane.

 [Output]
  [in case _target_ is Vector3]
   return "distance, closest point on myself" as [Numeric, Vector3].
  [in case _target_ is Line]
   return "distance, intersect point, parameter on tatget" as [Numeric, Vector3, Numeric].
  [in case _target_ is FiniteLine]
   return "distance, point on plane, point on target, parameter on target"
   as [Numeric, Vector3, Vector3, Numeric].
  [in case _target_ is Plane]
   return "distance, intersect line" as [Numeric, Vector3].