def compute_distances_between_two_points_set(points1, points2, check = None) : index = 0 distances = [] i = 0 li = [] while i < len(points1): p1 = points1[i] if index >= len(points2) - 1: break if check: if i < len(points1) - 1: if check(points2[index], points2[index+1], points1[i], points1[i+1]): logging.warn("crossing~") line = Line(points2[index], points2[index + 1]) pro = line.projection(p1) if is_projection_between_two_points(pro, points2[index], points2[index + 1]): distances.append(p1.distance(pro)) li.append([p1, pro]) index += 1 else: if pro.distance(points2[index + 1]) < pro.distance(points2[index]): i -= 1 index += 1 i += 1 return distances, li
def compute_distances_between_two_points_set(points1, points2) : index = 0 distances = [] i = 0 li = [] while i < len(points1): p1 = points1[i] if index >= len(points2) - 1: break line = Line(points2[index], points2[index + 1]) pro = line.projection(p1) if is_projection_between_two_points(pro, points2[index], points2[index + 1]): distances.append(p1.distance(pro)) li.append([p1, pro]) index += 1 else: if pro.distance(points2[index + 1]) < pro.distance(points2[index]): i -= 1 index += 1 i += 1 return distances, li
def project_on_line( line: Line, points: Iterable[ProjectedPoint]) -> List[ProjectedPoint]: some_line_point = line.p1 line_points = [] for current_point in points: projection = line.projection(current_point) if projection == some_line_point: line_coordinate = 0 else: dst_ray = Ray(some_line_point, projection) is_inversed = dst_ray.angle_between(line) != 0 line_coordinate = some_line_point.distance(projection) if is_inversed: line_coordinate = -line_coordinate line_points.append( SegmentsInLineFinder.ProjectedPoint(current_point, projection, line_coordinate)) line_points.sort(key=lambda point: point.line_coordinate) return line_points
def pointInLine(qPointF, qLineF): from sympy import Point, Line, Segment, Rational p1 = Point(qPointF.x(), qPointF.y()) l = Line(Point(qLineF.x1(), qLineF.y1()), Point(qLineF.x2(), qLineF.y2())) point2d = l.projection(p1) return QPointF(point2d[0], point2d[1])