Пример #1
0
void testEdgeID()
{
	const int width = 4, height = 6;

	std::set<int> seen;

	for(int y = 0; y < height; ++y) {
		for(int x = 0; x < width; ++x) {

			if(x < width - 1) {
				auto horiz = Edge::horizontal({x, y});
				int horizID = edgeID(width, height, horiz);
				auto reconHorizEdge = edge(width, height, horizID);
				assert(!seen.count(horizID));
				seen.insert(horizID);
				assert(reconHorizEdge == horiz);

				std::cout << horiz << " -> " << horizID << " -> " << reconHorizEdge << "\n";
			}



			if(y < height - 1) {
				auto vert = Edge::vertical({x, y});
				int vertID = edgeID(width, height, vert);
				auto reconVertEdge = edge(width, height, vertID);
				assert(!seen.count(vertID));
				seen.insert(vertID);
				assert(reconVertEdge == vert);
	
				std::cout << vert << " -> " << vertID << " -> " << reconVertEdge << "\n";
			}
		}
	}
}
Пример #2
0
// -------------------------------------------------------------------------
double Pgr_trspHandler::construct_path(int64_t ed_id, Position pos) {
    pgassert(pos != ILLEGAL);

    if (m_parent[ed_id].isIllegal(pos)) {
        Path_t pelement;
        auto cur_edge = &m_edges[ed_id];
        if (pos == RC_EDGE) {
            pelement.node = cur_edge->startNode();
            pelement.cost = cur_edge->cost();
        } else {
            pelement.node = cur_edge->endNode();
            pelement.cost = cur_edge->r_cost();
        }
        pelement.edge = cur_edge->edgeID();

        m_path.push_back(pelement);
        pgassert(m_path.start_id() == m_start_vertex);
        return pelement.cost;
    }

    double ret = construct_path(m_parent[ed_id].e_idx[pos],
        m_parent[ed_id].v_pos[pos]);
    Path_t pelement;
    auto cur_edge = &m_edges[ed_id];
    if (pos == RC_EDGE) {
        pelement.node = cur_edge->startNode();
        pelement.cost = m_dCost[ed_id].endCost - ret;
        ret = m_dCost[ed_id].endCost;
    } else {
        pelement.node = cur_edge->endNode();
        pelement.cost = m_dCost[ed_id].startCost - ret;
        ret = m_dCost[ed_id].startCost;
    }
    pelement.edge = cur_edge->edgeID();

    m_path.push_back(pelement);

    return ret;
}
Пример #3
0
int edgeID(int width, int height, const Edge &e)
{
	return edgeID(width, height, e.p1.x, e.p1.y, e.p2.x, e.p2.y);
}