Example #1
0
template <typename PointT, typename NormalT> int
pcl::RegionGrowing<PointT, NormalT>::growRegion (int initial_seed, int segment_number)
{
  std::queue<int> seeds;
  seeds.push (initial_seed);
  point_labels_[initial_seed] = segment_number;

  int num_pts_in_segment = 1;

  while (!seeds.empty ())
  {
    int curr_seed;
    curr_seed = seeds.front ();
    seeds.pop ();

    size_t i_nghbr = 0;
    while ( i_nghbr < neighbour_number_ && i_nghbr < point_neighbours_[curr_seed].size () )
    {
      int index = point_neighbours_[curr_seed][i_nghbr];
      if (point_labels_[index] != -1)
      {
        i_nghbr++;
        continue;
      }

      bool is_a_seed = false;
      bool belongs_to_segment = validatePoint (initial_seed, curr_seed, index, is_a_seed);

      if (belongs_to_segment == false)
      {
        i_nghbr++;
        continue;
      }

      point_labels_[index] = segment_number;
      num_pts_in_segment++;

      if (is_a_seed)
      {
        seeds.push (index);
      }

      i_nghbr++;
    }// next neighbour
  }// next seed

  return (num_pts_in_segment);
}
void RegionGrowingHSV::growRegion(int initial_seed, int segment_number,std::vector<std::vector<int> >& Area_cluster)
{
    std::queue<int> seeds;
    seeds.push (initial_seed);
    Area_cluster[segment_number].push_back(initial_seed);

    point_labels_[initial_seed] = segment_number;

    while (!seeds.empty ())
    {
        int curr_seed;
        curr_seed = seeds.front ();
        seeds.pop ();

        size_t i_nghbr = 0;
        while ( i_nghbr < point_neighbours_[curr_seed].size () )
        {
            int index = point_neighbours_[curr_seed][i_nghbr];
            if (point_labels_[index] != -1)
            {
                i_nghbr++;
                continue;
            }

            bool is_a_seed = false;
            bool belongs_to_segment = validatePoint (initial_seed, curr_seed, index, is_a_seed,segment_number,Area_cluster);

            if (belongs_to_segment == false)
            {
                i_nghbr++;
                continue;
            }

            Area_cluster[segment_number].push_back(index);
            point_labels_[index] = segment_number;

            if (is_a_seed)
            {
                seeds.push (index);
            }

            i_nghbr++;
        }// next neighbour
    }// next seed
}
Example #3
0
File: move.c Project: mplaton1/IPP
int getMovesCommands(board Game, Piece piece, Move *movesTable, Point point) {

    int n = 1;
    Move result = moveBuilder(point, piece, Game);
    int board_Size = boardSize(Game);
    int x = point->x;
    int y = point->y;

    result->command = MOVE;

    for (int j=-1; j<=1; j++) {
        for (int i=-1; i<=1; i++) {
            if ( (j != 0 ||
                  i != 0) &&
                 validatePoint(makePoint(x + i, y + j), board_Size)) {

                Piece piece1 = pieceOnPosition(Game, x + i, y + j);

                if (piece1 != NULL &&
                    piece1->owner == piece->owner) {
                    continue;
                }

                constructMoveCommand(x+i, y+j, result, Game);

                movesTable[n] = newMove();
                copyMoveData(movesTable[n], result);
                n++;
            }
        }
    }

    free(result);

    return n;
}
Example #4
0
File: move.c Project: mplaton1/IPP
int getPossibleMoves(board Game, Piece piece, Move *movesTable, Point point) {
    int n = 0;

    movesTable[n] = newMove();
    n++;

    if (piece->lastMove == currentTurn(Game)) {
        return n;
    }

    n = getMovesCommands(Game, piece, movesTable, point);

    Move result = moveBuilder(point, piece, Game);
    int board_Size = boardSize(Game);
    int x = point->x;
    int y = point->y;


    if (toupper(piece->letter) == 'C' &&
            currentTurn(Game) - piece->lastMove >=3 ) {
        for (int j=-1; j<=1; j++) {
            for (int i=-1; i<=1; i++) {
                if ( (j != 0 ||
                     i != 0) &&
                     validatePoint(makePoint(x + i, y + j), board_Size) &&
                     isPositionFree(Game, x + i, y + j)) {
                    result->xTo = x + i;
                    result->yTo = y + j;
                    result->isPieceRemoved= NULL;


                    char letter = piece->letter;
                    Piece pieceCreated = createNewPiece(piece->owner, letter,
                                                        currentTurn(Game));
                    result->isPieceCreated = pieceCreated;
                    result->command = PRODUCE_PEASANT;
                    movesTable[n] = newMove();
                    copyMoveData(movesTable[n], result);
                    n++;

                    free(result->isPieceCreated);

                    letter = matchingKnightLetter(letter);

                    pieceCreated = createNewPiece(piece->owner, letter,
                                                  currentTurn(Game) - 1);
                    result->isPieceCreated = pieceCreated;
                    result->command = PRODUCE_KNIGHT;
                    movesTable[n] = newMove();
                    copyMoveData(movesTable[n], result);
                    n++;

                    free(result->isPieceCreated);
                }
            }
        }
    }

    free(result);

    return n;
}