private Graph<Vec2r> build() {
        final Graph<Vec2r> visibilityGraph = new Graph<Vec2r>(false);

        final Collection<Vec2r> vertices = new ArrayList<Vec2r>(m_Segments.size());

        /* Adding segments vertices as graph vertics */
        for (final Segment segment : m_Segments) {
            if (visibilityGraph.addVertex(segment.getA()))
                vertices.add(segment.getA());

            if (visibilityGraph.addVertex(segment.getB()))
                vertices.add(segment.getB());
        }

        for (final Vec2r sourceVertex : vertices)
            for (final Vec2r destinationVertex : vertices)
                if (sourceVertex != destinationVertex)
                    if (areVerticesVisibleFromEachOther(sourceVertex, destinationVertex))
                        visibilityGraph.addEdge(sourceVertex, destinationVertex, Mathematics.distance(sourceVertex, destinationVertex));

        /* That's it */
        return visibilityGraph;
    } /* End of 'VisibilityGraph::buildVisibilityGraph' method */