Exemplo n.º 1
0
def _get_line_graph(core_parse):
    """
    line graph is a non-directional graph.
    Nodes are indexed by intersection points.
    Note that angles, triangles, and quadrilaterals can be parsed from this graph.
    :param core_parse:
    :param eps:
    :return:
    """
    eps = LINE_EPS
    line_graph = nx.Graph()

    for key0, key1 in itertools.combinations(core_parse.intersection_points, 2):
        p0, p1 = core_parse.intersection_points[key0], core_parse.intersection_points[key1]
        line = instantiators['line'](p0, p1)
        v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[key1]
        var = FormulaNode(signatures['Line'], [v0, v1])
        if instance_exists(core_parse, line):
            points = {}
            for key in set(core_parse.intersection_points).difference({key0, key1}):
                point = core_parse.intersection_points[key]
                if distance_between_line_and_point(line, point) <= eps:
                    points[key] = point
            line_graph.add_edge(key0, key1, instance=line, points=points, variable=var)
    return line_graph
def _get_line_graph(core_parse):
    """
    line graph is a non-directional graph.
    Nodes are indexed by intersection points.
    Note that angles, triangles, and quadrilaterals can be parsed from this graph.
    :param core_parse:
    :param eps:
    :return:
    """
    eps = LINE_EPS
    line_graph = nx.Graph()

    for key0, key1 in itertools.combinations(core_parse.intersection_points,
                                             2):
        p0, p1 = core_parse.intersection_points[
            key0], core_parse.intersection_points[key1]
        line = instantiators['line'](p0, p1)
        v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[
            key1]
        var = FormulaNode(signatures['Line'], [v0, v1])
        if instance_exists(core_parse, line):
            points = {}
            for key in set(core_parse.intersection_points).difference(
                {key0, key1}):
                point = core_parse.intersection_points[key]
                if distance_between_line_and_point(line, point) <= eps:
                    points[key] = point
            line_graph.add_edge(key0,
                                key1,
                                instance=line,
                                points=points,
                                variable=var)
    return line_graph
Exemplo n.º 3
0
def _line_exists(diagram_parse, line):
    # TODO : smarter line_exists function needed (check continuity, etc.)
    eps = LINE_EPS
    multiplier = 1.0
    assert isinstance(diagram_parse, CoreParse)
    pixels = diagram_parse.primitive_parse.image_segment_parse.diagram_image_segment.pixels
    near_pixels = set(pixel for pixel in pixels if distance_between_line_and_point(line, pixel) <= eps)
    length = line_length(line)
    ratio = float(len(near_pixels))/length
    if ratio < multiplier:
        return False
    return True
Exemplo n.º 4
0
def _line_exists(diagram_parse, line):
    # TODO : smarter line_exists function needed (check continuity, etc.)
    eps = LINE_EPS
    multiplier = 1.0
    assert isinstance(diagram_parse, CoreParse)
    pixels = diagram_parse.primitive_parse.image_segment_parse.diagram_image_segment.pixels
    near_pixels = set(pixel for pixel in pixels
                      if distance_between_line_and_point(line, pixel) <= eps)
    length = line_length(line)
    ratio = float(len(near_pixels)) / length
    if ratio < multiplier:
        return False
    return True
def Secant(line, circle):
    d = distance_between_line_and_point(line, circle.center)
    return Ge(circle.radius, d)
def _distance_from_point(point, primitive):
    if isinstance(primitive, instantiators['line']):
        return distance_between_line_and_point(primitive, point)
    elif isinstance(primitive, instantiators['circle']):
        return distance_between_circle_and_point(primitive, point)
Exemplo n.º 7
0
def test_distance_between_line_and_point():
    a = instantiators['point'](0, 68)
    b = instantiators['point'](112, 18)
    c = instantiators['point'](0, 69)
    line = instantiators['line'](a, b)
    print(distance_between_line_and_point(line, c))
Exemplo n.º 8
0
def _distance_from_point(point, primitive):
    if isinstance(primitive, instantiators['line']):
        return distance_between_line_and_point(primitive, point)
    elif isinstance(primitive, instantiators['circle']):
        return distance_between_circle_and_point(primitive, point)
Exemplo n.º 9
0
def Tangent(line, circle):
    d = distance_between_line_and_point(line, circle.center)
    return Equals(d, circle.radius)
Exemplo n.º 10
0
def test_distance_between_line_and_point():
    a = instantiators['point'](0, 68)
    b = instantiators['point'](112, 18)
    c = instantiators['point'](0, 69)
    line = instantiators['line'](a, b)
    print(distance_between_line_and_point(line, c))
Exemplo n.º 11
0
def Tangent(line, circle):
    d = distance_between_line_and_point(line, circle.center)
    return Equals(d, circle.radius)