143 const unsigned int index_0 = 0;
144 const unsigned int index_1 = 1;
145 const unsigned int index_2 = 2;
147 s = ((R[1][0] - R[0][1]) * (R[1][0] - R[0][1])) + ((R[index_2][0] - R[0][index_2]) * (R[index_2][0] - R[0][index_2])) +
148 ((R[index_2][index_1] - R[index_1][index_2]) * (R[index_2][index_1] - R[index_1][index_2]));
150 c = ((R[index_0][index_0] + R[index_1][index_1] + R[index_2][index_2]) - 1.0) / 2.0;
154 if ((1 + c) > minimum)
158 data[index_0] = (R[index_2][index_1] - R[index_1][index_2]) / (2.0 * sinc);
159 data[index_1] = (R[index_0][index_2] - R[index_2][index_0]) / (2.0 * sinc);
160 data[index_2] = (R[index_1][index_0] - R[index_0][index_1]) / (2.0 * sinc);
165 if ((R[0][0] - c) > std::numeric_limits<double>::epsilon()) {
166 x = sqrt((R[0][0] - c) / (1 - c));
170 if ((R[1][1] - c) > std::numeric_limits<double>::epsilon()) {
171 y = sqrt((R[1][1] - c) / (1 - c));
175 if ((R[index_2][index_2] - c) > std::numeric_limits<double>::epsilon()) {
176 z = sqrt((R[index_2][index_2] - c) / (1 - c));
179 if ((x > y) && (x > z)) {
180 if ((R[index_2][index_1] - R[index_1][index_2]) < 0) {
191 if ((R[index_0][index_2] - R[index_2][index_0]) < 0) {
202 if ((R[1][0] - R[0][1]) < 0) {
212 data[index_0] = theta * x;
213 data[index_1] = theta * y;
214 data[index_2] = theta * z;
522 double c = 2 * std::acos((std::cos(a_2) * std::cos(b_2)) - (
vpColVector::dotProd(a_hat_sin_2, b_hat_sin_2)));
523 vpColVector d = ((std::sin(a_2) * std::cos(b_2) * a_hat) + (std::cos(a_2) * std::sin(b_2) * b_hat)) +
525 d = (c * d) / std::sin(c / 2.0);