mirror of
				https://gitlab.com/klmp200/LO27.git
				synced 2025-10-31 01:03:06 +00:00 
			
		
		
		
	left/right/top/down rules
This commit is contained in:
		| @@ -153,3 +153,18 @@ bool AND(bool a, bool b){ | |||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | bool XOR(bool a, bool b){ | ||||||
|  | 	if (!(a && b) && (a||b)){ | ||||||
|  | 		return true; | ||||||
|  | 	} else { | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ErrorToFalse(bool x){ | ||||||
|  | 	if (x == ERROR){ | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 	return x; | ||||||
|  | } | ||||||
|   | |||||||
| @@ -161,4 +161,19 @@ bool OR(bool a, bool b); | |||||||
| */ | */ | ||||||
| bool AND(bool a, bool b); | bool AND(bool a, bool b); | ||||||
|  |  | ||||||
|  | /** | ||||||
|  | * Apply XOR operator to a bool a and a bool b | ||||||
|  | * @param a a bool | ||||||
|  | * @param b a bool | ||||||
|  | * @return result a and b | ||||||
|  | */ | ||||||
|  | bool XOR(bool a, bool b); | ||||||
|  |  | ||||||
|  | /** | ||||||
|  | * Return false if the bool is ERROR | ||||||
|  | * @param x a bool | ||||||
|  | * @return result a bool | ||||||
|  | */ | ||||||
|  | bool ErrorToFalse(bool x); | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -474,6 +474,104 @@ void FreeBooleanMatrix(BooleanMatrix matrix){ | |||||||
| 	free(matrix.data); | 	free(matrix.data); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Matrix basicRule(Matrix m, int incrh, int incrv){ | ||||||
|  | 	int i; | ||||||
|  | 	int j; | ||||||
|  | 	bool a; | ||||||
|  | 	bool b; | ||||||
|  | 	Matrix result = CreateMatrix(); | ||||||
|  |  | ||||||
|  | 	result.colCount = m.colCount; | ||||||
|  | 	result.rowCount = m.rowCount; | ||||||
|  |  | ||||||
|  | 	for (i=0; i < m.rowCount; i++){ | ||||||
|  | 		for (j = 0; j < m.colCount; j++){ | ||||||
|  | 			a = GetCellValue(m, j, i); | ||||||
|  | 			b = ErrorToFalse(GetCellValue(m, j + incrh, i + incrv)); | ||||||
|  | 			if (XOR(a, b)){ | ||||||
|  | 				SetCellValue(result, j, i, true); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Matrix leftRule(Matrix m){ | ||||||
|  | 	Matrix result = CreateMatrix(); | ||||||
|  | 	int i; | ||||||
|  | 	int j; | ||||||
|  |  | ||||||
|  | 	result.colCount = m.colCount; | ||||||
|  | 	result.rowCount = m.rowCount; | ||||||
|  |  | ||||||
|  | 	for (i=1;i<m.colCount;i++){ | ||||||
|  | 		for (j=0;j<m.rowCount;j++){ | ||||||
|  | 			if (GetCellValue(m, i, j)){ | ||||||
|  | 				SetCellValue(result, i - 1, j, true); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Matrix rightRule(Matrix m){ | ||||||
|  | 	Matrix result = CreateMatrix(); | ||||||
|  | 	int i; | ||||||
|  | 	int j; | ||||||
|  |  | ||||||
|  | 	result.colCount = m.colCount; | ||||||
|  | 	result.rowCount = m.rowCount; | ||||||
|  |  | ||||||
|  | 	for (i=0;i<m.colCount - 1;i++){ | ||||||
|  | 		for (j=0;j<m.rowCount;j++){ | ||||||
|  | 			if (GetCellValue(m, i, j)){ | ||||||
|  | 				SetCellValue(result, i + 1, j, true); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Matrix topRule(Matrix m){ | ||||||
|  | 	Matrix result = CreateMatrix(); | ||||||
|  | 	int i; | ||||||
|  | 	int j; | ||||||
|  |  | ||||||
|  | 	result.colCount = m.colCount; | ||||||
|  | 	result.rowCount = m.rowCount; | ||||||
|  |  | ||||||
|  | 	for (i=1;i<m.rowCount;i++){ | ||||||
|  | 		for (j=0;j<m.colCount;j++){ | ||||||
|  | 			if (GetCellValue(m, j, i)){ | ||||||
|  | 				SetCellValue(result, j, i - 1, true); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Matrix downRule(Matrix m){ | ||||||
|  | 	Matrix result = CreateMatrix(); | ||||||
|  | 	int i; | ||||||
|  | 	int j; | ||||||
|  |  | ||||||
|  | 	result.colCount = m.colCount; | ||||||
|  | 	result.rowCount = m.rowCount; | ||||||
|  |  | ||||||
|  | 	for (i=0;i<m.rowCount - 1;i++){ | ||||||
|  | 		for (j=0;j<m.colCount;j++){ | ||||||
|  | 			if (GetCellValue(m, j, i)){ | ||||||
|  | 				SetCellValue(result, j, i + 1, true); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return result; | ||||||
|  | } | ||||||
|  |  | ||||||
| /* todos : | /* todos : | ||||||
| *mulMatrix | *mulMatrix | ||||||
| * | * | ||||||
|   | |||||||
| @@ -230,6 +230,43 @@ Matrix andRowSequenceOnMatrix(Matrix m); | |||||||
| * @return matrix the copmuted matrix | * @return matrix the copmuted matrix | ||||||
| */ | */ | ||||||
| Matrix orRowSequenceOnMatrix(Matrix m); | Matrix orRowSequenceOnMatrix(Matrix m); | ||||||
|  |  | ||||||
|  | /** | ||||||
|  | * Apply XOR on a whole matrix | ||||||
|  | * @param m a matrix | ||||||
|  | * @param incrh the horizontal increment | ||||||
|  | * @param incrv the vertical increment | ||||||
|  | * @return matrix a new modified matrix | ||||||
|  | */ | ||||||
|  | Matrix basicRule(Matrix m, int incrh, int incrv); | ||||||
|  |  | ||||||
|  | /** | ||||||
|  | * Apply right rule on a matrix | ||||||
|  | * @param m a matrix | ||||||
|  | * @return matrix a new matrix | ||||||
|  | */ | ||||||
|  | Matrix rightRule(Matrix m); | ||||||
|  |  | ||||||
|  | /** | ||||||
|  | * Apply left rule on a matrix | ||||||
|  | * @param m a matrix | ||||||
|  | * @return matrix a new matrix | ||||||
|  | */ | ||||||
|  | Matrix leftRule(Matrix m); | ||||||
|  | /** | ||||||
|  | * Apply top rule on a matrix | ||||||
|  | * @param m a matrix | ||||||
|  | * @return matrix a new matrix | ||||||
|  | */ | ||||||
|  | Matrix topRule(Matrix m); | ||||||
|  |  | ||||||
|  | /** | ||||||
|  | * Apply down rule on a matrix | ||||||
|  | * @param m a matrix | ||||||
|  | * @return matrix a new matrix | ||||||
|  | */ | ||||||
|  | Matrix downRule(Matrix m); | ||||||
|  |  | ||||||
| Matrix sumMatrix(Matrix matrix1,Matrix matrix2); | Matrix sumMatrix(Matrix matrix1,Matrix matrix2); | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								main.c
									
									
									
									
									
								
							| @@ -9,7 +9,6 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <matrix.h> | #include <matrix.h> | ||||||
| #include <pixel.c> |  | ||||||
|  |  | ||||||
| int main(int argc, char **argv){ | int main(int argc, char **argv){ | ||||||
| 	int Rule = 256; | 	int Rule = 256; | ||||||
| @@ -17,12 +16,16 @@ int main(int argc, char **argv){ | |||||||
| 	Matrix matrix = CreateMatrix(); | 	Matrix matrix = CreateMatrix(); | ||||||
| 	Matrix m2; | 	Matrix m2; | ||||||
| 	Matrix m3; | 	Matrix m3; | ||||||
|  | 	Matrix m4; | ||||||
| 	BooleanMatrix bmatrix = CreateBooleanMatrix(5, 5); | 	BooleanMatrix bmatrix = CreateBooleanMatrix(5, 5); | ||||||
|  |  | ||||||
| 	bmatrix = RandomizeBooleanMatrix(bmatrix); | 	bmatrix = RandomizeBooleanMatrix(bmatrix); | ||||||
| 	m3 = newMatrix(bmatrix); | 	m3 = newMatrix(bmatrix); | ||||||
| 	FreeBooleanMatrix(bmatrix); | 	FreeBooleanMatrix(bmatrix); | ||||||
| 	BasicPrintMatrix(m3); | 	BasicPrintMatrix(m3); | ||||||
|  | 	m4 = downRule(m3); | ||||||
|  | 	BasicPrintMatrix(m4); | ||||||
|  | 	freeMatrix(m4); | ||||||
| 	freeMatrix(m3); | 	freeMatrix(m3); | ||||||
|  |  | ||||||
| 	applyRules(matrix,Rule,N); | 	applyRules(matrix,Rule,N); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user