def is_point_on_polyline_xy(point, polyline, tol=1e-6): """Determine if a point is on a polyline on the XY-plane. Parameters ---------- point : [float, float, float] | :class:`compas.geometry.Point` XY(Z) coordinates. polyline : sequence[point] | :class:`compas.geometry.Polyline` XY(Z) coordinates of the points of the polyline. tol : float, optional The tolerance for membership verification. Returns ------- bool True if the point is on the polyline. False otherwise. """ for i in range(len(polyline) - 1): a = polyline[i] b = polyline[i + 1] c = closest_point_on_segment_xy(point, (a, b)) if distance_point_point_xy(point, c) <= tol: return True return False
def is_point_on_polyline_xy(point, polyline, tol=1e-6): """Determine if a point is on a polyline on the XY-plane. Parameters ---------- point : sequence of float XY(Z) coordinates. polyline : sequence of sequence of float XY(Z) coordinates of the points of the polyline. tol : float, optional The tolerance for membership verification. Default is ``1e-6``. Returns ------- bool ``True`` if the point is on the polyline. ``False`` otherwise. """ for i in range(len(polyline) - 1): a = polyline[i] b = polyline[i + 1] c = closest_point_on_segment_xy(point, (a, b)) if distance_point_point_xy(point, c) <= tol: return True return False
def is_point_on_segment_xy(point, segment, tol=1e-6): """Determine if a point lies on a given line segment on the XY-plane. Parameters ---------- point : sequence of float XY(Z) coordinates of a point. segment : tuple, list XY(Z) coordinates of two points defining a segment. tol : float, optional A tolerance for membership verification. Default is ``1e-6``. Returns ------- bool ``True`` if the point is on the line segment. ``False`` otherwise. """ a, b = segment if not is_point_on_line_xy(point, segment, tol=tol): return False d_ab = distance_point_point_xy(a, b) if d_ab == 0: return False d_pa = distance_point_point_xy(a, point) d_pb = distance_point_point_xy(b, point) if d_pa + d_pb <= d_ab + tol: return True return False
def is_point_on_segment_xy(point, segment, tol=1e-6): """Determine if a point lies on a given line segment on the XY-plane. Parameters ---------- point : [float, float, float] | :class:`compas.geometry.Point` XY(Z) coordinates of a point. segment : [point, point] | :class:`compas.geometry.Line` XY(Z) coordinates of two points defining a segment. tol : float, optional A tolerance for membership verification. Returns ------- bool True if the point is on the line segment. False otherwise. """ a, b = segment if not is_point_on_line_xy(point, segment, tol=tol): return False d_ab = distance_point_point_xy(a, b) if d_ab == 0: return False d_pa = distance_point_point_xy(a, point) d_pb = distance_point_point_xy(b, point) if d_pa + d_pb <= d_ab + tol: return True return False
def is_point_in_circle_xy(point, circle): """Determine if a point lies in a circle lying on the XY-plane. Parameters ---------- point : [float, float, float] | :class:`compas.geometry.Point` XY(Z) coordinates of a point (Z will be ignored). circle : [point, float] Center and radius of the circle on the XY plane. Returns ------- bool True if the point lies in the circle. False otherwise. """ dis = distance_point_point_xy(point, circle[0]) if dis <= circle[1]: return True return False
def is_point_in_circle_xy(point, circle): """Determine if a point lies in a circle lying on the XY-plane. Parameters ---------- point : sequence of float XY(Z) coordinates of a 2D or 3D point (Z will be ignored). circle : tuple center, radius of the circle on the xy plane. Returns ------- bool ``True`` if the point lies in the circle. ``False`` otherwise. """ dis = distance_point_point_xy(point, circle[0]) if dis <= circle[1]: return True return False