Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
    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])