


// *** Type for later use

struct Region {
	double myX, myY;
	unsigned myArea;
	char enabled;
	char accounted;  // used for tracking
	Region *myMerged;
	Region() {
		myArea = 0;
		myX = myY = 0;
		accounted = 0;
		enabled = 1;
	}	
	Region(int x, int y) {
		myArea = 1;
		myX = x;
		myY = y;
		accounted = 0;
		enabled = 1;
	}
	void init() {
		myArea = 0;
		myX = myY = 0;
		accounted = 0;
		enabled = 1;
	}
	void init(int x, int y) {
		myArea = 1;
		myX = x;
		myY = y;
		accounted = 0;
		enabled = 1;
	}
	void addNewPixel(int x, int y) {
		myX = double(myArea*myX + x)/double(myArea+1);
		myY = double(myArea*myY + y)/double(myArea+1);
		myArea++;
	}
		

};
/*
struct Touch {
	int numRegions;
	int reg1[4], reg2[4];
	int *myRegion, *myLastRegion;
	Touch() {
		numRegions = 0;
		myRegion = reg1;
		myLastRegion = reg2;
	}
	void init() {
		numRegions = 0;
		myRegion = reg1;
		myLastRegion = reg2;
	}
	void swapLast() {
		int *swap = myRegion;
		myRegion = myLastRegion;
		myLastRegion = swap;
	}
}
*/


/*

// Alternate form, using Region* arrays instead of int
struct Touch {
	int numRegions;
	Region *reg1[4], *reg2[4];
	Region **myRegion, **myLastRegion;
	Touch() {
		numRegions = 0;
		myRegion = reg1;
		myLastRegion = reg2;
	}
	void init() {
		numRegions = 0;
		myRegion = reg1;
		myLastRegion = reg2;
	}
	void swapLast() {
		Region *swap = myRegion;
		myRegion = myLastRegion;
		myLastRegion = swap;
	}
}

*/


// info about the current touch:

int touchType;



int cxMin, cxMax, cyMin, cyMax;
CvSize cSize;

char currentAccount;
char accounted[1000][1000];


int checkCount = 0, cmCount = 0;







