Merge branch TeamCMU
random generator v2 + coor class
This commit is contained in:
@ -1,3 +1,4 @@
|
||||
#include "../../header.h"
|
||||
|
||||
//shifts puzzle piece one to the right
|
||||
void PuzzlePiece::shift(unsigned int moves)
|
||||
@ -191,7 +192,8 @@ void Puzzle::printPuzzle()
|
||||
}
|
||||
|
||||
//creates a legal puzzle out of random pieces
|
||||
void randomBox::createRandomPuzzle()
|
||||
|
||||
void randomBox::createRandomAbstraction1()
|
||||
{
|
||||
coor myCoor;
|
||||
PuzzlePiece temporaryRandomPiece(0);
|
||||
@ -204,11 +206,11 @@ void randomBox::createRandomPuzzle()
|
||||
//create random piece, set edges according to position and check if piece is good
|
||||
temporaryRandomPiece.randomCenterPiece();
|
||||
if(i==0)
|
||||
temporaryRandomPiece.setConnections(0b00111111 & temporaryRandomPiece.getConnections());
|
||||
temporaryRandomPiece.setConnections(0b00111111 & temporaryRandomPiece.getConnections());
|
||||
if(i==getRows()-1)
|
||||
temporaryRandomPiece.setConnections(0b11110011 & temporaryRandomPiece.getConnections());
|
||||
temporaryRandomPiece.setConnections(0b11110011 & temporaryRandomPiece.getConnections());
|
||||
if(j==0)
|
||||
temporaryRandomPiece.setConnections(0b11111100 & temporaryRandomPiece.getConnections());
|
||||
temporaryRandomPiece.setConnections(0b11111100 & temporaryRandomPiece.getConnections());
|
||||
if(j==getCols()-1)
|
||||
temporaryRandomPiece.setConnections(0b11001111 & temporaryRandomPiece.getConnections());
|
||||
|
||||
@ -217,23 +219,75 @@ void randomBox::createRandomPuzzle()
|
||||
if(PlaceOfPartGood(myCoor,temporaryRandomPiece))
|
||||
{
|
||||
temporaryRandomPiece.assignIdentifier();
|
||||
<<<<<<< HEAD
|
||||
setPiece(myCoor,temporaryRandomPiece);
|
||||
/*=======
|
||||
setPiece(j,i,temporaryRandomPiece);
|
||||
>>>>>>> 9b282e83caf9aaacea107f878d2d6b3f413f286b
|
||||
*/
|
||||
j++;
|
||||
Box.push_back(temporaryRandomPiece);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void randomBox::createRandomAbstraction2()
|
||||
{
|
||||
//get a picture
|
||||
cv::Mat PuzzlePicture = cv::imread("../../Codicil/Images/Balloons.jpg");
|
||||
if(! PuzzlePicture.data )
|
||||
{
|
||||
cout << "Could not open or find the image" << std::endl ;
|
||||
return;
|
||||
}
|
||||
//split a picture into mxn pieces
|
||||
cv::Size smallSize ((int)(PuzzlePicture.cols/getCols()) ,(int)(PuzzlePicture.rows/getRows()));
|
||||
// get the image data
|
||||
|
||||
vector<cv::Mat> smallChannels;
|
||||
unsigned int i=0,j=0;
|
||||
for ( int y=0; y<=PuzzlePicture.rows-smallSize.height; y += smallSize.height )
|
||||
{
|
||||
|
||||
for ( int x=0 ; x<=PuzzlePicture.cols-smallSize.width; x += smallSize.width )
|
||||
{
|
||||
//split into different ROIs
|
||||
cv::Rect rect = cv::Rect (x ,y , smallSize.width, smallSize.height );
|
||||
cv::Mat tmpSmallPicture = cv::Mat(PuzzlePicture,rect);
|
||||
cv::split(tmpSmallPicture, smallChannels);
|
||||
|
||||
//save color into individual PuzzlePieces in Matrix
|
||||
PuzzlePiece tmpPiece = getPiece(j,i);
|
||||
tmpPiece.r = cv::mean(smallChannels[0]).operator[](0);
|
||||
tmpPiece.g = cv::mean(smallChannels[1]).operator[](0);
|
||||
tmpPiece.b = cv::mean(smallChannels[2]).operator[](0);
|
||||
setPiece(j,i,tmpPiece);
|
||||
j++;
|
||||
}
|
||||
i++;
|
||||
j=0;
|
||||
}
|
||||
}
|
||||
|
||||
void randomBox::putAllIntoBox() {
|
||||
for (int i = 0; i < getRows(); i++)
|
||||
{
|
||||
for (int j = 0; j < getCols(); j++)
|
||||
{
|
||||
Box.push_back(getPiece(j,i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//prints a box contents on console
|
||||
void randomBox::printBox()
|
||||
{
|
||||
shuffle();
|
||||
for (vector<PuzzlePiece>::iterator i = Box.begin(); i != Box.end(); i++)
|
||||
for (vector<PuzzlePiece>::iterator i = Box.begin(); i != Box.end(); i++)
|
||||
{
|
||||
(*i).printPiece();
|
||||
cout << ' ';
|
||||
}
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
@ -241,8 +295,12 @@ void randomBox::printBox()
|
||||
vector<PuzzlePiece> randomBox::shuffle()
|
||||
{
|
||||
random_shuffle(Box.begin(),Box.end());
|
||||
for (vector<PuzzlePiece>::iterator i = Box.begin(); i != Box.end(); i++)
|
||||
(*i).shift(rand()%4);
|
||||
for (vector<PuzzlePiece>::iterator i = Box.begin(); i != Box.end(); i++)
|
||||
{
|
||||
i->shift(rand()%4);
|
||||
i->resetShift();
|
||||
}
|
||||
|
||||
numerateBox(Box);
|
||||
return Box;
|
||||
}
|
||||
@ -250,20 +308,32 @@ vector<PuzzlePiece> randomBox::shuffle()
|
||||
//creates a random box size m, n, shuffles it, and then retuns it
|
||||
vector<PuzzlePiece> createBox(coor myCoor)
|
||||
{
|
||||
/*
|
||||
<<<<<<< HEAD
|
||||
randomBox myFirstPuzzleBox(myCoor.m, myCoor.n);
|
||||
myFirstPuzzleBox.createRandomPuzzle();
|
||||
return myFirstPuzzleBox.shuffle();
|
||||
myFirstPuzzleBox.createRandomPuzzle();
|
||||
return myFirstPuzzleBox.shuffle();
|
||||
=======
|
||||
*/
|
||||
randomBox myFirstPuzzleBox(myCoor.m,myCoor.n);
|
||||
myFirstPuzzleBox.createRandomAbstraction1();
|
||||
myFirstPuzzleBox.createRandomAbstraction2();
|
||||
myFirstPuzzleBox.putAllIntoBox();
|
||||
|
||||
myFirstPuzzleBox.printPuzzle();
|
||||
return myFirstPuzzleBox.shuffle();
|
||||
//>>>>>>> 9b282e83caf9aaacea107f878d2d6b3f413f286b
|
||||
}
|
||||
|
||||
//prints contents of box
|
||||
void printBox(vector<PuzzlePiece> myBox)
|
||||
{
|
||||
cout << "current Box: " << endl;
|
||||
for (vector<PuzzlePiece>::iterator i = myBox.begin(); i != myBox.end(); i++)
|
||||
for (vector<PuzzlePiece>::iterator i = myBox.begin(); i != myBox.end(); i++)
|
||||
{
|
||||
(*i).printPiece();
|
||||
cout << ' ';
|
||||
}
|
||||
}
|
||||
cout << endl;
|
||||
return;
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
#include "../../header.h"
|
||||
|
||||
void status(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat);
|
||||
|
||||
|
||||
@ -66,15 +68,6 @@ bool next(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
coor calculateFirstCoor(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat)
|
||||
{
|
||||
//returns coor of first piece
|
||||
coor firstCoor(0,0);
|
||||
return firstCoor;
|
||||
}
|
||||
*/
|
||||
|
||||
coor calculateNextCoor(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box, Puzzle& puzzleMat)
|
||||
{
|
||||
//level 1:
|
||||
@ -135,10 +128,10 @@ void abstractionlayer1solver(vector<LogEntry>& log, vector<PuzzlePiece*>& p_Box,
|
||||
log.back().PieceCollector.erase(log.back().PieceCollector.begin()+i);
|
||||
else
|
||||
{
|
||||
i++; //otherwise loop stops before end!
|
||||
//set shift to 0 so that we have a defined starting position for all pieces
|
||||
while(log.back().PieceCollector[i]->getShift())
|
||||
log.back().PieceCollector[i]->shift(1);
|
||||
i++; //otherwise loop stops before end!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user