+ const float A1 = 1.0;\r
+ const float A2 = 0.0;\r
+ const float B1 = -1.0 / 2.0;\r
+ const float B2 = sqrt(3.0) / 2.0;\r
+ const float C1 = -1.0 / 2.0;\r
+ const float C2 = -sqrt(3.0) / 2.0;\r
+\r
+ //const float epsilon = 0.1;\r
+\r
+ float nearest_current_solution_distance = FLT_MAX;\r
+ Solution nearest_current_solution = A;\r
+\r
+ for (int i = 0; i < this->n; i++)\r
+ {\r
+ float distance_to_A = distance(x1, x2, A1, A2);\r
+ float distance_to_B = distance(x1, x2, B1, B2);\r
+ float distance_to_C = distance(x1, x2, C1, C2);\r
+\r
+ if (distance_to_A < nearest_current_solution_distance && distance_to_A < distance_to_B && distance_to_A < distance_to_C)\r
+ {\r
+ nearest_current_solution = A;\r
+ nearest_current_solution_distance = distance_to_A;\r
+ }\r
+ else if (distance_to_B < nearest_current_solution_distance && distance_to_B < distance_to_A && distance_to_B < distance_to_C)\r
+ {\r
+ nearest_current_solution = B;\r
+ nearest_current_solution_distance = distance_to_B;\r
+ }\r
+ else if (distance_to_C < nearest_current_solution_distance && distance_to_C < distance_to_A && distance_to_C < distance_to_B)\r
+ {\r
+ nearest_current_solution = C;\r
+ nearest_current_solution_distance = distance_to_C;\r
+ }\r
+\r
+ /*if (Indice2D::tid() == 0)\r
+ {\r
+ printf("nearest_current_solution_distance: %f\n", nearest_current_solution_distance);\r
+ }*/\r
+\r
+ /*printf("x1: %f, x2: %f\n", x1, x2);\r
+ printf("d to a: %f\n", distance_to_A);\r
+ printf("d to a: %f\n", distance_to_B);\r
+ printf("d to a: %f\n", distance_to_C);\r
+ }*/\r
+\r
+ if (nearest_current_solution_distance < this->epsilon)\r
+ break;\r
+\r
+ nextX(x1, x2, x1, x2);\r
+ }\r
+\r
+ switch (nearest_current_solution)\r
+ {\r
+ // Noir.\r
+ case A :\r
+ ptrColor->x = 0;\r
+ ptrColor->y = 0;\r
+ ptrColor->z = 0;\r
+ break;\r
+ // Gris.\r
+ case B :\r
+ ptrColor->x = 128;\r
+ ptrColor->y = 128;\r
+ ptrColor->z = 128;\r
+ break;\r
+ // Blanc.\r
+ case C :\r
+ ptrColor->x = 255;\r
+ ptrColor->y = 255;\r
+ ptrColor->z = 255;\r
+ break;\r
+ }\r