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_arc_graph(core_parse, circle, circle_variable, circle_points):
    """
    Directional arc graph.

    :param core_parse:
    :param circle:
    :return:
    """
    eps = CIRCLE_EPS
    arc_graph = nx.DiGraph()
    for key0, key1 in itertools.permutations(circle_points, 2):
        p0, p1 = circle_points[key0], circle_points[key1]
        arc = instantiators['arc'](circle, p0, p1)
        v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[
            key1]
        var = FormulaNode(signatures['Arc'], [circle_variable, v0, v1])
        if instance_exists(core_parse, arc):
            arc_points = {}
            for key in set(circle_points).difference({key0, key1}):
                point = circle_points[key]
                if distance_between_arc_and_point(arc, point) <= eps:
                    arc_points[key] = point
            arc_graph.add_edge(key0,
                               key1,
                               instance=arc,
                               points=arc_points,
                               variable=var)
    return arc_graph
Example #3
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
Example #4
0
def _get_arc_graph(diagram_parse, circle, circle_points):
    """
    Directional arc graph.

    :param diagram_parse:
    :param circle:
    :return:
    """
    eps = CIRCLE_EPS
    arc_graph = nx.DiGraph()
    for key0, key1 in itertools.permutations(circle_points, 2):
        p0, p1 = circle_points[key0], circle_points[key1]
        arc = instantiators['arc'](circle, p0, p1)
        if instance_exists(diagram_parse, arc):
            arc_points = {}
            for key in set(circle_points).difference({key0, key1}):
                point = circle_points[key]
                if distance_between_arc_and_point(arc, point) <= eps:
                    arc_points[key] = point
            arc_graph.add_edge(key0, key1, instance=arc, points=arc_points)
    return arc_graph
Example #5
0
def _get_arc_graph(core_parse, circle, circle_variable, circle_points):
    """
    Directional arc graph.

    :param core_parse:
    :param circle:
    :return:
    """
    eps = CIRCLE_EPS
    arc_graph = nx.DiGraph()
    for key0, key1 in itertools.permutations(circle_points, 2):
        p0, p1 = circle_points[key0], circle_points[key1]
        arc = instantiators['arc'](circle, p0, p1)
        v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[key1]
        var = FormulaNode(signatures['Arc'], [circle_variable, v0, v1])
        if instance_exists(core_parse, arc):
            arc_points = {}
            for key in set(circle_points).difference({key0, key1}):
                point = circle_points[key]
                if distance_between_arc_and_point(arc, point) <= eps:
                    arc_points[key] = point
            arc_graph.add_edge(key0, key1, instance=arc, points=arc_points, variable=var)
    return arc_graph