コード例 #1
0
ファイル: main.cpp プロジェクト: Bk8/BeamTracing
void buildEnvironment()
{
    /*
    *----*----*--------*
    |    |    |        |
    |  A .    |   D    |
    |    |    |        |
    *----*  C |        |
    |    |    *---   --*
|  B .   .             |
    |    |    .   E    |
    *----*-------------*
    */
    
    // Points
    env.addPoint(core::Pointf(0, 0));     // 0
    env.addPoint(core::Pointf(0, 10));    // 1
    env.addPoint(core::Pointf(10, 10));   // 2
    env.addPoint(core::Pointf(10, 0));    // 3
    env.addPoint(core::Pointf(5, 0));     // 4
    env.addPoint(core::Pointf(10, -10));  // 5
    env.addPoint(core::Pointf(0, -10));   // 6
    env.addPoint(core::Pointf(-5, -10));  // 7
    env.addPoint(core::Pointf(-5, -7));   // 8
    env.addPoint(core::Pointf(-10, -10)); // 9
    env.addPoint(core::Pointf(-10, 0));   // 10
    env.addPoint(core::Pointf(-5, 0));    // 11
    env.addPoint(core::Pointf(-5, -3));   // 12
    env.addPoint(core::Pointf(-5, 3));    // 13
    env.addPoint(core::Pointf(-10, 10));  // 14
    env.addPoint(core::Pointf(-5, 10));   // 15
    env.addPoint(core::Pointf(-5, 7));    // 16
    env.addPoint(core::Pointf(3, 0));     // 17
    
    // Walls
    env.addWall(Wall (14, 10, 0.0));       // 0    
    env.addWall(Wall (15, 14, 0.0));       // 1    
    env.addWall(Wall (1, 15, 0.0));        // 2    
    env.addWall(Wall (2, 1, 0.0));         // 3    
    env.addWall(Wall (3, 2, 0.0));         // 4    
    env.addWall(Wall (5, 3, 0.0));         // 5    
    env.addWall(Wall (6, 5, 0.0));         // 6    
    env.addWall(Wall (7, 6, 0.0));         // 7    
    env.addWall(Wall (9, 7, 0.0));         // 8    
    env.addWall(Wall (10, 9, 0.0));        // 9    
    env.addWall(Wall (10, 11, 0.0));       // 10    
    env.addWall(Wall (15, 16, 0.0));       // 11
    env.addWall(Wall (13, 11, 0.0));       // 12
    env.addWall(Wall (11, 12, 0.0));       // 13
    env.addWall(Wall (8, 7, 0.0));         // 14
    env.addWall(Wall (0, 1, 0.0));         // 15
    env.addWall(Wall (17, 0, 0.0));        // 16
    env.addWall(Wall (3, 4, 0.0));         // 17
    env.addWall(Wall (8, 12, INFINITY));  // 18
    env.addWall(Wall (0, 6, INFINITY));   // 19
    env.addWall(Wall (17, 4, INFINITY));  // 20
    env.addWall(Wall (16, 13, INFINITY)); // 21
    
    // Rooms
    Room rA, rB, rC, rD, rE;
    rA.setIdx(0);
    rB.setIdx(1);
    rC.setIdx(2);
    rD.setIdx(3);
    rE.setIdx(4);
    
    // Room A
    rA.addWall(0,   1);
    rA.addWall(1,   1);
    rA.addWall(11, -1);
    rA.addWall(21, -1);
    rA.addWall(12, -1);
    rA.addWall(10,  1);
    
    env.addRoom(rA);
    
    // Room B
    rB.addWall(8,   1);
    rB.addWall(14, -1);
    rB.addWall(18,  1);
    rB.addWall(13, -1);
    rB.addWall(10, -1);
    rB.addWall(9,   1);
    
    env.addRoom(rB);

    // Room C
    rC.addWall(2,   1);
    rC.addWall(11,  1);
    rC.addWall(21,  1);
    rC.addWall(12,  1);
    rC.addWall(13,  1);
    rC.addWall(18, -1);
    rC.addWall(14,  1);
    rC.addWall(7,   1);
    rC.addWall(19, -1);
    rC.addWall(15,  1);
    
    env.addRoom(rC);

    // Room D
    rD.addWall(3,   1);
    rD.addWall(20,  1);
    rD.addWall(16, -1);
    rD.addWall(15, -1);
    rD.addWall(17, -1);
    rD.addWall(4,   1);
    
    env.addRoom(rD);
    
    // Room E
    rE.addWall(17, 1);
    rE.addWall(20, -1);
    rE.addWall(16,  1);
    rE.addWall(19,  1);
    rE.addWall(6,   1);
    rE.addWall(5,   1);
    
    env.addRoom(rE);
    
    Source src(rD, core::Pointf(5, 5));
    env.setSource(src);
    
    std::vector<std::vector<Environment::GraphNode> > adj;
    adj.resize(env.getRooms().size());
    env.buildAdjacencyGraph(adj);
    
    env.DFS(adj, src.getInsideRoom().getRoomIdx());
    
    env.filterValidPaths(2);
    env.getValidPaths()->getNumberOfLeaves(env.getValidPaths()->_root, numberOfPaths);
    env.getValidPaths()->getDepth(env.getValidPaths()->_root, maximumDepth, 0);
    
    std::cout << numberOfPaths << " valid paths found" << std::endl;
    std::cout << "Depth: " << maximumDepth << std::endl;
}