Created
January 29, 2013 07:51
-
-
Save evenator/4662558 to your computer and use it in GitHub Desktop.
ikfast code files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* IKFast Demo | |
* | |
* Shows how to calculate FK from joint angles. | |
* Calculates IK from rotation-translation matrix, or translation-quaternion pose. | |
* Performance timing tests. | |
* | |
* Run the program to view command line parameters. | |
* | |
* | |
* To compile, run: | |
* g++ -lstdc++ -llapack -o compute ikfastdemo.cpp -lrt | |
* (need to link with 'rt' for gettime(), it must come after the source file name) | |
* | |
* | |
* Tested with Ubuntu 11.10 (Oneiric) | |
* IKFast54 from OpenRAVE 0.6.0 | |
* IKFast56/61 from OpenRave 0.8.2 | |
* | |
* Author: David Butterworth, KAIST | |
* Based on code by Rosen Diankov | |
* Date: November 2012 | |
*/ | |
/* | |
* Copyright (c) 2012, David Butterworth, KAIST | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* * Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* * Redistributions in binary form must reproduce the above copyright | |
* notice, this list of conditions and the following disclaimer in the | |
* documentation and/or other materials provided with the distribution. | |
* * Neither the name of the Willow Garage, Inc. nor the names of its | |
* contributors may be used to endorse or promote products derived from | |
* this software without specific prior written permission. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
* POSSIBILITY OF SUCH DAMAGE. | |
*/ | |
#define IKFAST_HAS_LIBRARY // Build IKFast with API functions | |
#define IKFAST_NO_MAIN // Don't include main() from IKFast | |
/* | |
Set which IKFast version you are using | |
The API calls are slightly different for versions > 54 | |
*/ | |
#define IK_VERSION 61 | |
#include "output_ikfast61.cpp" | |
//#define IK_VERSION 56 | |
//#include "ikfast56.Transform6D.0_1_2_3_4_5.cpp" | |
//#define IK_VERSION 54 | |
//#include "output_ikfast54.cpp" | |
//----------------------------------------------------------------------------// | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h> // for clock_gettime() | |
float SIGN(float x); | |
float NORM(float a, float b, float c, float d); | |
#if IK_VERSION > 54 | |
#define IKREAL_TYPE IkReal // for IKFast 56,61 | |
#else | |
#define IKREAL_TYPE IKReal // for IKFast 54 | |
#endif | |
int main(int argc, char** argv) | |
{ | |
IKREAL_TYPE eerot[9],eetrans[3]; | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
unsigned int num_of_joints = GetNumJoints(); | |
unsigned int num_free_parameters = GetNumFreeParameters(); | |
#else | |
// for IKFast 54 | |
unsigned int num_of_joints = getNumJoints(); | |
unsigned int num_free_parameters = getNumFreeParameters(); | |
#endif | |
std::string cmd; | |
if (argv[1]) cmd = argv[1]; | |
//printf("command: %s \n\n", cmd.c_str() ); | |
if (cmd.compare("ik") == 0) // ik mode | |
{ | |
if( argc == 1+7+num_free_parameters+1 ) // ik, given translation vector and quaternion pose | |
{ | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
IkSolutionList<IKREAL_TYPE> solutions; | |
#else | |
// for IKFast 54 | |
std::vector<IKSolution> vsolutions; | |
#endif | |
std::vector<IKREAL_TYPE> vfree(num_free_parameters); | |
eetrans[0] = atof(argv[2]); | |
eetrans[1] = atof(argv[3]); | |
eetrans[2] = atof(argv[4]); | |
// Convert input effector pose, in w x y z quaternion notation, to rotation matrix. | |
// Must use doubles, else lose precision compared to directly inputting the rotation matrix. | |
double qw = atof(argv[5]); | |
double qx = atof(argv[6]); | |
double qy = atof(argv[7]); | |
double qz = atof(argv[8]); | |
const double n = 1.0f/sqrt(qx*qx+qy*qy+qz*qz+qw*qw); | |
qw *= n; | |
qx *= n; | |
qy *= n; | |
qz *= n; | |
eerot[0] = 1.0f - 2.0f*qy*qy - 2.0f*qz*qz; eerot[1] = 2.0f*qx*qy - 2.0f*qz*qw; eerot[2] = 2.0f*qx*qz + 2.0f*qy*qw; | |
eerot[3] = 2.0f*qx*qy + 2.0f*qz*qw; eerot[4] = 1.0f - 2.0f*qx*qx - 2.0f*qz*qz; eerot[5] = 2.0f*qy*qz - 2.0f*qx*qw; | |
eerot[6] = 2.0f*qx*qz - 2.0f*qy*qw; eerot[7] = 2.0f*qy*qz + 2.0f*qx*qw; eerot[8] = 1.0f - 2.0f*qx*qx - 2.0f*qy*qy; | |
// For debugging, output the matrix | |
/* | |
for (unsigned char i=0; i<=8; i++) | |
{ // detect -0.0 and replace with 0.0 | |
if ( ((int&)(eerot[i]) & 0xFFFFFFFF) == 0) eerot[i] = 0.0; | |
} | |
printf(" Rotation %f %f %f \n", eerot[0], eerot[1], eerot[2] ); | |
printf(" %f %f %f \n", eerot[3], eerot[4], eerot[5] ); | |
printf(" %f %f %f \n", eerot[6], eerot[7], eerot[8] ); | |
printf("\n"); | |
*/ | |
for(std::size_t i = 0; i < vfree.size(); ++i) | |
vfree[i] = atof(argv[13+i]); | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
bool bSuccess = ComputeIk(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, solutions); | |
#else | |
// for IKFast 54 | |
bool bSuccess = ik(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, vsolutions); | |
#endif | |
if( !bSuccess ) { | |
fprintf(stderr,"Failed to get ik solution\n"); | |
return -1; | |
} | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
unsigned int num_of_solutions = (int)solutions.GetNumSolutions(); | |
#else | |
// for IKFast 54 | |
unsigned int num_of_solutions = (int)vsolutions.size(); | |
#endif | |
printf("Found %d ik solutions:\n", num_of_solutions ); | |
std::vector<IKREAL_TYPE> solvalues(num_of_joints); | |
for(std::size_t i = 0; i < num_of_solutions; ++i) { | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
const IkSolutionBase<IKREAL_TYPE>& sol = solutions.GetSolution(i); | |
int this_sol_free_params = (int)sol.GetFree().size(); | |
#else | |
// for IKFast 54 | |
int this_sol_free_params = (int)vsolutions[i].GetFree().size(); | |
#endif | |
printf("sol%d (free=%d): ", (int)i, this_sol_free_params ); | |
std::vector<IKREAL_TYPE> vsolfree(this_sol_free_params); | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
sol.GetSolution(&solvalues[0],vsolfree.size()>0?&vsolfree[0]:NULL); | |
#else | |
// for IKFast 54 | |
vsolutions[i].GetSolution(&solvalues[0],vsolfree.size()>0?&vsolfree[0]:NULL); | |
#endif | |
for( std::size_t j = 0; j < solvalues.size(); ++j) | |
printf("%.15f, ", solvalues[j]); | |
printf("\n"); | |
} | |
} | |
else if( argc == 1+12+num_free_parameters+1 ) // ik, given rotation-translation matrix | |
{ | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
IkSolutionList<IKREAL_TYPE> solutions; | |
#else | |
// for IKFast 54 | |
std::vector<IKSolution> vsolutions; | |
#endif | |
std::vector<IKREAL_TYPE> vfree(num_free_parameters); | |
eerot[0] = atof(argv[2]); eerot[1] = atof(argv[3]); eerot[2] = atof(argv[4]); eetrans[0] = atof(argv[5]); | |
eerot[3] = atof(argv[6]); eerot[4] = atof(argv[7]); eerot[5] = atof(argv[8]); eetrans[1] = atof(argv[9]); | |
eerot[6] = atof(argv[10]); eerot[7] = atof(argv[11]); eerot[8] = atof(argv[12]); eetrans[2] = atof(argv[13]); | |
for(std::size_t i = 0; i < vfree.size(); ++i) | |
vfree[i] = atof(argv[13+i]); | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
bool bSuccess = ComputeIk(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, solutions); | |
#else | |
// for IKFast 54 | |
bool bSuccess = ik(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, vsolutions); | |
#endif | |
if( !bSuccess ) { | |
fprintf(stderr,"Failed to get ik solution\n"); | |
return -1; | |
} | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
unsigned int num_of_solutions = (int)solutions.GetNumSolutions(); | |
#else | |
// for IKFast 54 | |
unsigned int num_of_solutions = (int)vsolutions.size(); | |
#endif | |
printf("Found %d ik solutions:\n", num_of_solutions ); | |
std::vector<IKREAL_TYPE> solvalues(num_of_joints); | |
for(std::size_t i = 0; i < num_of_solutions; ++i) { | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
const IkSolutionBase<IKREAL_TYPE>& sol = solutions.GetSolution(i); | |
int this_sol_free_params = (int)sol.GetFree().size(); | |
#else | |
// for IKFast 54 | |
int this_sol_free_params = (int)vsolutions[i].GetFree().size(); | |
#endif | |
printf("sol%d (free=%d): ", (int)i, this_sol_free_params ); | |
std::vector<IKREAL_TYPE> vsolfree(this_sol_free_params); | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
sol.GetSolution(&solvalues[0],vsolfree.size()>0?&vsolfree[0]:NULL); | |
#else | |
// for IKFast 54 | |
vsolutions[i].GetSolution(&solvalues[0],vsolfree.size()>0?&vsolfree[0]:NULL); | |
#endif | |
for( std::size_t j = 0; j < solvalues.size(); ++j) | |
printf("%.15f, ", solvalues[j]); | |
printf("\n"); | |
} | |
} | |
else { | |
printf("\n " | |
"Usage: \n\n " | |
" ./compute ik t0 t1 t2 qw qi qj qk free0 ...\n\n " | |
" Returns the ik solutions given the transformation of the end effector specified by \n " | |
" a 3x1 translation (tX), and a 1x4 quaternion (w + i + j + k). \n " | |
" There are %d free parameters that have to be specified.\n\n", num_free_parameters ); | |
printf(" \n " | |
" ./compute ik r00 r01 r02 t0 r10 r11 r12 t1 r20 r21 r22 t2 free0 ...\n\n " | |
" Returns the ik solutions given the transformation of the end effector specified by \n " | |
" a 3x3 rotation R (rXX), and a 3x1 translation (tX). \n " | |
" There are %d free parameters that have to be specified.\n\n", num_free_parameters ); | |
return 1; | |
} | |
} // endif ik mode | |
else if (cmd.compare("fk") == 0) // fk mode | |
{ | |
if( argc != num_of_joints+2 ) { | |
printf("\n " | |
"Usage: \n\n " | |
" ./compute fk j0 j1 ... j%d \n\n" | |
" Returns the forward kinematic solution given the joint angles (in radians). \n\n", num_of_joints-1 ); | |
return 1; | |
} | |
printf("\n\n"); | |
// Put input joint values into array | |
IKREAL_TYPE joints[num_of_joints]; | |
for (unsigned int i=0; i<num_of_joints; i++) | |
{ | |
joints[i] = atof(argv[i+2]); | |
} | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
ComputeFk(joints, eetrans, eerot); // void return | |
#else | |
// for IKFast 54 | |
fk(joints, eetrans, eerot); // void return | |
#endif | |
printf("Found fk solution for end frame: \n\n"); | |
printf(" Translation: x: %f y: %f z: %f \n", eetrans[0], eetrans[1], eetrans[2] ); | |
printf("\n"); | |
printf(" Rotation %f %f %f \n", eerot[0], eerot[1], eerot[2] ); | |
printf(" Matrix: %f %f %f \n", eerot[3], eerot[4], eerot[5] ); | |
printf(" %f %f %f \n", eerot[6], eerot[7], eerot[8] ); | |
printf("\n"); | |
// Display equivalent Euler angles | |
float yaw; | |
float pitch; | |
float roll; | |
if ( eerot[5] > 0.998 || eerot[5] < -0.998 ) { // singularity | |
yaw = IKatan2( -eerot[6], eerot[0] ); | |
pitch = 0; | |
} else { | |
yaw = IKatan2( eerot[2], eerot[8] ); | |
pitch = IKatan2( eerot[3], eerot[4] ); | |
} | |
roll = IKasin( eerot[5] ); | |
printf(" Euler angles: \n"); | |
printf(" Yaw: %f ", yaw ); printf("(1st: rotation around vertical blue Z-axis in ROS Rviz) \n"); | |
printf(" Pitch: %f \n", pitch ); | |
printf(" Roll: %f \n", roll ); | |
printf("\n"); | |
// Convert rotation matrix to quaternion (Daisuke Miyazaki) | |
float q0 = ( eerot[0] + eerot[4] + eerot[8] + 1.0f) / 4.0f; | |
float q1 = ( eerot[0] - eerot[4] - eerot[8] + 1.0f) / 4.0f; | |
float q2 = (-eerot[0] + eerot[4] - eerot[8] + 1.0f) / 4.0f; | |
float q3 = (-eerot[0] - eerot[4] + eerot[8] + 1.0f) / 4.0f; | |
if(q0 < 0.0f) q0 = 0.0f; | |
if(q1 < 0.0f) q1 = 0.0f; | |
if(q2 < 0.0f) q2 = 0.0f; | |
if(q3 < 0.0f) q3 = 0.0f; | |
q0 = sqrt(q0); | |
q1 = sqrt(q1); | |
q2 = sqrt(q2); | |
q3 = sqrt(q3); | |
if(q0 >= q1 && q0 >= q2 && q0 >= q3) { | |
q0 *= +1.0f; | |
q1 *= SIGN(eerot[7] - eerot[5]); | |
q2 *= SIGN(eerot[2] - eerot[6]); | |
q3 *= SIGN(eerot[3] - eerot[1]); | |
} else if(q1 >= q0 && q1 >= q2 && q1 >= q3) { | |
q0 *= SIGN(eerot[7] - eerot[5]); | |
q1 *= +1.0f; | |
q2 *= SIGN(eerot[3] + eerot[1]); | |
q3 *= SIGN(eerot[2] + eerot[6]); | |
} else if(q2 >= q0 && q2 >= q1 && q2 >= q3) { | |
q0 *= SIGN(eerot[2] - eerot[6]); | |
q1 *= SIGN(eerot[3] + eerot[1]); | |
q2 *= +1.0f; | |
q3 *= SIGN(eerot[7] + eerot[5]); | |
} else if(q3 >= q0 && q3 >= q1 && q3 >= q2) { | |
q0 *= SIGN(eerot[3] - eerot[1]); | |
q1 *= SIGN(eerot[6] + eerot[2]); | |
q2 *= SIGN(eerot[7] + eerot[5]); | |
q3 *= +1.0f; | |
} else { | |
printf("Error while converting to quaternion! \n"); | |
} | |
float r = NORM(q0, q1, q2, q3); | |
q0 /= r; | |
q1 /= r; | |
q2 /= r; | |
q3 /= r; | |
printf(" Quaternion: %f %f %f %f \n", q0, q1, q2, q3 ); | |
printf(" "); | |
// print quaternion with convention and +/- signs such that it can be copy-pasted into WolframAlpha.com | |
printf("%f ", q0); | |
if (q1 > 0) printf("+ %fi ", q1); else if (q1 < 0) printf("- %fi ", -q1); else printf("+ 0.00000i "); | |
if (q2 > 0) printf("+ %fj ", q2); else if (q2 < 0) printf("- %fj ", -q2); else printf("+ 0.00000j "); | |
if (q3 > 0) printf("+ %fk ", q3); else if (q3 < 0) printf("- %fk ", -q3); else printf("+ 0.00000k "); | |
printf(" (alternate convention) \n"); | |
printf("\n\n"); | |
} | |
else if (cmd.compare("iktiming") == 0) // generate random ik and check time performance | |
{ | |
if( argc != 2 ) { | |
printf("\n " | |
"Usage: \n\n " | |
" ./compute iktiming \n\n" | |
" For fixed number of iterations, generates random joint angles, then \n" | |
" calculates fk, calculates ik, measures average time taken. \n\n", num_of_joints-1 ); | |
return 1; | |
} | |
printf("\n\n"); | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
IkSolutionList<IKREAL_TYPE> solutions; | |
#else | |
// for IKFast 54 | |
std::vector<IKSolution> vsolutions; | |
#endif | |
std::vector<IKREAL_TYPE> vfree(num_free_parameters); | |
//for(std::size_t i = 0; i < vfree.size(); ++i) | |
// vfree[i] = atof(argv[13+i]); | |
srand( (unsigned)time(0) ); // seed random number generator | |
float min = -3.14; | |
float max = 3.14; | |
float rnd; | |
IKREAL_TYPE joints[num_of_joints]; | |
timespec start_time, end_time; | |
unsigned int elapsed_time = 0; | |
unsigned int sum_time = 0; | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
unsigned int num_of_tests = 1000000; | |
#else | |
// for IKFast 54 | |
unsigned int num_of_tests = 100000; | |
#endif | |
for (unsigned int i=0; i < num_of_tests; i++) | |
{ | |
// Measure avg time for whole process | |
//clock_gettime(CLOCK_REALTIME, &start_time); | |
// Put random joint values into array | |
for (unsigned int i=0; i<num_of_joints; i++) | |
{ | |
float rnd = (float)rand() / (float)RAND_MAX; | |
joints[i] = min + rnd * (max - min); | |
} | |
/* | |
printf("Joint angles: "); | |
for (unsigned int i=0; i<num_of_joints; i++) | |
{ | |
printf("%f ", joints[i] ); | |
} | |
printf("\n"); | |
*/ | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
ComputeFk(joints, eetrans, eerot); // void return | |
#else | |
// for IKFast 54 | |
fk(joints, eetrans, eerot); // void return | |
#endif | |
// Measure avg time for IK | |
clock_gettime(CLOCK_REALTIME, &start_time); | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
ComputeIk(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, solutions); | |
#else | |
// for IKFast 54 | |
ik(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, vsolutions); | |
#endif | |
/* | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
unsigned int num_of_solutions = (int)solutions.GetNumSolutions(); | |
#else | |
// for IKFast 54 | |
unsigned int num_of_solutions = (int)vsolutions.size(); | |
#endif | |
printf("Found %d ik solutions:\n", num_of_solutions ); | |
*/ | |
clock_gettime(CLOCK_REALTIME, &end_time); | |
elapsed_time = (unsigned int)(end_time.tv_nsec - start_time.tv_nsec); | |
sum_time += elapsed_time; | |
} // endfor | |
unsigned int avg_time = (unsigned int)sum_time / (unsigned int)num_of_tests; | |
printf("avg time: %f ms over %d tests \n", (float)avg_time/1000.0, num_of_tests ); | |
return 1; | |
} | |
else if (cmd.compare("iktiming2") == 0) // for fixed joint values, check time performance of ik | |
{ | |
if( argc != 2 ) { | |
printf("\n " | |
"Usage: \n\n " | |
" ./compute iktiming2 \n\n" | |
" For fixed number of iterations, with one set of joint variables, this \n" | |
" finds the ik solutions and measures the average time taken. \n\n", num_of_joints-1 ); | |
return 1; | |
} | |
printf("\n\n"); | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
IkSolutionList<IKREAL_TYPE> solutions; | |
#else | |
// for IKFast 54 | |
std::vector<IKSolution> vsolutions; | |
#endif | |
std::vector<IKREAL_TYPE> vfree(num_free_parameters); | |
//for(std::size_t i = 0; i < vfree.size(); ++i) | |
// vfree[i] = atof(argv[13+i]); | |
IKREAL_TYPE joints[num_of_joints]; | |
timespec start_time, end_time; | |
unsigned int elapsed_time = 0; | |
unsigned int sum_time = 0; | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
unsigned int num_of_tests = 1000000; | |
#else | |
// for IKFast 54 | |
unsigned int num_of_tests = 100000; | |
#endif | |
// fixed rotation-translation matrix corresponding to an unusual robot pose | |
eerot[0] = 0.002569; eerot[1] = -0.658044; eerot[2] = -0.752975; eetrans[0] = 0.121937; | |
eerot[3] = 0.001347; eerot[4] = -0.752975; eerot[5] = 0.658048; eetrans[1] = -0.276022; | |
eerot[6] = -0.999996; eerot[7] = -0.002705; eerot[8] = -0.001047; eetrans[2] = 0.005685; | |
for (unsigned int i=0; i < num_of_tests; i++) | |
{ | |
clock_gettime(CLOCK_REALTIME, &start_time); | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
ComputeIk(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, solutions); | |
#else | |
// for IKFast 54 | |
ik(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, vsolutions); | |
#endif | |
/* | |
#if IK_VERSION > 54 | |
// for IKFast 56,61 | |
unsigned int num_of_solutions = (int)solutions.GetNumSolutions(); | |
#else | |
// for IKFast 54 | |
unsigned int num_of_solutions = (int)vsolutions.size(); | |
#endif | |
printf("Found %d ik solutions:\n", num_of_solutions ); | |
*/ | |
clock_gettime(CLOCK_REALTIME, &end_time); | |
elapsed_time = (unsigned int)(end_time.tv_nsec - start_time.tv_nsec); | |
sum_time += elapsed_time; | |
} // endfor | |
unsigned int avg_time = (unsigned int)sum_time / (unsigned int)num_of_tests; | |
printf("avg time: %f ms over %d tests \n", (float)avg_time/1000.0, num_of_tests ); | |
return 1; | |
} else { | |
printf("\n" | |
"Usage: \n\n"); | |
printf(" ./compute fk j0 j1 ... j%d \n\n" | |
" Returns the forward kinematic solution given the joint angles (in radians). \n\n", num_of_joints-1 ); | |
printf("\n" | |
" ./compute ik t0 t1 t2 qw qi qj qk free0 ... \n\n" | |
" Returns the ik solutions given the transformation of the end effector specified by \n" | |
" a 3x1 translation (tX), and a 1x4 quaternion (w + i + j + k). \n" | |
" There are %d free parameters that have to be specified. \n\n", num_free_parameters ); | |
printf(" \n" | |
" ./compute ik r00 r01 r02 t0 r10 r11 r12 t1 r20 r21 r22 t2 free0 ...\n\n" | |
" Returns the ik solutions given the transformation of the end effector specified by \n" | |
" a 3x3 rotation R (rXX), and a 3x1 translation (tX). \n" | |
" There are %d free parameters that have to be specified. \n\n", num_free_parameters ); | |
printf("\n" | |
" ./compute iktiming \n\n" | |
" For fixed number of iterations, generates random joint angles, then \n" | |
" calculates fk, calculates ik, measures average time taken. \n\n", num_of_joints-1 ); | |
printf("\n" | |
" ./compute iktiming2 \n\n" | |
" For fixed number of iterations, with one set of joint variables, this \n" | |
" finds the ik solutions and measures the average time taken. \n\n", num_of_joints-1 ); | |
return 1; | |
} | |
return 0; | |
} | |
float SIGN(float x) { | |
return (x >= 0.0f) ? +1.0f : -1.0f; | |
} | |
float NORM(float a, float b, float c, float d) { | |
return sqrt(a * a + b * b + c * c + d * d); | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// -*- coding: utf-8 -*- | |
// Copyright (C) 2012 Rosen Diankov <rosen.diankov@gmail.com> | |
// | |
// Licensed under the Apache License, Version 2.0 (the "License"); | |
// you may not use this file except in compliance with the License. | |
// You may obtain a copy of the License at | |
// http://www.apache.org/licenses/LICENSE-2.0 | |
// | |
// Unless required by applicable law or agreed to in writing, software | |
// distributed under the License is distributed on an "AS IS" BASIS, | |
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
// See the License for the specific language governing permissions and | |
// limitations under the License. | |
/** \brief Header file for all ikfast c++ files/shared objects. | |
The ikfast inverse kinematics compiler is part of OpenRAVE. | |
The file is divided into two sections: | |
- <b>Common</b> - the abstract classes section that all ikfast share regardless of their settings | |
- <b>Library Specific</b> - the library-specific definitions, which depends on the precision/settings that the library was compiled with | |
The defines are as follows, they are also used for the ikfast C++ class: | |
- IKFAST_HEADER_COMMON - common classes | |
- IKFAST_HAS_LIBRARY - if defined, will include library-specific functions. by default this is off | |
- IKFAST_CLIBRARY - Define this linking statically or dynamically to get correct visibility. | |
- IKFAST_NO_MAIN - Remove the ``main`` function, usually used with IKFAST_CLIBRARY | |
- IKFAST_ASSERT - Define in order to get a custom assert called when NaNs, divides by zero, and other invalid conditions are detected. | |
- IKFAST_REAL - Use to force a custom real number type for IkReal. | |
- IKFAST_NAMESPACE - Enclose all functions and classes in this namespace, the ``main`` function is excluded. | |
*/ | |
#include <vector> | |
#include <list> | |
#include <stdexcept> | |
#ifndef IKFAST_HEADER_COMMON | |
#define IKFAST_HEADER_COMMON | |
/// should be the same as ikfast.__version__ | |
#define IKFAST_VERSION 61 | |
namespace ikfast { | |
/// \brief holds the solution for a single dof | |
template <typename T> | |
class IkSingleDOFSolutionBase | |
{ | |
public: | |
IkSingleDOFSolutionBase() : fmul(0), foffset(0), freeind(-1), maxsolutions(1) { | |
indices[0] = indices[1] = indices[2] = indices[3] = indices[4] = -1; | |
} | |
T fmul, foffset; ///< joint value is fmul*sol[freeind]+foffset | |
signed char freeind; ///< if >= 0, mimics another joint | |
unsigned char jointtype; ///< joint type, 0x01 is revolute, 0x11 is slider | |
unsigned char maxsolutions; ///< max possible indices, 0 if controlled by free index or a free joint itself | |
unsigned char indices[5]; ///< unique index of the solution used to keep track on what part it came from. sometimes a solution can be repeated for different indices. store at least another repeated root | |
}; | |
/// \brief The discrete solutions are returned in this structure. | |
/// | |
/// Sometimes the joint axes of the robot can align allowing an infinite number of solutions. | |
/// Stores all these solutions in the form of free variables that the user has to set when querying the solution. Its prototype is: | |
template <typename T> | |
class IkSolutionBase | |
{ | |
public: | |
virtual ~IkSolutionBase() { | |
} | |
/// \brief gets a concrete solution | |
/// | |
/// \param[out] solution the result | |
/// \param[in] freevalues values for the free parameters \se GetFree | |
virtual void GetSolution(T* solution, const T* freevalues) const = 0; | |
/// \brief std::vector version of \ref GetSolution | |
virtual void GetSolution(std::vector<T>& solution, const std::vector<T>& freevalues) const { | |
solution.resize(GetDOF()); | |
GetSolution(&solution.at(0), freevalues.size() > 0 ? &freevalues.at(0) : NULL); | |
} | |
/// \brief Gets the indices of the configuration space that have to be preset before a full solution can be returned | |
/// | |
/// \return vector of indices indicating the free parameters | |
virtual const std::vector<int>& GetFree() const = 0; | |
/// \brief the dof of the solution | |
virtual const int GetDOF() const = 0; | |
}; | |
/// \brief manages all the solutions | |
template <typename T> | |
class IkSolutionListBase | |
{ | |
public: | |
virtual ~IkSolutionListBase() { | |
} | |
/// \brief add one solution and return its index for later retrieval | |
/// | |
/// \param vinfos Solution data for each degree of freedom of the manipulator | |
/// \param vfree If the solution represents an infinite space, holds free parameters of the solution that users can freely set. | |
virtual size_t AddSolution(const std::vector<IkSingleDOFSolutionBase<T> >& vinfos, const std::vector<int>& vfree) = 0; | |
/// \brief returns the solution pointer | |
virtual const IkSolutionBase<T>& GetSolution(size_t index) const = 0; | |
/// \brief returns the number of solutions stored | |
virtual size_t GetNumSolutions() const = 0; | |
/// \brief clears all current solutions, note that any memory addresses returned from \ref GetSolution will be invalidated. | |
virtual void Clear() = 0; | |
}; | |
/// \brief holds function pointers for all the exported functions of ikfast | |
template <typename T> | |
class IkFastFunctions | |
{ | |
public: | |
IkFastFunctions() : _ComputeIk(NULL), _ComputeFk(NULL), _GetNumFreeParameters(NULL), _GetFreeParameters(NULL), _GetNumJoints(NULL), _GetIkRealSize(NULL), _GetIkFastVersion(NULL), _GetIkType(NULL), _GetKinematicsHash(NULL) { | |
} | |
virtual ~IkFastFunctions() { | |
} | |
typedef bool (*ComputeIkFn)(const T*, const T*, const T*, IkSolutionListBase<T>&); | |
ComputeIkFn _ComputeIk; | |
typedef void (*ComputeFkFn)(const T*, T*, T*); | |
ComputeFkFn _ComputeFk; | |
typedef int (*GetNumFreeParametersFn)(); | |
GetNumFreeParametersFn _GetNumFreeParameters; | |
typedef int* (*GetFreeParametersFn)(); | |
GetFreeParametersFn _GetFreeParameters; | |
typedef int (*GetNumJointsFn)(); | |
GetNumJointsFn _GetNumJoints; | |
typedef int (*GetIkRealSizeFn)(); | |
GetIkRealSizeFn _GetIkRealSize; | |
typedef const char* (*GetIkFastVersionFn)(); | |
GetIkFastVersionFn _GetIkFastVersion; | |
typedef int (*GetIkTypeFn)(); | |
GetIkTypeFn _GetIkType; | |
typedef const char* (*GetKinematicsHashFn)(); | |
GetKinematicsHashFn _GetKinematicsHash; | |
}; | |
// Implementations of the abstract classes, user doesn't need to use them | |
/// \brief Default implementation of \ref IkSolutionBase | |
template <typename T> | |
class IkSolution : public IkSolutionBase<T> | |
{ | |
public: | |
IkSolution(const std::vector<IkSingleDOFSolutionBase<T> >& vinfos, const std::vector<int>& vfree) { | |
_vbasesol = vinfos; | |
_vfree = vfree; | |
} | |
virtual void GetSolution(T* solution, const T* freevalues) const { | |
for(std::size_t i = 0; i < _vbasesol.size(); ++i) { | |
if( _vbasesol[i].freeind < 0 ) | |
solution[i] = _vbasesol[i].foffset; | |
else { | |
solution[i] = freevalues[_vbasesol[i].freeind]*_vbasesol[i].fmul + _vbasesol[i].foffset; | |
if( solution[i] > T(3.14159265358979) ) { | |
solution[i] -= T(6.28318530717959); | |
} | |
else if( solution[i] < T(-3.14159265358979) ) { | |
solution[i] += T(6.28318530717959); | |
} | |
} | |
} | |
} | |
virtual void GetSolution(std::vector<T>& solution, const std::vector<T>& freevalues) const { | |
solution.resize(GetDOF()); | |
GetSolution(&solution.at(0), freevalues.size() > 0 ? &freevalues.at(0) : NULL); | |
} | |
virtual const std::vector<int>& GetFree() const { | |
return _vfree; | |
} | |
virtual const int GetDOF() const { | |
return static_cast<int>(_vbasesol.size()); | |
} | |
virtual void Validate() const { | |
for(size_t i = 0; i < _vbasesol.size(); ++i) { | |
if( _vbasesol[i].maxsolutions == (unsigned char)-1) { | |
throw std::runtime_error("max solutions for joint not initialized"); | |
} | |
if( _vbasesol[i].maxsolutions > 0 ) { | |
if( _vbasesol[i].indices[0] >= _vbasesol[i].maxsolutions ) { | |
throw std::runtime_error("index >= max solutions for joint"); | |
} | |
if( _vbasesol[i].indices[1] != (unsigned char)-1 && _vbasesol[i].indices[1] >= _vbasesol[i].maxsolutions ) { | |
throw std::runtime_error("2nd index >= max solutions for joint"); | |
} | |
} | |
} | |
} | |
virtual void GetSolutionIndices(std::vector<unsigned int>& v) const { | |
v.resize(0); | |
v.push_back(0); | |
for(int i = (int)_vbasesol.size()-1; i >= 0; --i) { | |
if( _vbasesol[i].maxsolutions != (unsigned char)-1 && _vbasesol[i].maxsolutions > 1 ) { | |
for(size_t j = 0; j < v.size(); ++j) { | |
v[j] *= _vbasesol[i].maxsolutions; | |
} | |
size_t orgsize=v.size(); | |
if( _vbasesol[i].indices[1] != (unsigned char)-1 ) { | |
for(size_t j = 0; j < orgsize; ++j) { | |
v.push_back(v[j]+_vbasesol[i].indices[1]); | |
} | |
} | |
if( _vbasesol[i].indices[0] != (unsigned char)-1 ) { | |
for(size_t j = 0; j < orgsize; ++j) { | |
v[j] += _vbasesol[i].indices[0]; | |
} | |
} | |
} | |
} | |
} | |
std::vector< IkSingleDOFSolutionBase<T> > _vbasesol; ///< solution and their offsets if joints are mimiced | |
std::vector<int> _vfree; | |
}; | |
/// \brief Default implementation of \ref IkSolutionListBase | |
template <typename T> | |
class IkSolutionList : public IkSolutionListBase<T> | |
{ | |
public: | |
virtual size_t AddSolution(const std::vector<IkSingleDOFSolutionBase<T> >& vinfos, const std::vector<int>& vfree) | |
{ | |
size_t index = _listsolutions.size(); | |
_listsolutions.push_back(IkSolution<T>(vinfos,vfree)); | |
return index; | |
} | |
virtual const IkSolutionBase<T>& GetSolution(size_t index) const | |
{ | |
if( index >= _listsolutions.size() ) { | |
throw std::runtime_error("GetSolution index is invalid"); | |
} | |
typename std::list< IkSolution<T> >::const_iterator it = _listsolutions.begin(); | |
std::advance(it,index); | |
return *it; | |
} | |
virtual size_t GetNumSolutions() const { | |
return _listsolutions.size(); | |
} | |
virtual void Clear() { | |
_listsolutions.clear(); | |
} | |
protected: | |
std::list< IkSolution<T> > _listsolutions; | |
}; | |
} | |
#endif // OPENRAVE_IKFAST_HEADER | |
// The following code is dependent on the C++ library linking with. | |
#ifdef IKFAST_HAS_LIBRARY | |
// defined when creating a shared object/dll | |
#ifdef IKFAST_CLIBRARY | |
#ifdef _MSC_VER | |
#define IKFAST_API extern "C" __declspec(dllexport) | |
#else | |
#define IKFAST_API extern "C" | |
#endif | |
#else | |
#define IKFAST_API | |
#endif | |
#ifdef IKFAST_NAMESPACE | |
namespace IKFAST_NAMESPACE { | |
#endif | |
#ifdef IKFAST_REAL | |
typedef IKFAST_REAL IkReal; | |
#else | |
typedef double IkReal; | |
#endif | |
/** \brief Computes all IK solutions given a end effector coordinates and the free joints. | |
- ``eetrans`` - 3 translation values. For iktype **TranslationXYOrientation3D**, the z-axis is the orientation. | |
- ``eerot`` | |
- For **Transform6D** it is 9 values for the 3x3 rotation matrix. | |
- For **Direction3D**, **Ray4D**, and **TranslationDirection5D**, the first 3 values represent the target direction. | |
- For **TranslationXAxisAngle4D**, **TranslationYAxisAngle4D**, and **TranslationZAxisAngle4D** the first value represents the angle. | |
- For **TranslationLocalGlobal6D**, the diagonal elements ([0],[4],[8]) are the local translation inside the end effector coordinate system. | |
*/ | |
IKFAST_API bool ComputeIk(const IkReal* eetrans, const IkReal* eerot, const IkReal* pfree, ikfast::IkSolutionListBase<IkReal>& solutions); | |
/// \brief Computes the end effector coordinates given the joint values. This function is used to double check ik. | |
IKFAST_API void ComputeFk(const IkReal* joints, IkReal* eetrans, IkReal* eerot); | |
/// \brief returns the number of free parameters users has to set apriori | |
IKFAST_API int GetNumFreeParameters(); | |
/// \brief the indices of the free parameters indexed by the chain joints | |
IKFAST_API int* GetFreeParameters(); | |
/// \brief the total number of indices of the chain | |
IKFAST_API int GetNumJoints(); | |
/// \brief the size in bytes of the configured number type | |
IKFAST_API int GetIkRealSize(); | |
/// \brief the ikfast version used to generate this file | |
IKFAST_API const char* GetIkFastVersion(); | |
/// \brief the ik type ID | |
IKFAST_API int GetIkType(); | |
/// \brief a hash of all the chain values used for double checking that the correct IK is used. | |
IKFAST_API const char* GetKinematicsHash(); | |
#ifdef IKFAST_NAMESPACE | |
} | |
#endif | |
#endif // IKFAST_HAS_LIBRARY |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// autogenerated analytical inverse kinematics code from ikfast program part of OpenRAVE | |
/// \author Rosen Diankov | |
/// | |
/// Licensed under the Apache License, Version 2.0 (the "License"); | |
/// you may not use this file except in compliance with the License. | |
/// You may obtain a copy of the License at | |
/// http://www.apache.org/licenses/LICENSE-2.0 | |
/// | |
/// Unless required by applicable law or agreed to in writing, software | |
/// distributed under the License is distributed on an "AS IS" BASIS, | |
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
/// See the License for the specific language governing permissions and | |
/// limitations under the License. | |
/// | |
/// ikfast version 61 generated on 2013-01-29 02:24:10.307444 | |
/// To compile with gcc: | |
/// gcc -lstdc++ ik.cpp | |
/// To compile without any main function as a shared object (might need -llapack): | |
/// gcc -fPIC -lstdc++ -DIKFAST_NO_MAIN -DIKFAST_CLIBRARY -shared -Wl,-soname,libik.so -o libik.so ik.cpp | |
#define IKFAST_HAS_LIBRARY | |
#include "ikfast.h" // found inside share/openrave-X.Y/python/ikfast.h | |
using namespace ikfast; | |
// check if the included ikfast version matches what this file was compiled with | |
#define IKFAST_COMPILE_ASSERT(x) extern int __dummy[(int)x] | |
IKFAST_COMPILE_ASSERT(IKFAST_VERSION==61); | |
#include <cmath> | |
#include <vector> | |
#include <limits> | |
#include <algorithm> | |
#include <complex> | |
#define IKFAST_STRINGIZE2(s) #s | |
#define IKFAST_STRINGIZE(s) IKFAST_STRINGIZE2(s) | |
#ifndef IKFAST_ASSERT | |
#include <stdexcept> | |
#include <sstream> | |
#include <iostream> | |
#ifdef _MSC_VER | |
#ifndef __PRETTY_FUNCTION__ | |
#define __PRETTY_FUNCTION__ __FUNCDNAME__ | |
#endif | |
#endif | |
#ifndef __PRETTY_FUNCTION__ | |
#define __PRETTY_FUNCTION__ __func__ | |
#endif | |
#define IKFAST_ASSERT(b) { if( !(b) ) { std::stringstream ss; ss << "ikfast exception: " << __FILE__ << ":" << __LINE__ << ": " <<__PRETTY_FUNCTION__ << ": Assertion '" << #b << "' failed"; throw std::runtime_error(ss.str()); } } | |
#endif | |
#if defined(_MSC_VER) | |
#define IKFAST_ALIGNED16(x) __declspec(align(16)) x | |
#else | |
#define IKFAST_ALIGNED16(x) x __attribute((aligned(16))) | |
#endif | |
#define IK2PI ((IkReal)6.28318530717959) | |
#define IKPI ((IkReal)3.14159265358979) | |
#define IKPI_2 ((IkReal)1.57079632679490) | |
#ifdef _MSC_VER | |
#ifndef isnan | |
#define isnan _isnan | |
#endif | |
#endif // _MSC_VER | |
// lapack routines | |
extern "C" { | |
void dgetrf_ (const int* m, const int* n, double* a, const int* lda, int* ipiv, int* info); | |
void zgetrf_ (const int* m, const int* n, std::complex<double>* a, const int* lda, int* ipiv, int* info); | |
void dgetri_(const int* n, const double* a, const int* lda, int* ipiv, double* work, const int* lwork, int* info); | |
void dgesv_ (const int* n, const int* nrhs, double* a, const int* lda, int* ipiv, double* b, const int* ldb, int* info); | |
void dgetrs_(const char *trans, const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, int *info); | |
void dgeev_(const char *jobvl, const char *jobvr, const int *n, double *a, const int *lda, double *wr, double *wi,double *vl, const int *ldvl, double *vr, const int *ldvr, double *work, const int *lwork, int *info); | |
} | |
using namespace std; // necessary to get std math routines | |
#ifdef IKFAST_NAMESPACE | |
namespace IKFAST_NAMESPACE { | |
#endif | |
inline float IKabs(float f) { return fabsf(f); } | |
inline double IKabs(double f) { return fabs(f); } | |
inline float IKsqr(float f) { return f*f; } | |
inline double IKsqr(double f) { return f*f; } | |
inline float IKlog(float f) { return logf(f); } | |
inline double IKlog(double f) { return log(f); } | |
// allows asin and acos to exceed 1 | |
#ifndef IKFAST_SINCOS_THRESH | |
#define IKFAST_SINCOS_THRESH ((IkReal)0.000001) | |
#endif | |
// used to check input to atan2 for degenerate cases | |
#ifndef IKFAST_ATAN2_MAGTHRESH | |
#define IKFAST_ATAN2_MAGTHRESH ((IkReal)2e-6) | |
#endif | |
// minimum distance of separate solutions | |
#ifndef IKFAST_SOLUTION_THRESH | |
#define IKFAST_SOLUTION_THRESH ((IkReal)1e-6) | |
#endif | |
inline float IKasin(float f) | |
{ | |
IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH ); // any more error implies something is wrong with the solver | |
if( f <= -1 ) return float(-IKPI_2); | |
else if( f >= 1 ) return float(IKPI_2); | |
return asinf(f); | |
} | |
inline double IKasin(double f) | |
{ | |
IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH ); // any more error implies something is wrong with the solver | |
if( f <= -1 ) return -IKPI_2; | |
else if( f >= 1 ) return IKPI_2; | |
return asin(f); | |
} | |
// return positive value in [0,y) | |
inline float IKfmod(float x, float y) | |
{ | |
while(x < 0) { | |
x += y; | |
} | |
return fmodf(x,y); | |
} | |
// return positive value in [0,y) | |
inline double IKfmod(double x, double y) | |
{ | |
while(x < 0) { | |
x += y; | |
} | |
return fmod(x,y); | |
} | |
inline float IKacos(float f) | |
{ | |
IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH ); // any more error implies something is wrong with the solver | |
if( f <= -1 ) return float(IKPI); | |
else if( f >= 1 ) return float(0); | |
return acosf(f); | |
} | |
inline double IKacos(double f) | |
{ | |
IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH ); // any more error implies something is wrong with the solver | |
if( f <= -1 ) return IKPI; | |
else if( f >= 1 ) return 0; | |
return acos(f); | |
} | |
inline float IKsin(float f) { return sinf(f); } | |
inline double IKsin(double f) { return sin(f); } | |
inline float IKcos(float f) { return cosf(f); } | |
inline double IKcos(double f) { return cos(f); } | |
inline float IKtan(float f) { return tanf(f); } | |
inline double IKtan(double f) { return tan(f); } | |
inline float IKsqrt(float f) { if( f <= 0.0f ) return 0.0f; return sqrtf(f); } | |
inline double IKsqrt(double f) { if( f <= 0.0 ) return 0.0; return sqrt(f); } | |
inline float IKatan2(float fy, float fx) { | |
if( isnan(fy) ) { | |
IKFAST_ASSERT(!isnan(fx)); // if both are nan, probably wrong value will be returned | |
return float(IKPI_2); | |
} | |
else if( isnan(fx) ) { | |
return 0; | |
} | |
return atan2f(fy,fx); | |
} | |
inline double IKatan2(double fy, double fx) { | |
if( isnan(fy) ) { | |
IKFAST_ASSERT(!isnan(fx)); // if both are nan, probably wrong value will be returned | |
return IKPI_2; | |
} | |
else if( isnan(fx) ) { | |
return 0; | |
} | |
return atan2(fy,fx); | |
} | |
inline float IKsign(float f) { | |
if( f > 0 ) { | |
return float(1); | |
} | |
else if( f < 0 ) { | |
return float(-1); | |
} | |
return 0; | |
} | |
inline double IKsign(double f) { | |
if( f > 0 ) { | |
return 1.0; | |
} | |
else if( f < 0 ) { | |
return -1.0; | |
} | |
return 0; | |
} | |
/// solves the forward kinematics equations. | |
/// \param pfree is an array specifying the free joints of the chain. | |
IKFAST_API void ComputeFk(const IkReal* j, IkReal* eetrans, IkReal* eerot) { | |
IkReal x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58; | |
x0=IKcos(j[0]); | |
x1=IKcos(j[1]); | |
x2=IKcos(j[2]); | |
x3=IKsin(j[1]); | |
x4=IKsin(j[2]); | |
x5=IKsin(j[0]); | |
x6=IKsin(j[3]); | |
x7=IKcos(j[3]); | |
x8=IKsin(j[5]); | |
x9=IKsin(j[4]); | |
x10=IKcos(j[4]); | |
x11=IKcos(j[5]); | |
x12=((IkReal(0.00151567000000000))*(x6)); | |
x13=((IkReal(0.0720009000000000))*(x2)); | |
x14=((IkReal(1.00000000000000))*(x10)); | |
x15=((IkReal(1.00000000000000))*(x0)); | |
x16=((IkReal(0.00151567000000000))*(x4)); | |
x17=((IkReal(1.00000000000000))*(x9)); | |
x18=((IkReal(1.00000000000000))*(x6)); | |
x19=((IkReal(0.270000000000000))*(x3)); | |
x20=((IkReal(0.302000000000000))*(x0)); | |
x21=((IkReal(0.0701403000000000))*(x4)); | |
x22=((IkReal(0.0720009000000000))*(x7)); | |
x23=((IkReal(0.302000000000000))*(x5)); | |
x24=((IkReal(0.000315200000000000))*(x4)); | |
x25=((IkReal(1.00000000000000))*(x5)); | |
x26=((IkReal(1.00000000000000))*(x7)); | |
x27=((IkReal(1.00000000000000))*(x4)); | |
x28=((IkReal(0.0720009000000000))*(x6)); | |
x29=((IkReal(0.000315200000000000))*(x7)); | |
x30=((x1)*(x2)); | |
x31=((x0)*(x1)); | |
x32=((x3)*(x4)); | |
x33=((x1)*(x5)); | |
x34=((x2)*(x3)); | |
x35=((x7)*(x9)); | |
x36=((x1)*(x4)); | |
x37=((x18)*(x5)); | |
x38=((x27)*(x3)); | |
x39=((IkReal(1.00000000000000))*(x30)); | |
x40=((x0)*(x34)); | |
x41=((x25)*(x32)); | |
x42=((x25)*(x30)); | |
x43=((x39)+(((IkReal(-1.00000000000000))*(x38)))); | |
x44=((((IkReal(-1.00000000000000))*(x1)*(x27)))+(((IkReal(-1.00000000000000))*(x34)))); | |
x45=((x43)*(x6)); | |
x46=((x44)*(x9)); | |
x47=((x15)*(((((IkReal(-1.00000000000000))*(x32)))+(x30)))); | |
x48=((x42)+(((IkReal(-1.00000000000000))*(x41)))); | |
x49=((x10)*(x43)*(x7)); | |
x50=((x15)*(((x36)+(x34)))); | |
x51=((IkReal(-1.00000000000000))*(x50)); | |
x52=((x25)*(((x36)+(x34)))); | |
x53=((IkReal(-1.00000000000000))*(x52)); | |
x54=((x51)*(x7)); | |
x55=((((IkReal(-1.00000000000000))*(x26)*(x5)))+(((x50)*(x6)))); | |
x56=((x37)+(((IkReal(-1.00000000000000))*(x26)*(x51)))); | |
x57=((((IkReal(-1.00000000000000))*(x26)*(x53)))+(((IkReal(-1.00000000000000))*(x0)*(x18)))); | |
x58=((((IkReal(-1.00000000000000))*(x18)*(x52)))+(((IkReal(-1.00000000000000))*(x0)*(x26)))); | |
eerot[0]=((((x55)*(x8)))+(((x11)*(((((IkReal(-1.00000000000000))*(x17)*(x47)))+(((IkReal(-1.00000000000000))*(x14)*(x56)))))))); | |
eerot[1]=((((x8)*(((((x47)*(x9)))+(((x10)*(x56)))))))+(((x11)*(x55)))); | |
eerot[2]=((((x9)*(((x54)+(((IkReal(-1.00000000000000))*(x37)))))))+(((x10)*(x47)))); | |
IkReal x59=((IkReal(1.00000000000000))*(x5)); | |
eetrans[0]=((IkReal(0.0420395000000000))+(((x21)*(x31)))+(((IkReal(0.0701403000000000))*(x40)))+(((IkReal(0.0100933000000000))*(x5)))+(((x12)*(x5)))+(((IkReal(-1.00000000000000))*(x20)*(x32)))+(((x9)*(((((IkReal(-1.00000000000000))*(x28)*(x59)))+(((x22)*(x51)))))))+(((x6)*(((((x24)*(x31)))+(((IkReal(0.000315200000000000))*(x40)))))))+(((x20)*(x30)))+(((IkReal(-1.00000000000000))*(x29)*(x59)))+(((x10)*(((((x13)*(x31)))+(((IkReal(-0.0720009000000000))*(x0)*(x32)))))))+(((x7)*(((((x16)*(x31)))+(((IkReal(0.00151567000000000))*(x40)))))))+(((x0)*(x19)))); | |
eerot[3]=((((x45)*(x8)))+(((x11)*(((((IkReal(-1.00000000000000))*(x49)))+(((IkReal(-1.00000000000000))*(x46)))))))); | |
eerot[4]=((((x11)*(x45)))+(((x8)*(((x49)+(x46)))))); | |
eerot[5]=((((x35)*(((x38)+(((IkReal(-1.00000000000000))*(x39)))))))+(((x10)*(x44)))); | |
IkReal x60=((IkReal(1.00000000000000))*(x3)); | |
eetrans[1]=((IkReal(0.210360400000000))+(((IkReal(0.270000000000000))*(x1)))+(((IkReal(-1.00000000000000))*(x21)*(x60)))+(((x35)*(((((IkReal(0.0720009000000000))*(x32)))+(((IkReal(-1.00000000000000))*(x1)*(x13)))))))+(((IkReal(-0.302000000000000))*(x36)))+(((x10)*(((((IkReal(-1.00000000000000))*(x13)*(x60)))+(((IkReal(-0.0720009000000000))*(x36)))))))+(((x6)*(((((IkReal(0.000315200000000000))*(x30)))+(((IkReal(-1.00000000000000))*(x24)*(x60)))))))+(((IkReal(0.0701403000000000))*(x30)))+(((IkReal(-0.302000000000000))*(x34)))+(((x7)*(((((IkReal(0.00151567000000000))*(x30)))+(((IkReal(-1.00000000000000))*(x16)*(x60)))))))); | |
eerot[6]=((((x11)*(((((x10)*(x57)))+(((x48)*(x9)))))))+(((x58)*(x8)))); | |
eerot[7]=((((x8)*(((((IkReal(-1.00000000000000))*(x14)*(x57)))+(((IkReal(-1.00000000000000))*(x17)*(x48)))))))+(((x11)*(x58)))); | |
eerot[8]=((((x10)*(((x41)+(((IkReal(-1.00000000000000))*(x42)))))))+(((x57)*(x9)))); | |
IkReal x61=((IkReal(1.00000000000000))*(x0)); | |
IkReal x62=((x34)*(x5)); | |
IkReal x63=((IkReal(1.00000000000000))*(x33)); | |
eetrans[2]=((((IkReal(-1.00000000000000))*(x19)*(x5)))+(((x7)*(((((IkReal(-0.00151567000000000))*(x62)))+(((IkReal(-1.00000000000000))*(x16)*(x63)))))))+(((IkReal(-1.00000000000000))*(x21)*(x63)))+(((x9)*(((((IkReal(-1.00000000000000))*(x22)*(x53)))+(((IkReal(-1.00000000000000))*(x28)*(x61)))))))+(((IkReal(-1.00000000000000))*(x29)*(x61)))+(((x10)*(((((IkReal(0.0720009000000000))*(x32)*(x5)))+(((IkReal(-1.00000000000000))*(x13)*(x63)))))))+(((x23)*(x32)))+(((IkReal(-0.0701403000000000))*(x62)))+(((IkReal(-1.00000000000000))*(x23)*(x30)))+(((x0)*(x12)))+(((IkReal(0.0100933000000000))*(x0)))+(((x6)*(((((IkReal(-0.000315200000000000))*(x62)))+(((IkReal(-1.00000000000000))*(x24)*(x63)))))))); | |
} | |
IKFAST_API int GetNumFreeParameters() { return 0; } | |
IKFAST_API int* GetFreeParameters() { return NULL; } | |
IKFAST_API int GetNumJoints() { return 6; } | |
IKFAST_API int GetIkRealSize() { return sizeof(IkReal); } | |
IKFAST_API int GetIkType() { return 0x67000001; } | |
class IKSolver { | |
public: | |
IkReal j6,cj6,sj6,htj6,j7,cj7,sj7,htj7,j8,cj8,sj8,htj8,j9,cj9,sj9,htj9,j10,cj10,sj10,htj10,j11,cj11,sj11,htj11,new_r00,r00,rxp0_0,new_r01,r01,rxp0_1,new_r02,r02,rxp0_2,new_r10,r10,rxp1_0,new_r11,r11,rxp1_1,new_r12,r12,rxp1_2,new_r20,r20,rxp2_0,new_r21,r21,rxp2_1,new_r22,r22,rxp2_2,new_px,px,npx,new_py,py,npy,new_pz,pz,npz,pp; | |
unsigned char _ij6[2], _nj6,_ij7[2], _nj7,_ij8[2], _nj8,_ij9[2], _nj9,_ij10[2], _nj10,_ij11[2], _nj11; | |
bool ComputeIk(const IkReal* eetrans, const IkReal* eerot, const IkReal* pfree, IkSolutionListBase<IkReal>& solutions) { | |
j6=numeric_limits<IkReal>::quiet_NaN(); _ij6[0] = -1; _ij6[1] = -1; _nj6 = -1; j7=numeric_limits<IkReal>::quiet_NaN(); _ij7[0] = -1; _ij7[1] = -1; _nj7 = -1; j8=numeric_limits<IkReal>::quiet_NaN(); _ij8[0] = -1; _ij8[1] = -1; _nj8 = -1; j9=numeric_limits<IkReal>::quiet_NaN(); _ij9[0] = -1; _ij9[1] = -1; _nj9 = -1; j10=numeric_limits<IkReal>::quiet_NaN(); _ij10[0] = -1; _ij10[1] = -1; _nj10 = -1; j11=numeric_limits<IkReal>::quiet_NaN(); _ij11[0] = -1; _ij11[1] = -1; _nj11 = -1; | |
for(int dummyiter = 0; dummyiter < 1; ++dummyiter) { | |
solutions.Clear(); | |
r00 = eerot[0*3+0]; | |
r01 = eerot[0*3+1]; | |
r02 = eerot[0*3+2]; | |
r10 = eerot[1*3+0]; | |
r11 = eerot[1*3+1]; | |
r12 = eerot[1*3+2]; | |
r20 = eerot[2*3+0]; | |
r21 = eerot[2*3+1]; | |
r22 = eerot[2*3+2]; | |
px = eetrans[0]; py = eetrans[1]; pz = eetrans[2]; | |
new_r00=r01; | |
new_r01=((IkReal(-1.00000000000000))*(r00)); | |
new_r02=r02; | |
new_px=((IkReal(-0.0420395000000000))+(((IkReal(-0.0720009000000000))*(r02)))+(px)); | |
new_r10=((IkReal(-1.00000000000000))*(r21)); | |
new_r11=r20; | |
new_r12=((IkReal(-1.00000000000000))*(r22)); | |
new_py=((((IkReal(-1.00000000000000))*(pz)))+(((IkReal(0.0720009000000000))*(r22)))); | |
new_r20=r11; | |
new_r21=((IkReal(-1.00000000000000))*(r10)); | |
new_r22=r12; | |
new_pz=((IkReal(-0.210360400000000))+(((IkReal(-0.0720009000000000))*(r12)))+(py)); | |
r00 = new_r00; r01 = new_r01; r02 = new_r02; r10 = new_r10; r11 = new_r11; r12 = new_r12; r20 = new_r20; r21 = new_r21; r22 = new_r22; px = new_px; py = new_py; pz = new_pz; | |
pp=(((px)*(px))+((pz)*(pz))+((py)*(py))); | |
npx=((((py)*(r10)))+(((pz)*(r20)))+(((px)*(r00)))); | |
npy=((((px)*(r01)))+(((pz)*(r21)))+(((py)*(r11)))); | |
npz=((((py)*(r12)))+(((pz)*(r22)))+(((px)*(r02)))); | |
rxp0_0=((((IkReal(-1.00000000000000))*(py)*(r20)))+(((pz)*(r10)))); | |
rxp0_1=((((px)*(r20)))+(((IkReal(-1.00000000000000))*(pz)*(r00)))); | |
rxp0_2=((((py)*(r00)))+(((IkReal(-1.00000000000000))*(px)*(r10)))); | |
rxp1_0=((((pz)*(r11)))+(((IkReal(-1.00000000000000))*(py)*(r21)))); | |
rxp1_1=((((IkReal(-1.00000000000000))*(pz)*(r01)))+(((px)*(r21)))); | |
rxp1_2=((((py)*(r01)))+(((IkReal(-1.00000000000000))*(px)*(r11)))); | |
rxp2_0=((((IkReal(-1.00000000000000))*(py)*(r22)))+(((pz)*(r12)))); | |
rxp2_1=((((px)*(r22)))+(((IkReal(-1.00000000000000))*(pz)*(r02)))); | |
rxp2_2=((((py)*(r02)))+(((IkReal(-1.00000000000000))*(px)*(r12)))); | |
IkReal op[162], zeror[48]; | |
int numroots; | |
IkReal x64=((IkReal(0.000315200000000000))*(r10)); | |
IkReal x65=((IkReal(0.00501877483443709))*(rxp0_1)); | |
IkReal x66=((IkReal(0.00135506920529801))*(r00)); | |
IkReal x67=((IkReal(0.00271013841059603))*(r01)); | |
IkReal x68=((IkReal(0.000630400000000000))*(r11)); | |
IkReal x69=((IkReal(0.0100375496688742))*(rxp1_1)); | |
IkReal x70=((IkReal(0.270000000000000))*(r20)); | |
IkReal x71=((IkReal(0.232252649006623))*(rxp0_1)); | |
IkReal x72=((IkReal(0.0627082152317881))*(r00)); | |
IkReal x73=((IkReal(0.0100933000000000))*(r10)); | |
IkReal x74=((IkReal(0.540000000000000))*(r00)); | |
IkReal x75=((IkReal(0.125416430463576))*(r20)); | |
IkReal x76=((IkReal(0.464505298013245))*(rxp1_1)); | |
IkReal x77=((IkReal(2.00000000000000))*(npy)); | |
IkReal x78=((IkReal(0.540000000000000))*(r21)); | |
IkReal x79=((IkReal(0.125416430463576))*(r01)); | |
IkReal x80=((IkReal(0.0201866000000000))*(r11)); | |
IkReal x81=((IkReal(1.00000000000000))*(npx)); | |
IkReal x82=((IkReal(0.0201866000000000))*(npz)); | |
IkReal x83=((IkReal(0.000630400000000000))*(rxp1_1)); | |
IkReal x84=((IkReal(0.000170208000000000))*(r01)); | |
IkReal x85=((IkReal(0.0233231397823911))*(r12)); | |
IkReal x86=((IkReal(0.000915464680000000))*(r11)); | |
IkReal x87=((IkReal(0.540000000000000))*(rxp2_0)); | |
IkReal x88=((IkReal(0.00545038200000000))*(r22)); | |
IkReal x89=((IkReal(0.0109007640000000))*(r02)); | |
IkReal x90=((IkReal(0.000340416000000000))*(r21)); | |
IkReal x91=((IkReal(1.08000000000000))*(rxp2_2)); | |
IkReal x92=((IkReal(0.000340416000000000))*(r00)); | |
IkReal x93=((IkReal(0.00126080000000000))*(rxp0_1)); | |
IkReal x94=((IkReal(0.00183092936000000))*(r10)); | |
IkReal x95=((IkReal(0.101000800000000))*(npx)); | |
IkReal x96=((IkReal(0.0221436384351489))*(r10)); | |
IkReal x97=((IkReal(0.00743227067472318))*(r00)); | |
IkReal x98=((IkReal(0.0272702160000000))*(r20)); | |
IkReal x99=((IkReal(0.540000000000000))*(rxp0_0)); | |
IkReal x100=((IkReal(0.0275269284249007))*(rxp0_1)); | |
IkReal x101=((IkReal(0.124000400000000))*(py)); | |
IkReal x102=((IkReal(0.0545404320000000))*(r00)); | |
IkReal x103=((IkReal(1.08000000000000))*(rxp1_0)); | |
IkReal x104=((IkReal(0.0148645413494464))*(r01)); | |
IkReal x105=((IkReal(0.0545404320000000))*(r21)); | |
IkReal x106=((IkReal(0.202001600000000))*(npy)); | |
IkReal x107=((IkReal(0.0442872768702978))*(r11)); | |
IkReal x108=((IkReal(0.0550538568498013))*(rxp1_1)); | |
IkReal x109=((pp)*(r10)); | |
IkReal x110=((IkReal(0.540000000000000))*(rxp1_0)); | |
IkReal x111=((IkReal(0.0201866000000000))*(npy)); | |
IkReal x112=((IkReal(0.0233231397823911))*(r11)); | |
IkReal x113=((IkReal(0.000630400000000000))*(rxp2_1)); | |
IkReal x114=((IkReal(0.000170208000000000))*(r02)); | |
IkReal x115=((IkReal(0.00545038200000000))*(r21)); | |
IkReal x116=((IkReal(0.000915464680000000))*(r12)); | |
IkReal x117=((IkReal(0.000340416000000000))*(r22)); | |
IkReal x118=((IkReal(1.08000000000000))*(rxp1_2)); | |
IkReal x119=((IkReal(0.0109007640000000))*(r01)); | |
IkReal x120=((pp)*(r11)); | |
IkReal x121=((IkReal(1.08000000000000))*(rxp0_0)); | |
IkReal x122=((IkReal(0.0466462795647822))*(r10)); | |
IkReal x123=((IkReal(0.0109007640000000))*(r20)); | |
IkReal x124=((IkReal(0.0403732000000000))*(npx)); | |
IkReal x125=((IkReal(0.0334801080000000))*(r20)); | |
IkReal x126=((IkReal(0.0280447970345762))*(rxp0_1)); | |
IkReal x127=((IkReal(0.540000000000000))*(pz)); | |
IkReal x128=((IkReal(0.00757209519933556))*(r00)); | |
IkReal x129=((IkReal(0.101000800000000))*(py)); | |
IkReal x130=((IkReal(1.00000000000000))*(pp)); | |
IkReal x131=((IkReal(0.124000400000000))*(npx)); | |
IkReal x132=((IkReal(0.00142599406584200))*(r10)); | |
IkReal x133=((IkReal(1.08000000000000))*(px)); | |
IkReal x134=((IkReal(0.0669602160000000))*(r00)); | |
IkReal x135=((IkReal(0.0151441903986711))*(r20)); | |
IkReal x136=((IkReal(0.0560895940691523))*(rxp1_1)); | |
IkReal x137=((IkReal(0.0151441903986711))*(r01)); | |
IkReal x138=((IkReal(0.00285198813168400))*(r11)); | |
IkReal x139=((IkReal(0.248000800000000))*(npy)); | |
IkReal x140=((IkReal(0.0669602160000000))*(r21)); | |
IkReal x141=((IkReal(0.0100375496688742))*(rxp0_0)); | |
IkReal x142=((IkReal(0.000630400000000000))*(r00)); | |
IkReal x143=((IkReal(2.00000000000000))*(px)); | |
IkReal x144=((IkReal(0.00271013841059603))*(r10)); | |
IkReal x145=((IkReal(0.0200750993377483))*(rxp1_0)); | |
IkReal x146=((IkReal(0.00542027682119205))*(r11)); | |
IkReal x147=((IkReal(0.00126080000000000))*(r01)); | |
IkReal x148=((IkReal(0.464505298013245))*(rxp0_0)); | |
IkReal x149=((IkReal(0.125416430463576))*(r10)); | |
IkReal x150=((IkReal(0.0201866000000000))*(r00)); | |
IkReal x151=((IkReal(0.0403732000000000))*(r01)); | |
IkReal x152=((IkReal(0.250832860927152))*(r11)); | |
IkReal x153=((IkReal(0.929010596026490))*(rxp1_0)); | |
IkReal x154=((IkReal(1.08000000000000))*(rxp2_1)); | |
IkReal x155=((IkReal(0.000340416000000000))*(r11)); | |
IkReal x156=((IkReal(0.0466462795647822))*(r02)); | |
IkReal x157=((IkReal(0.00126080000000000))*(rxp1_0)); | |
IkReal x158=((IkReal(0.00183092936000000))*(r01)); | |
IkReal x159=((IkReal(0.00252160000000000))*(rxp0_0)); | |
IkReal x160=((IkReal(0.000680832000000000))*(r10)); | |
IkReal x161=((IkReal(0.00366185872000000))*(r00)); | |
IkReal x162=((IkReal(0.0550538568498013))*(rxp0_0)); | |
IkReal x163=((IkReal(0.248000800000000))*(px)); | |
IkReal x164=((IkReal(0.0442872768702978))*(r00)); | |
IkReal x165=((IkReal(1.08000000000000))*(rxp0_1)); | |
IkReal x166=((IkReal(0.0148645413494464))*(r10)); | |
IkReal x167=((IkReal(0.0885745537405956))*(r01)); | |
IkReal x168=((IkReal(0.0297290826988927))*(r11)); | |
IkReal x169=((IkReal(0.110107713699603))*(rxp1_0)); | |
IkReal x170=((IkReal(2.16000000000000))*(rxp1_1)); | |
IkReal x171=((IkReal(0.00126080000000000))*(rxp2_0)); | |
IkReal x172=((IkReal(1.08000000000000))*(rxp1_1)); | |
IkReal x173=((IkReal(0.00183092936000000))*(r02)); | |
IkReal x174=((IkReal(0.0466462795647822))*(r01)); | |
IkReal x175=((IkReal(0.000340416000000000))*(r12)); | |
IkReal x176=((IkReal(0.0932925591295644))*(r00)); | |
IkReal x177=((IkReal(2.16000000000000))*(rxp0_1)); | |
IkReal x178=((IkReal(0.00285198813168400))*(r00)); | |
IkReal x179=((IkReal(0.0151441903986711))*(r10)); | |
IkReal x180=((IkReal(0.202001600000000))*(px)); | |
IkReal x181=((IkReal(0.0560895940691523))*(rxp0_0)); | |
IkReal x182=((IkReal(2.16000000000000))*(py)); | |
IkReal x183=((IkReal(0.133920432000000))*(r10)); | |
IkReal x184=((IkReal(0.00570397626336800))*(r01)); | |
IkReal x185=((IkReal(0.0302883807973423))*(r11)); | |
IkReal x186=((IkReal(0.112179188138305))*(rxp1_0)); | |
IkReal x187=((IkReal(1.00000000000000))*(py)); | |
IkReal x188=((IkReal(0.00542027682119205))*(r21)); | |
IkReal x189=((IkReal(0.00271013841059603))*(r20)); | |
IkReal x190=((IkReal(1.08000000000000))*(r01)); | |
IkReal x191=((IkReal(0.250832860927152))*(r21)); | |
IkReal x192=((pp)*(r12)); | |
IkReal x193=((IkReal(0.000680832000000000))*(r20)); | |
IkReal x194=((IkReal(1.08000000000000))*(rxp0_2)); | |
IkReal x195=((IkReal(0.0148645413494464))*(r20)); | |
IkReal x196=((IkReal(2.16000000000000))*(rxp1_2)); | |
IkReal x197=((IkReal(0.0297290826988927))*(r21)); | |
IkReal x198=((IkReal(0.109080864000000))*(r01)); | |
IkReal x199=((IkReal(2.16000000000000))*(rxp0_2)); | |
IkReal x200=((IkReal(0.0218015280000000))*(r00)); | |
IkReal x201=((IkReal(0.133920432000000))*(r01)); | |
IkReal x202=((IkReal(0.0302883807973423))*(r21)); | |
IkReal x203=((IkReal(4.00000000000000))*(px)); | |
IkReal x204=((IkReal(2.00000000000000))*(pp)); | |
IkReal x205=((IkReal(2.00000000000000))*(py)); | |
IkReal x206=((IkReal(4.00000000000000))*(py)); | |
IkReal x207=((IkReal(4.00000000000000))*(pp)); | |
IkReal x208=((IkReal(8.00000000000000))*(px)); | |
IkReal x209=((npz)*(x205)); | |
IkReal x210=((r12)*(x130)); | |
IkReal x211=((npx)*(x205)); | |
IkReal x212=((IkReal(1.00000000000000))*(x109)); | |
IkReal x213=((IkReal(2.00000000000000))*(x120)); | |
IkReal x214=((npy)*(x206)); | |
IkReal x215=((py)*(x77)); | |
IkReal x216=((IkReal(2.00000000000000))*(x109)); | |
IkReal x217=((npx)*(x206)); | |
IkReal x218=((IkReal(1.00000000000000))*(x120)); | |
IkReal x219=((r02)*(x204)); | |
IkReal x220=((npz)*(x203)); | |
IkReal x221=((IkReal(-0.0218015280000000))*(r12)); | |
IkReal x222=((npx)*(x203)); | |
IkReal x223=((r00)*(x204)); | |
IkReal x224=((npy)*(x208)); | |
IkReal x225=((r01)*(x207)); | |
IkReal x226=((r01)*(x204)); | |
IkReal x227=((npy)*(x203)); | |
IkReal x228=((npx)*(x208)); | |
IkReal x229=((r00)*(x207)); | |
IkReal x230=((IkReal(-0.00271013841059603))*(r20)); | |
IkReal x231=((IkReal(-0.00100075587183800))+(x95)); | |
IkReal x232=((IkReal(-0.00100075587183800))+(x98)); | |
IkReal x233=((IkReal(0.0100933000000000))+(x64)); | |
IkReal x234=((IkReal(0.0100933000000000))+(x65)); | |
IkReal x235=((npx)+(x73)); | |
IkReal x236=((IkReal(0.0243082794441289))+(x129)); | |
IkReal x237=((IkReal(-0.000315200000000000))+(x71)); | |
IkReal x238=((x66)+(py)); | |
IkReal x239=((x195)+(x194)); | |
IkReal x240=((x150)+(x149)); | |
IkReal x241=((x148)+(x149)); | |
IkReal x242=((x67)+(x69)); | |
IkReal x243=((x67)+(x68)); | |
IkReal x244=((x75)+(x74)); | |
IkReal x245=((x93)+(x94)); | |
IkReal x246=((x178)+(x180)); | |
IkReal x247=((x166)+(x165)); | |
IkReal x248=((x111)+(x110)); | |
IkReal x249=((x113)+(x116)); | |
IkReal x250=((x128)+(x131)); | |
IkReal x251=((x192)+(x82)); | |
IkReal x252=((x109)+(x101)); | |
IkReal x253=((x99)+(x97)); | |
IkReal x254=((x73)+(x81)); | |
IkReal x255=((x137)+(x140)); | |
IkReal x256=((x104)+(x103)); | |
IkReal x257=((x139)+(x138)); | |
IkReal x258=((x135)+(x133)); | |
IkReal x259=((x120)+(x115)); | |
IkReal x260=((x128)+(x130)); | |
IkReal x261=((x126)+(x125)); | |
IkReal x262=((x127)+(x132)); | |
IkReal x263=((x76)+(x78)); | |
IkReal x264=((x83)+(x86)); | |
IkReal x265=((x170)+(x168)); | |
IkReal x266=((x171)+(x173)); | |
IkReal x267=((x89)+(x90)); | |
IkReal x268=((x142)+(x143)); | |
IkReal x269=((x115)+(x114)); | |
IkReal x270=((x101)+(x95)); | |
IkReal x271=((x65)+(x187)); | |
IkReal x272=((x119)+(x118)); | |
IkReal x273=((x71)+(x70)); | |
IkReal x274=((x141)+(x144)); | |
IkReal x275=((x101)+(x98)); | |
IkReal x276=((x120)+(x114)); | |
IkReal x277=((x131)+(x130)); | |
IkReal x278=((x64)+(x66)); | |
IkReal x279=((x159)+(x161)); | |
IkReal x280=((x82)+(x87)); | |
IkReal x281=((x157)+(x158)); | |
IkReal x282=((x179)+(x181)); | |
IkReal x283=((x197)+(x196)); | |
IkReal x284=((x88)+(x87)); | |
IkReal x285=((x126)+(x127)); | |
IkReal x286=((x88)+(x82)); | |
IkReal x287=((x73)+(x70)); | |
IkReal x288=((x77)+(x80)); | |
IkReal x289=((x73)+(x72)); | |
IkReal x290=((x136)+(x139)); | |
IkReal x291=((x156)+(x220)); | |
IkReal x292=((x210)+(x88)); | |
IkReal x293=((x163)+(x223)); | |
IkReal x294=((x215)+(x112)); | |
IkReal x295=((x216)+(x124)); | |
IkReal x296=((IkReal(-0.000315200000000000))+(x72)+(x70)); | |
IkReal x297=((x212)+(x98)); | |
IkReal x298=((x210)+(x87)); | |
IkReal x299=((x174)+(x227)); | |
IkReal x300=((x213)+(x106)); | |
IkReal x301=((x209)+(x85)); | |
IkReal x302=((x155)+(x219)); | |
IkReal x303=((x217)+(x122)); | |
IkReal x304=((x175)+(x226)); | |
IkReal x305=((x176)+(x228)); | |
IkReal x306=((x245)+(x92)); | |
IkReal x307=((x239)+(x102)); | |
IkReal x308=((x125)+(x129)+(x132)); | |
IkReal x309=((x284)+(x84)); | |
IkReal x310=((x303)+(x121)); | |
IkReal x311=((x162)+(x164)+(x222)); | |
IkReal x312=((x169)+(x167)+(x224)); | |
IkReal x313=((x214)+(x108)+(x107)); | |
IkReal x314=((x211)+(x100)+(x96)); | |
IkReal x315=((x313)+(x105)); | |
IkReal x316=((x253)+(x314)); | |
op[0]=((x238)+(x234)+(((IkReal(-1.00000000000000))*(x64)))); | |
op[1]=((x68)+(((IkReal(-1.00000000000000))*(x242)))); | |
op[2]=((x233)+(((IkReal(-1.00000000000000))*(x66)))+(py)+(((IkReal(-1.00000000000000))*(x65)))); | |
op[3]=x230; | |
op[4]=x188; | |
op[5]=x189; | |
op[6]=((x234)+(((IkReal(-1.00000000000000))*(x278)))+(py)); | |
op[7]=((x243)+(((IkReal(-1.00000000000000))*(x69)))); | |
op[8]=((x238)+(x233)+(((IkReal(-1.00000000000000))*(x65)))); | |
op[9]=((IkReal(-0.000315200000000000))+(x235)+(((IkReal(-1.00000000000000))*(x72)))+(((IkReal(-1.00000000000000))*(x273)))); | |
op[10]=((((IkReal(-1.00000000000000))*(x288)))+(x79)+(x263)); | |
op[11]=((x237)+(((IkReal(-1.00000000000000))*(x254)))+(x72)+(x70)); | |
op[12]=((((IkReal(-1.00000000000000))*(x74)))+(x75)); | |
op[13]=((((IkReal(-1.00000000000000))*(x191)))+(x190)); | |
op[14]=((((IkReal(-1.00000000000000))*(x75)))+(x74)); | |
op[15]=((x235)+(x296)+(((IkReal(-1.00000000000000))*(x71)))); | |
op[16]=((((IkReal(-1.00000000000000))*(x288)))+(((IkReal(-1.00000000000000))*(x79)))+(x76)+(((IkReal(-1.00000000000000))*(x78)))); | |
op[17]=((((IkReal(-1.00000000000000))*(x70)))+(x237)+(((IkReal(-1.00000000000000))*(x254)))+(((IkReal(-1.00000000000000))*(x72)))); | |
op[18]=((x280)+(((IkReal(-1.00000000000000))*(x292)))+(x301)+(((IkReal(-1.00000000000000))*(x84)))+(((IkReal(-1.00000000000000))*(x264)))); | |
op[19]=((IkReal(-1.00000000000000))*(x306)); | |
op[20]=((x280)+(((IkReal(-1.00000000000000))*(x292)))+(x301)+(x264)+(x84)); | |
op[21]=((((IkReal(-1.00000000000000))*(x89)))+(((IkReal(-1.00000000000000))*(x91)))+(x90)); | |
op[22]=x193; | |
op[23]=((((IkReal(-1.00000000000000))*(x267)))+(((IkReal(-1.00000000000000))*(x91)))); | |
op[24]=((x286)+(x301)+(((IkReal(-1.00000000000000))*(x298)))+(((IkReal(-1.00000000000000))*(x264)))+(x84)); | |
op[25]=((((IkReal(-1.00000000000000))*(x245)))+(x92)); | |
op[26]=((x286)+(x301)+(((IkReal(-1.00000000000000))*(x298)))+(((IkReal(-1.00000000000000))*(x84)))+(x264)); | |
op[27]=((((IkReal(-1.00000000000000))*(x212)))+(x232)+(x316)+(((IkReal(-1.00000000000000))*(x270)))); | |
op[28]=((((IkReal(-1.00000000000000))*(x256)))+(x300)+(((IkReal(-1.00000000000000))*(x315)))); | |
op[29]=((x231)+(((IkReal(-1.00000000000000))*(x316)))+(((IkReal(-1.00000000000000))*(x275)))+(x109)); | |
op[30]=((((IkReal(-1.00000000000000))*(x239)))+(x102)); | |
op[31]=((x283)+(((IkReal(-1.00000000000000))*(x198)))); | |
op[32]=((((IkReal(-1.00000000000000))*(x102)))+(x239)); | |
op[33]=((IkReal(-0.00100075587183800))+(x314)+(((IkReal(-1.00000000000000))*(x297)))+(((IkReal(-1.00000000000000))*(x270)))+(((IkReal(-1.00000000000000))*(x253)))); | |
op[34]=((x300)+(x256)+(x105)+(((IkReal(-1.00000000000000))*(x313)))); | |
op[35]=((((IkReal(-1.00000000000000))*(x101)))+(x231)+(x253)+(((IkReal(-1.00000000000000))*(x314)))+(x109)+(x98)); | |
op[36]=((((IkReal(-1.00000000000000))*(x114)))+(((IkReal(-1.00000000000000))*(x249)))+(x259)+(((IkReal(-1.00000000000000))*(x248)))+(((IkReal(-1.00000000000000))*(x294)))); | |
op[37]=((x216)+(x123)+(((IkReal(-1.00000000000000))*(x124)))+(((IkReal(-1.00000000000000))*(x310)))); | |
op[38]=((((IkReal(-1.00000000000000))*(x249)))+(((IkReal(-1.00000000000000))*(x218)))+(((IkReal(-1.00000000000000))*(x269)))+(x294)+(x248)); | |
op[39]=((x272)+(x117)); | |
op[40]=((x199)+(x200)); | |
op[41]=((((IkReal(-1.00000000000000))*(x272)))+(x117)); | |
op[42]=((((IkReal(-1.00000000000000))*(x249)))+(((IkReal(-1.00000000000000))*(x111)))+(x276)+(((IkReal(-1.00000000000000))*(x115)))+(x110)+(((IkReal(-1.00000000000000))*(x294)))); | |
op[43]=((x216)+(x121)+(((IkReal(-1.00000000000000))*(x124)))+(((IkReal(-1.00000000000000))*(x303)))+(((IkReal(-1.00000000000000))*(x123)))); | |
op[44]=((((IkReal(-1.00000000000000))*(x249)))+(((IkReal(-1.00000000000000))*(x218)))+(x294)+(((IkReal(-1.00000000000000))*(x110)))+(x111)+(x269)); | |
op[45]=((((IkReal(-1.00000000000000))*(x260)))+(x236)+(((IkReal(-1.00000000000000))*(x261)))+(x131)+(x262)); | |
op[46]=((x255)+(((IkReal(-1.00000000000000))*(x257)))+(x136)); | |
op[47]=((x236)+(x127)+(x128)+(((IkReal(-1.00000000000000))*(x277)))+(((IkReal(-1.00000000000000))*(x132)))+(x261)); | |
op[48]=((x258)+(((IkReal(-1.00000000000000))*(x134)))); | |
op[49]=((((IkReal(-1.00000000000000))*(x202)))+(x201)); | |
op[50]=((((IkReal(-1.00000000000000))*(x135)))+(x134)+(x133)); | |
op[51]=((x236)+(x250)+(x125)+(((IkReal(-1.00000000000000))*(x285)))+(x132)+(((IkReal(-1.00000000000000))*(x130)))); | |
op[52]=((((IkReal(-1.00000000000000))*(x255)))+(((IkReal(-1.00000000000000))*(x257)))+(x136)); | |
op[53]=((x236)+(x126)+(((IkReal(-1.00000000000000))*(x125)))+(((IkReal(-1.00000000000000))*(x262)))+(((IkReal(-1.00000000000000))*(x250)))+(((IkReal(-1.00000000000000))*(x130)))); | |
op[54]=((((IkReal(-1.00000000000000))*(x141)))+(x142)+(x144)+(((IkReal(-1.00000000000000))*(x143)))); | |
op[55]=((((IkReal(-1.00000000000000))*(x146)))+(((IkReal(-1.00000000000000))*(x147)))+(x145)); | |
op[56]=((((IkReal(-1.00000000000000))*(x268)))+(x141)+(((IkReal(-1.00000000000000))*(x144)))); | |
op[57]=IkReal(0); | |
op[58]=IkReal(0); | |
op[59]=IkReal(0); | |
op[60]=((((IkReal(-1.00000000000000))*(x274)))+(x142)+(((IkReal(-1.00000000000000))*(x143)))); | |
op[61]=((((IkReal(-1.00000000000000))*(x147)))+(x145)+(x146)); | |
op[62]=((((IkReal(-1.00000000000000))*(x268)))+(x274)); | |
op[63]=((((IkReal(-1.00000000000000))*(x240)))+(x148)); | |
op[64]=((x152)+(x151)+(((IkReal(-1.00000000000000))*(x153)))); | |
op[65]=((((IkReal(-1.00000000000000))*(x148)))+(x240)); | |
op[66]=((IkReal(-1.08000000000000))*(r10)); | |
op[67]=((IkReal(2.16000000000000))*(r11)); | |
op[68]=((IkReal(1.08000000000000))*(r10)); | |
op[69]=((x241)+(((IkReal(-1.00000000000000))*(x150)))); | |
op[70]=((x151)+(((IkReal(-1.00000000000000))*(x153)))+(((IkReal(-1.00000000000000))*(x152)))); | |
op[71]=((x150)+(((IkReal(-1.00000000000000))*(x241)))); | |
op[72]=((((IkReal(-1.00000000000000))*(x155)))+(x154)+(x281)+(((IkReal(-1.00000000000000))*(x291)))+(x219)); | |
op[73]=((((IkReal(-1.00000000000000))*(x160)))+(x279)); | |
op[74]=((x154)+(((IkReal(-1.00000000000000))*(x291)))+(x302)+(((IkReal(-1.00000000000000))*(x281)))); | |
op[75]=x221; | |
op[76]=IkReal(0); | |
op[77]=x221; | |
op[78]=((((IkReal(-1.00000000000000))*(x154)))+(x281)+(((IkReal(-1.00000000000000))*(x291)))+(x302)); | |
op[79]=((x160)+(x279)); | |
op[80]=((((IkReal(-1.00000000000000))*(x155)))+(((IkReal(-1.00000000000000))*(x154)))+(((IkReal(-1.00000000000000))*(x291)))+(x219)+(((IkReal(-1.00000000000000))*(x281)))); | |
op[81]=((x293)+(x247)+(((IkReal(-1.00000000000000))*(x311)))); | |
op[82]=((((IkReal(-1.00000000000000))*(x225)))+(x312)+(((IkReal(-1.00000000000000))*(x265)))); | |
op[83]=((((IkReal(-1.00000000000000))*(x247)))+(((IkReal(-1.00000000000000))*(x223)))+(x311)+(x163)); | |
op[84]=((IkReal(0.109080864000000))*(r10)); | |
op[85]=((IkReal(-0.218161728000000))*(r11)); | |
op[86]=((IkReal(-0.109080864000000))*(r10)); | |
op[87]=((((IkReal(-1.00000000000000))*(x247)))+(x293)+(((IkReal(-1.00000000000000))*(x311)))); | |
op[88]=((((IkReal(-1.00000000000000))*(x225)))+(x312)+(x265)); | |
op[89]=((((IkReal(-1.00000000000000))*(x223)))+(x311)+(x163)+(x247)); | |
op[90]=((((IkReal(-1.00000000000000))*(x304)))+(x299)+(((IkReal(-1.00000000000000))*(x172)))+(x266)); | |
op[91]=((x305)+(((IkReal(-1.00000000000000))*(x229)))+(((IkReal(-1.00000000000000))*(x177)))); | |
op[92]=((((IkReal(-1.00000000000000))*(x175)))+(x172)+(x226)+(((IkReal(-1.00000000000000))*(x299)))+(x266)); | |
op[93]=((IkReal(0.0218015280000000))*(r11)); | |
op[94]=((IkReal(0.0436030560000000))*(r10)); | |
op[95]=((IkReal(-0.0218015280000000))*(r11)); | |
op[96]=((x172)+(x175)+(x299)+(x266)+(((IkReal(-1.00000000000000))*(x226)))); | |
op[97]=((x177)+(x305)+(((IkReal(-1.00000000000000))*(x229)))); | |
op[98]=((x304)+(((IkReal(-1.00000000000000))*(x172)))+(((IkReal(-1.00000000000000))*(x299)))+(x266)); | |
op[99]=((((IkReal(-1.00000000000000))*(x179)))+(x181)+(((IkReal(-1.00000000000000))*(x246)))); | |
op[100]=((x184)+(x185)+(((IkReal(-1.00000000000000))*(x186)))); | |
op[101]=((x179)+(x178)+(((IkReal(-1.00000000000000))*(x181)))+(((IkReal(-1.00000000000000))*(x180)))); | |
op[102]=((((IkReal(-1.00000000000000))*(x183)))+(x182)); | |
op[103]=((IkReal(0.267840864000000))*(r11)); | |
op[104]=((x182)+(x183)); | |
op[105]=((x282)+(((IkReal(-1.00000000000000))*(x246)))); | |
op[106]=((((IkReal(-1.00000000000000))*(x185)))+(x184)+(((IkReal(-1.00000000000000))*(x186)))); | |
op[107]=((x178)+(((IkReal(-1.00000000000000))*(x282)))+(((IkReal(-1.00000000000000))*(x180)))); | |
op[108]=((x233)+(((IkReal(-1.00000000000000))*(x66)))+(((IkReal(-1.00000000000000))*(x271)))); | |
op[109]=((x242)+(((IkReal(-1.00000000000000))*(x68)))); | |
op[110]=((x66)+(x234)+(((IkReal(-1.00000000000000))*(x187)))+(((IkReal(-1.00000000000000))*(x64)))); | |
op[111]=x230; | |
op[112]=x188; | |
op[113]=x189; | |
op[114]=((x66)+(x233)+(((IkReal(-1.00000000000000))*(x271)))); | |
op[115]=((x69)+(((IkReal(-1.00000000000000))*(x243)))); | |
op[116]=((x234)+(((IkReal(-1.00000000000000))*(x278)))+(((IkReal(-1.00000000000000))*(x187)))); | |
op[117]=((x237)+(((IkReal(-1.00000000000000))*(x287)))+(npx)+(x72)); | |
op[118]=((((IkReal(-1.00000000000000))*(x79)))+(((IkReal(-1.00000000000000))*(x77)))+(((IkReal(-1.00000000000000))*(x76)))+(x78)+(x80)); | |
op[119]=((IkReal(-0.000315200000000000))+(x287)+(((IkReal(-1.00000000000000))*(x81)))+(((IkReal(-1.00000000000000))*(x72)))+(((IkReal(-1.00000000000000))*(x71)))); | |
op[120]=x244; | |
op[121]=((((IkReal(-1.00000000000000))*(x191)))+(((IkReal(-1.00000000000000))*(x190)))); | |
op[122]=((IkReal(-1.00000000000000))*(x244)); | |
op[123]=((((IkReal(-1.00000000000000))*(x289)))+(x237)+(npx)+(x70)); | |
op[124]=((((IkReal(-1.00000000000000))*(x263)))+(((IkReal(-1.00000000000000))*(x77)))+(x79)+(x80)); | |
op[125]=((IkReal(-0.000315200000000000))+(x289)+(((IkReal(-1.00000000000000))*(x81)))+(((IkReal(-1.00000000000000))*(x273)))); | |
op[126]=((((IkReal(-1.00000000000000))*(x301)))+(x251)+(((IkReal(-1.00000000000000))*(x284)))+(x264)+(x84)); | |
op[127]=x306; | |
op[128]=((((IkReal(-1.00000000000000))*(x301)))+(x251)+(((IkReal(-1.00000000000000))*(x309)))+(((IkReal(-1.00000000000000))*(x264)))); | |
op[129]=((((IkReal(-1.00000000000000))*(x91)))+(x267)); | |
op[130]=x193; | |
op[131]=((((IkReal(-1.00000000000000))*(x90)))+(((IkReal(-1.00000000000000))*(x91)))+(x89)); | |
op[132]=((((IkReal(-1.00000000000000))*(x301)))+(x284)+(x251)+(((IkReal(-1.00000000000000))*(x84)))+(x264)); | |
op[133]=((((IkReal(-1.00000000000000))*(x92)))+(x245)); | |
op[134]=((((IkReal(-1.00000000000000))*(x301)))+(x309)+(x251)+(((IkReal(-1.00000000000000))*(x264)))); | |
op[135]=((x232)+(x252)+(((IkReal(-1.00000000000000))*(x316)))+(((IkReal(-1.00000000000000))*(x95)))); | |
op[136]=((x256)+(x313)+(((IkReal(-1.00000000000000))*(x213)))+(((IkReal(-1.00000000000000))*(x105)))+(x106)); | |
op[137]=((x231)+(x316)+(((IkReal(-1.00000000000000))*(x297)))+(x101)); | |
op[138]=((IkReal(-1.00000000000000))*(x307)); | |
op[139]=((x283)+(x198)); | |
op[140]=x307; | |
op[141]=((IkReal(-0.00100075587183800))+(x252)+(x253)+(((IkReal(-1.00000000000000))*(x314)))+(((IkReal(-1.00000000000000))*(x95)))+(((IkReal(-1.00000000000000))*(x98)))); | |
op[142]=((((IkReal(-1.00000000000000))*(x256)))+(x315)+(((IkReal(-1.00000000000000))*(x213)))+(x106)); | |
op[143]=((((IkReal(-1.00000000000000))*(x212)))+(x231)+(x314)+(x275)+(((IkReal(-1.00000000000000))*(x253)))); | |
op[144]=((((IkReal(-1.00000000000000))*(x218)))+(x294)+(((IkReal(-1.00000000000000))*(x111)))+(x249)+(x110)+(x269)); | |
op[145]=((x123)+(x310)+(((IkReal(-1.00000000000000))*(x295)))); | |
op[146]=((x276)+(x249)+(((IkReal(-1.00000000000000))*(x110)))+(((IkReal(-1.00000000000000))*(x115)))+(x111)+(((IkReal(-1.00000000000000))*(x294)))); | |
op[147]=((x117)+(x118)+(((IkReal(-1.00000000000000))*(x119)))); | |
op[148]=((((IkReal(-1.00000000000000))*(x200)))+(x199)); | |
op[149]=((((IkReal(-1.00000000000000))*(x118)))+(x117)+(x119)); | |
op[150]=((((IkReal(-1.00000000000000))*(x218)))+(((IkReal(-1.00000000000000))*(x269)))+(x294)+(((IkReal(-1.00000000000000))*(x248)))+(x249)); | |
op[151]=((x303)+(((IkReal(-1.00000000000000))*(x295)))+(((IkReal(-1.00000000000000))*(x123)))+(((IkReal(-1.00000000000000))*(x121)))); | |
op[152]=((((IkReal(-1.00000000000000))*(x114)))+(x259)+(x249)+(x248)+(((IkReal(-1.00000000000000))*(x294)))); | |
op[153]=((IkReal(0.0243082794441289))+(x285)+(x250)+(((IkReal(-1.00000000000000))*(x308)))+(((IkReal(-1.00000000000000))*(x130)))); | |
op[154]=((((IkReal(-1.00000000000000))*(x290)))+(((IkReal(-1.00000000000000))*(x137)))+(x138)+(x140)); | |
op[155]=((IkReal(0.0243082794441289))+(((IkReal(-1.00000000000000))*(x129)))+(((IkReal(-1.00000000000000))*(x126)))+(x125)+(((IkReal(-1.00000000000000))*(x250)))+(x262)+(((IkReal(-1.00000000000000))*(x130)))); | |
op[156]=((x135)+(x134)+(((IkReal(-1.00000000000000))*(x133)))); | |
op[157]=((((IkReal(-1.00000000000000))*(x202)))+(((IkReal(-1.00000000000000))*(x201)))); | |
op[158]=((((IkReal(-1.00000000000000))*(x258)))+(((IkReal(-1.00000000000000))*(x134)))); | |
op[159]=((IkReal(0.0243082794441289))+(((IkReal(-1.00000000000000))*(x260)))+(((IkReal(-1.00000000000000))*(x129)))+(((IkReal(-1.00000000000000))*(x262)))+(x131)+(x261)); | |
op[160]=((((IkReal(-1.00000000000000))*(x290)))+(((IkReal(-1.00000000000000))*(x140)))+(x137)+(x138)); | |
op[161]=((IkReal(0.0243082794441289))+(((IkReal(-1.00000000000000))*(x129)))+(((IkReal(-1.00000000000000))*(x127)))+(x128)+(((IkReal(-1.00000000000000))*(x277)))+(((IkReal(-1.00000000000000))*(x261)))+(x132)); | |
solvedialyticpoly12qep(op,zeror,numroots); | |
IkReal j6array[16], cj6array[16], sj6array[16], j7array[16], cj7array[16], sj7array[16], j11array[16], cj11array[16], sj11array[16]; | |
int numsolutions = 0; | |
for(int ij6 = 0; ij6 < numroots; ij6 += 3) | |
{ | |
IkReal htj6 = zeror[ij6+0], htj7 = zeror[ij6+1], htj11 = zeror[ij6+2]; | |
j6array[numsolutions]=((IkReal(2.00000000000000))*(atan(htj6))); | |
j7array[numsolutions]=((IkReal(2.00000000000000))*(atan(htj7))); | |
j11array[numsolutions]=((IkReal(2.00000000000000))*(atan(htj11))); | |
IkReal x317=(htj6)*(htj6); | |
IkReal x318=(htj7)*(htj7); | |
IkReal x319=(htj11)*(htj11); | |
cj6array[numsolutions]=((((IKabs(((IkReal(1.00000000000000))+(x317))) != 0)?((IkReal)1/(((IkReal(1.00000000000000))+(x317)))):(IkReal)1.0e30))*(((IkReal(1.00000000000000))+(((IkReal(-1.00000000000000))*(x317)))))); | |
cj7array[numsolutions]=((((IKabs(((IkReal(1.00000000000000))+(x318))) != 0)?((IkReal)1/(((IkReal(1.00000000000000))+(x318)))):(IkReal)1.0e30))*(((IkReal(1.00000000000000))+(((IkReal(-1.00000000000000))*(x318)))))); | |
cj11array[numsolutions]=((((IKabs(((IkReal(1.00000000000000))+(x319))) != 0)?((IkReal)1/(((IkReal(1.00000000000000))+(x319)))):(IkReal)1.0e30))*(((IkReal(1.00000000000000))+(((IkReal(-1.00000000000000))*(x319)))))); | |
sj6array[numsolutions]=((IkReal(2.00000000000000))*(htj6)*(((IKabs(((IkReal(1.00000000000000))+((htj6)*(htj6)))) != 0)?((IkReal)1/(((IkReal(1.00000000000000))+((htj6)*(htj6))))):(IkReal)1.0e30))); | |
sj7array[numsolutions]=((IkReal(2.00000000000000))*(htj7)*(((IKabs(((IkReal(1.00000000000000))+((htj7)*(htj7)))) != 0)?((IkReal)1/(((IkReal(1.00000000000000))+((htj7)*(htj7))))):(IkReal)1.0e30))); | |
sj11array[numsolutions]=((IkReal(2.00000000000000))*(htj11)*(((IKabs(((IkReal(1.00000000000000))+((htj11)*(htj11)))) != 0)?((IkReal)1/(((IkReal(1.00000000000000))+((htj11)*(htj11))))):(IkReal)1.0e30))); | |
if( j6array[numsolutions] > IKPI ) | |
{ | |
j6array[numsolutions]-=IK2PI; | |
} | |
else if( j6array[numsolutions] < -IKPI ) | |
{ | |
j6array[numsolutions]+=IK2PI; | |
} | |
if( j7array[numsolutions] > IKPI ) | |
{ | |
j7array[numsolutions]-=IK2PI; | |
} | |
else if( j7array[numsolutions] < -IKPI ) | |
{ | |
j7array[numsolutions]+=IK2PI; | |
} | |
if( j11array[numsolutions] > IKPI ) | |
{ | |
j11array[numsolutions]-=IK2PI; | |
} | |
else if( j11array[numsolutions] < -IKPI ) | |
{ | |
j11array[numsolutions]+=IK2PI; | |
} | |
numsolutions++; | |
} | |
bool j6valid[16]={true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true}; | |
_nj6 = 16; | |
_nj7 = 1; | |
_nj11 = 1; | |
for(int ij6 = 0; ij6 < numsolutions; ++ij6) | |
{ | |
if( !j6valid[ij6] ) | |
{ | |
continue; | |
} | |
_ij6[0] = ij6; _ij6[1] = -1; | |
_ij7[0] = 0; _ij7[1] = -1; | |
_ij11[0] = 0; _ij11[1] = -1; | |
for(int iij6 = ij6+1; iij6 < numsolutions; ++iij6) | |
{ | |
if( !j6valid[iij6] ) { continue; } | |
if( IKabs(cj6array[ij6]-cj6array[iij6]) < IKFAST_SOLUTION_THRESH && IKabs(sj6array[ij6]-sj6array[iij6]) < IKFAST_SOLUTION_THRESH && IKabs(cj7array[ij6]-cj7array[iij6]) < IKFAST_SOLUTION_THRESH && IKabs(sj7array[ij6]-sj7array[iij6]) < IKFAST_SOLUTION_THRESH && IKabs(cj11array[ij6]-cj11array[iij6]) < IKFAST_SOLUTION_THRESH && IKabs(sj11array[ij6]-sj11array[iij6]) < IKFAST_SOLUTION_THRESH && 1 ) | |
{ | |
j6valid[iij6]=false; _ij6[1] = iij6; _ij7[1] = 0; _ij11[1] = 0; break; | |
} | |
} | |
j6 = j6array[ij6]; cj6 = cj6array[ij6]; sj6 = sj6array[ij6]; | |
j7 = j7array[ij6]; cj7 = cj7array[ij6]; sj7 = sj7array[ij6]; | |
j11 = j11array[ij6]; cj11 = cj11array[ij6]; sj11 = sj11array[ij6]; | |
{ | |
IkReal j9array[1], cj9array[1], sj9array[1]; | |
bool j9valid[1]={false}; | |
_nj9 = 1; | |
IkReal x320=((cj11)*(r00)*(sj6)); | |
IkReal x321=((r01)*(sj11)*(sj6)); | |
IkReal x322=((cj11)*(cj6)*(r10)); | |
IkReal x323=((cj6)*(r11)*(sj11)); | |
if( IKabs(((IkReal(-6.65929918781793))+(((IkReal(0.207960835801989))*(x321)))+(((IkReal(0.207960835801989))*(x322)))+(((IkReal(-659.774225260116))*(cj6)*(py)))+(((IkReal(-0.207960835801989))*(x320)))+(((IkReal(-0.207960835801989))*(x323)))+(((IkReal(659.774225260116))*(px)*(sj6))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(x323)))+(x321)+(x322)+(((IkReal(-1.00000000000000))*(x320))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((IkReal(-6.65929918781793))+(((IkReal(0.207960835801989))*(x321)))+(((IkReal(0.207960835801989))*(x322)))+(((IkReal(-659.774225260116))*(cj6)*(py)))+(((IkReal(-0.207960835801989))*(x320)))+(((IkReal(-0.207960835801989))*(x323)))+(((IkReal(659.774225260116))*(px)*(sj6)))))+IKsqr(((((IkReal(-1.00000000000000))*(x323)))+(x321)+(x322)+(((IkReal(-1.00000000000000))*(x320)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j9array[0]=IKatan2(((IkReal(-6.65929918781793))+(((IkReal(0.207960835801989))*(x321)))+(((IkReal(0.207960835801989))*(x322)))+(((IkReal(-659.774225260116))*(cj6)*(py)))+(((IkReal(-0.207960835801989))*(x320)))+(((IkReal(-0.207960835801989))*(x323)))+(((IkReal(659.774225260116))*(px)*(sj6)))), ((((IkReal(-1.00000000000000))*(x323)))+(x321)+(x322)+(((IkReal(-1.00000000000000))*(x320))))); | |
sj9array[0]=IKsin(j9array[0]); | |
cj9array[0]=IKcos(j9array[0]); | |
if( j9array[0] > IKPI ) | |
{ | |
j9array[0]-=IK2PI; | |
} | |
else if( j9array[0] < -IKPI ) | |
{ j9array[0]+=IK2PI; | |
} | |
j9valid[0] = true; | |
for(int ij9 = 0; ij9 < 1; ++ij9) | |
{ | |
if( !j9valid[ij9] ) | |
{ | |
continue; | |
} | |
_ij9[0] = ij9; _ij9[1] = -1; | |
for(int iij9 = ij9+1; iij9 < 1; ++iij9) | |
{ | |
if( j9valid[iij9] && IKabs(cj9array[ij9]-cj9array[iij9]) < IKFAST_SOLUTION_THRESH && IKabs(sj9array[ij9]-sj9array[iij9]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j9valid[iij9]=false; _ij9[1] = iij9; break; | |
} | |
} | |
j9 = j9array[ij9]; cj9 = cj9array[ij9]; sj9 = sj9array[ij9]; | |
{ | |
IkReal evalcond[2]; | |
IkReal x324=IKcos(j9); | |
IkReal x325=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x326=((r01)*(sj6)); | |
IkReal x327=((cj6)*(r11)); | |
IkReal x328=((cj11)*(cj6)*(r10)); | |
IkReal x329=((cj11)*(r00)*(sj6)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(sj11)*(x326)))+(((IkReal(-1.00000000000000))*(x328)))+(x324)+(x329)+(((sj11)*(x327)))); | |
evalcond[1]=((IkReal(-0.0100933000000000))+(((IkReal(-0.0620002000000000))*(x329)))+(((px)*(sj6)))+(((IkReal(0.0620002000000000))*(x328)))+(((IkReal(-0.0616850000000000))*(x324)))+(((x325)*(x326)))+(((IkReal(-1.00000000000000))*(cj6)*(py)))+(((IkReal(-1.00000000000000))*(x325)*(x327)))+(((IkReal(-0.00151567000000000))*(IKsin(j9))))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst1; | |
gconst1=IKsign(sj9); | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst0; | |
gconst0=IKsign(sj9); | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[2]; | |
dummyeval[0]=((((IkReal(-46.2767620920121))*(sj9)))+(((IkReal(40.6981730851703))*((sj9)*(sj9))))+(((IkReal(-1.00000000000000))*(cj9)*(sj9)))); | |
dummyeval[1]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 || IKabs(dummyeval[1]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[7]; | |
IkReal x330=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x331=((r01)*(sj6)); | |
IkReal x332=((cj6)*(sj7)); | |
IkReal x333=((r01)*(sj11)); | |
IkReal x334=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x335=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x336=((cj11)*(r10)); | |
IkReal x337=((r11)*(sj11)); | |
IkReal x338=((sj6)*(sj7)); | |
IkReal x339=((r21)*(sj11)); | |
IkReal x340=((r00)*(sj6)); | |
IkReal x341=((cj7)*(sj6)); | |
IkReal x342=((cj6)*(r10)); | |
IkReal x343=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x344=((cj11)*(cj6)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(3.14159265358979))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x334)))); | |
evalcond[2]=((IkReal(1.00000000000000))+(((IkReal(-1.00000000000000))*(x330)*(x342)))+(((cj11)*(x340)))+(((cj6)*(x337)))+(((IkReal(-1.00000000000000))*(x331)*(x343)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x330)*(x331)))+(((IkReal(-1.00000000000000))*(x340)*(x343)))+(((sj11)*(x342)))+(((r11)*(x344)))); | |
evalcond[4]=((IkReal(-0.0717783000000000))+(((px)*(sj6)))+(((x331)*(x335)))+(((IkReal(-1.00000000000000))*(py)*(x334)))+(((IkReal(-1.00000000000000))*(cj6)*(r11)*(x335)))+(((IkReal(0.0620002000000000))*(cj6)*(x336)))+(((IkReal(-0.0620002000000000))*(cj11)*(x340)))); | |
evalcond[5]=((((x337)*(x338)))+(((IkReal(-1.00000000000000))*(r10)*(x330)*(x338)))+(((cj7)*(x339)))+(((x332)*(x333)))+(((IkReal(-1.00000000000000))*(r00)*(x330)*(x332)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x330)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(r20)*(sj7)*(x330)))+(((x336)*(x341)))+(((IkReal(-1.00000000000000))*(cj7)*(x333)*(x334)))+(((IkReal(-1.00000000000000))*(x337)*(x341)))+(((sj7)*(x339)))+(((cj7)*(r00)*(x344)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x345=((IkReal(0.0461153212112420))*(cj11)); | |
IkReal x346=((cj6)*(sj7)); | |
IkReal x347=((cj7)*(r20)); | |
IkReal x348=((IkReal(3.13477742929877))*(px)); | |
IkReal x349=((IkReal(0.194356827572010))*(cj11)); | |
IkReal x350=((IkReal(3.13477742929877))*(pz)); | |
IkReal x351=((py)*(sj6)); | |
IkReal x352=((IkReal(0.743793104074535))*(sj7)); | |
IkReal x353=((r11)*(sj6)); | |
IkReal x354=((r20)*(sj7)); | |
IkReal x355=((cj6)*(r01)); | |
IkReal x356=((cj6)*(cj7)); | |
IkReal x357=((IkReal(0.743793104074535))*(px)); | |
IkReal x358=((IkReal(0.743793104074535))*(cj7)); | |
IkReal x359=((r10)*(sj6)); | |
IkReal x360=((IkReal(0.194356827572010))*(sj11)); | |
IkReal x361=((IkReal(0.0461153212112420))*(sj11)); | |
IkReal x362=((r00)*(x356)); | |
IkReal x363=((cj7)*(x360)); | |
IkReal x364=((cj7)*(x361)); | |
IkReal x365=((r21)*(sj11)*(sj7)); | |
if( IKabs(((IkReal(0.846389905910668))+(((IkReal(-1.00000000000000))*(x346)*(x348)))+(((IkReal(-3.13477742929877))*(sj7)*(x351)))+(((x356)*(x357)))+(((r00)*(x346)*(x349)))+(((IkReal(-1.00000000000000))*(cj7)*(x350)))+(((IkReal(-1.00000000000000))*(r01)*(x346)*(x360)))+(((IkReal(-1.00000000000000))*(pz)*(x352)))+(((x355)*(x364)))+(((IkReal(-1.00000000000000))*(cj7)*(x345)*(x359)))+(((IkReal(-1.00000000000000))*(sj7)*(x353)*(x360)))+(((x347)*(x349)))+(((x351)*(x358)))+(((sj7)*(x349)*(x359)))+(((IkReal(-1.00000000000000))*(x345)*(x362)))+(((x353)*(x364)))+(((IkReal(-1.00000000000000))*(r21)*(x363)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x361)))+(((x345)*(x354))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((IkReal(-0.200824138100125))+(((x353)*(x363)))+(((pz)*(x358)))+(((x348)*(x356)))+(((x349)*(x354)))+(((x355)*(x363)))+(((IkReal(-1.00000000000000))*(sj7)*(x350)))+(((r21)*(x364)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x360)))+(((IkReal(-1.00000000000000))*(sj7)*(x345)*(x359)))+(((x351)*(x352)))+(((IkReal(-1.00000000000000))*(r00)*(x345)*(x346)))+(((sj7)*(x353)*(x361)))+(((IkReal(3.13477742929877))*(cj7)*(x351)))+(((r01)*(x346)*(x361)))+(((x346)*(x357)))+(((IkReal(-1.00000000000000))*(x345)*(x347)))+(((IkReal(-1.00000000000000))*(cj7)*(x349)*(x359)))+(((IkReal(-1.00000000000000))*(x349)*(x362))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((IkReal(0.846389905910668))+(((IkReal(-1.00000000000000))*(x346)*(x348)))+(((IkReal(-3.13477742929877))*(sj7)*(x351)))+(((x356)*(x357)))+(((r00)*(x346)*(x349)))+(((IkReal(-1.00000000000000))*(cj7)*(x350)))+(((IkReal(-1.00000000000000))*(r01)*(x346)*(x360)))+(((IkReal(-1.00000000000000))*(pz)*(x352)))+(((x355)*(x364)))+(((IkReal(-1.00000000000000))*(cj7)*(x345)*(x359)))+(((IkReal(-1.00000000000000))*(sj7)*(x353)*(x360)))+(((x347)*(x349)))+(((x351)*(x358)))+(((sj7)*(x349)*(x359)))+(((IkReal(-1.00000000000000))*(x345)*(x362)))+(((x353)*(x364)))+(((IkReal(-1.00000000000000))*(r21)*(x363)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x361)))+(((x345)*(x354)))))+IKsqr(((IkReal(-0.200824138100125))+(((x353)*(x363)))+(((pz)*(x358)))+(((x348)*(x356)))+(((x349)*(x354)))+(((x355)*(x363)))+(((IkReal(-1.00000000000000))*(sj7)*(x350)))+(((r21)*(x364)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x360)))+(((IkReal(-1.00000000000000))*(sj7)*(x345)*(x359)))+(((x351)*(x352)))+(((IkReal(-1.00000000000000))*(r00)*(x345)*(x346)))+(((sj7)*(x353)*(x361)))+(((IkReal(3.13477742929877))*(cj7)*(x351)))+(((r01)*(x346)*(x361)))+(((x346)*(x357)))+(((IkReal(-1.00000000000000))*(x345)*(x347)))+(((IkReal(-1.00000000000000))*(cj7)*(x349)*(x359)))+(((IkReal(-1.00000000000000))*(x349)*(x362)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((IkReal(0.846389905910668))+(((IkReal(-1.00000000000000))*(x346)*(x348)))+(((IkReal(-3.13477742929877))*(sj7)*(x351)))+(((x356)*(x357)))+(((r00)*(x346)*(x349)))+(((IkReal(-1.00000000000000))*(cj7)*(x350)))+(((IkReal(-1.00000000000000))*(r01)*(x346)*(x360)))+(((IkReal(-1.00000000000000))*(pz)*(x352)))+(((x355)*(x364)))+(((IkReal(-1.00000000000000))*(cj7)*(x345)*(x359)))+(((IkReal(-1.00000000000000))*(sj7)*(x353)*(x360)))+(((x347)*(x349)))+(((x351)*(x358)))+(((sj7)*(x349)*(x359)))+(((IkReal(-1.00000000000000))*(x345)*(x362)))+(((x353)*(x364)))+(((IkReal(-1.00000000000000))*(r21)*(x363)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x361)))+(((x345)*(x354)))), ((IkReal(-0.200824138100125))+(((x353)*(x363)))+(((pz)*(x358)))+(((x348)*(x356)))+(((x349)*(x354)))+(((x355)*(x363)))+(((IkReal(-1.00000000000000))*(sj7)*(x350)))+(((r21)*(x364)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x360)))+(((IkReal(-1.00000000000000))*(sj7)*(x345)*(x359)))+(((x351)*(x352)))+(((IkReal(-1.00000000000000))*(r00)*(x345)*(x346)))+(((sj7)*(x353)*(x361)))+(((IkReal(3.13477742929877))*(cj7)*(x351)))+(((r01)*(x346)*(x361)))+(((x346)*(x357)))+(((IkReal(-1.00000000000000))*(x345)*(x347)))+(((IkReal(-1.00000000000000))*(cj7)*(x349)*(x359)))+(((IkReal(-1.00000000000000))*(x349)*(x362))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[2]; | |
IkReal x366=IKcos(j8); | |
IkReal x367=IKsin(j8); | |
IkReal x368=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x369=((cj6)*(sj7)); | |
IkReal x370=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x371=((cj7)*(sj6)); | |
IkReal x372=((IkReal(1.00000000000000))*(pz)); | |
IkReal x373=((sj6)*(sj7)); | |
IkReal x374=((cj6)*(cj7)); | |
evalcond[0]=((((px)*(x374)))+(((IkReal(-0.0716559700000000))*(x367)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x368)))+(((r20)*(sj7)*(x370)))+(((py)*(x371)))+(((IkReal(-1.00000000000000))*(r10)*(x370)*(x371)))+(((IkReal(-1.00000000000000))*(sj7)*(x372)))+(((r11)*(x368)*(x371)))+(((IkReal(-1.00000000000000))*(r00)*(x370)*(x374)))+(((r01)*(x368)*(x374)))+(((IkReal(-0.302000000000000))*(x366)))); | |
evalcond[1]=((IkReal(0.270000000000000))+(((r00)*(x369)*(x370)))+(((IkReal(0.0716559700000000))*(x366)))+(((cj7)*(r20)*(x370)))+(((IkReal(-1.00000000000000))*(px)*(x369)))+(((IkReal(-0.302000000000000))*(x367)))+(((IkReal(-1.00000000000000))*(cj7)*(x372)))+(((IkReal(-1.00000000000000))*(cj7)*(r21)*(x368)))+(((r10)*(x370)*(x373)))+(((IkReal(-1.00000000000000))*(r11)*(x368)*(x373)))+(((IkReal(-1.00000000000000))*(py)*(x373)))+(((IkReal(-1.00000000000000))*(r01)*(x368)*(x369)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst18; | |
gconst18=IKsign((((cj8)*(cj8))+((sj8)*(sj8)))); | |
dummyeval[0]=(((cj8)*(cj8))+((sj8)*(sj8))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst19; | |
gconst19=IKsign(((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8)))))); | |
dummyeval[0]=((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8))))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
continue; | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x375=((sj7)*(sj8)); | |
IkReal x376=((cj11)*(r21)); | |
IkReal x377=((cj6)*(r00)); | |
IkReal x378=((cj8)*(sj7)); | |
IkReal x379=((r10)*(sj6)); | |
IkReal x380=((IkReal(1.00000000000000))*(cj8)); | |
IkReal x381=((cj7)*(sj11)); | |
IkReal x382=((r20)*(sj11)); | |
IkReal x383=((cj6)*(cj7)); | |
IkReal x384=((cj11)*(r01)); | |
IkReal x385=((IkReal(1.00000000000000))*(sj8)); | |
IkReal x386=((cj7)*(r12)*(sj6)); | |
IkReal x387=((x381)*(x385)); | |
IkReal x388=((cj11)*(cj7)*(r11)*(sj6)); | |
if( IKabs(((gconst19)*(((((r02)*(sj8)*(x383)))+(((IkReal(-1.00000000000000))*(r22)*(x375)))+(((IkReal(-1.00000000000000))*(x380)*(x383)*(x384)))+(((sj8)*(x386)))+(((IkReal(-1.00000000000000))*(x379)*(x380)*(x381)))+(((IkReal(-1.00000000000000))*(x377)*(x380)*(x381)))+(((x376)*(x378)))+(((x378)*(x382)))+(((IkReal(-1.00000000000000))*(x380)*(x388))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst19)*(((((IkReal(-1.00000000000000))*(x379)*(x387)))+(((x375)*(x382)))+(((IkReal(-1.00000000000000))*(x385)*(x388)))+(((IkReal(-1.00000000000000))*(x380)*(x386)))+(((r22)*(x378)))+(((x375)*(x376)))+(((IkReal(-1.00000000000000))*(x377)*(x387)))+(((IkReal(-1.00000000000000))*(x383)*(x384)*(x385)))+(((IkReal(-1.00000000000000))*(r02)*(x380)*(x383))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst19)*(((((r02)*(sj8)*(x383)))+(((IkReal(-1.00000000000000))*(r22)*(x375)))+(((IkReal(-1.00000000000000))*(x380)*(x383)*(x384)))+(((sj8)*(x386)))+(((IkReal(-1.00000000000000))*(x379)*(x380)*(x381)))+(((IkReal(-1.00000000000000))*(x377)*(x380)*(x381)))+(((x376)*(x378)))+(((x378)*(x382)))+(((IkReal(-1.00000000000000))*(x380)*(x388)))))), ((gconst19)*(((((IkReal(-1.00000000000000))*(x379)*(x387)))+(((x375)*(x382)))+(((IkReal(-1.00000000000000))*(x385)*(x388)))+(((IkReal(-1.00000000000000))*(x380)*(x386)))+(((r22)*(x378)))+(((x375)*(x376)))+(((IkReal(-1.00000000000000))*(x377)*(x387)))+(((IkReal(-1.00000000000000))*(x383)*(x384)*(x385)))+(((IkReal(-1.00000000000000))*(r02)*(x380)*(x383))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x389=IKcos(j10); | |
IkReal x390=IKsin(j10); | |
IkReal x391=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x392=((cj6)*(r02)); | |
IkReal x393=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x394=((r20)*(sj11)); | |
IkReal x395=((cj11)*(r21)); | |
IkReal x396=((r12)*(sj6)); | |
IkReal x397=((sj8)*(x390)); | |
IkReal x398=((cj8)*(x390)); | |
IkReal x399=((r10)*(sj11)*(sj6)); | |
IkReal x400=((IkReal(1.00000000000000))*(x389)); | |
IkReal x401=((cj11)*(cj6)*(r01)); | |
IkReal x402=((cj11)*(r11)*(sj6)); | |
IkReal x403=((cj6)*(r00)*(sj11)); | |
IkReal x404=((cj8)*(x400)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(x404)))+(((cj7)*(x392)))+(((cj7)*(x396)))+(((IkReal(-1.00000000000000))*(r22)*(x393)))+(x397)); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(sj8)*(x400)))+(((IkReal(-1.00000000000000))*(x392)*(x393)))+(((IkReal(-1.00000000000000))*(x393)*(x396)))+(((IkReal(-1.00000000000000))*(r22)*(x391)))+(((IkReal(-1.00000000000000))*(x398)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x404)))+(((cj7)*(x394)))+(((sj7)*(x399)))+(((sj7)*(x403)))+(((sj7)*(x401)))+(((cj7)*(x395)))+(x397)+(((sj7)*(x402)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x391)*(x399)))+(((IkReal(-1.00000000000000))*(x391)*(x401)))+(((IkReal(-1.00000000000000))*(x391)*(x402)))+(((sj7)*(x395)))+(((sj7)*(x394)))+(((sj8)*(x389)))+(x398)+(((IkReal(-1.00000000000000))*(x391)*(x403)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x405=((cj7)*(cj8)); | |
IkReal x406=((r12)*(sj6)); | |
IkReal x407=((cj6)*(r02)); | |
IkReal x408=((IkReal(1.00000000000000))*(r22)); | |
IkReal x409=((sj7)*(sj8)); | |
IkReal x410=((cj7)*(sj8)); | |
IkReal x411=((IkReal(1.00000000000000))*(cj8)*(sj7)); | |
if( IKabs(((gconst18)*(((((IkReal(-1.00000000000000))*(x407)*(x411)))+(((IkReal(-1.00000000000000))*(x406)*(x410)))+(((IkReal(-1.00000000000000))*(x407)*(x410)))+(((IkReal(-1.00000000000000))*(x405)*(x408)))+(((IkReal(-1.00000000000000))*(x406)*(x411)))+(((r22)*(x409))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst18)*(((((IkReal(-1.00000000000000))*(x408)*(x410)))+(((x405)*(x406)))+(((IkReal(-1.00000000000000))*(x406)*(x409)))+(((x405)*(x407)))+(((IkReal(-1.00000000000000))*(x407)*(x409)))+(((IkReal(-1.00000000000000))*(cj8)*(sj7)*(x408))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst18)*(((((IkReal(-1.00000000000000))*(x407)*(x411)))+(((IkReal(-1.00000000000000))*(x406)*(x410)))+(((IkReal(-1.00000000000000))*(x407)*(x410)))+(((IkReal(-1.00000000000000))*(x405)*(x408)))+(((IkReal(-1.00000000000000))*(x406)*(x411)))+(((r22)*(x409)))))), ((gconst18)*(((((IkReal(-1.00000000000000))*(x408)*(x410)))+(((x405)*(x406)))+(((IkReal(-1.00000000000000))*(x406)*(x409)))+(((x405)*(x407)))+(((IkReal(-1.00000000000000))*(x407)*(x409)))+(((IkReal(-1.00000000000000))*(cj8)*(sj7)*(x408))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x412=IKcos(j10); | |
IkReal x413=IKsin(j10); | |
IkReal x414=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x415=((cj6)*(r02)); | |
IkReal x416=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x417=((r20)*(sj11)); | |
IkReal x418=((cj11)*(r21)); | |
IkReal x419=((r12)*(sj6)); | |
IkReal x420=((sj8)*(x413)); | |
IkReal x421=((cj8)*(x413)); | |
IkReal x422=((r10)*(sj11)*(sj6)); | |
IkReal x423=((IkReal(1.00000000000000))*(x412)); | |
IkReal x424=((cj11)*(cj6)*(r01)); | |
IkReal x425=((cj11)*(r11)*(sj6)); | |
IkReal x426=((cj6)*(r00)*(sj11)); | |
IkReal x427=((cj8)*(x423)); | |
evalcond[0]=((x420)+(((cj7)*(x415)))+(((IkReal(-1.00000000000000))*(x427)))+(((cj7)*(x419)))+(((IkReal(-1.00000000000000))*(r22)*(x416)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x415)*(x416)))+(((IkReal(-1.00000000000000))*(sj8)*(x423)))+(((IkReal(-1.00000000000000))*(r22)*(x414)))+(((IkReal(-1.00000000000000))*(x416)*(x419)))+(((IkReal(-1.00000000000000))*(x421)))); | |
evalcond[2]=((((sj7)*(x424)))+(x420)+(((sj7)*(x426)))+(((cj7)*(x418)))+(((sj7)*(x422)))+(((IkReal(-1.00000000000000))*(x427)))+(((sj7)*(x425)))+(((cj7)*(x417)))); | |
evalcond[3]=((((sj7)*(x418)))+(((IkReal(-1.00000000000000))*(x414)*(x426)))+(((IkReal(-1.00000000000000))*(x414)*(x422)))+(x421)+(((sj8)*(x412)))+(((sj7)*(x417)))+(((IkReal(-1.00000000000000))*(x414)*(x424)))+(((IkReal(-1.00000000000000))*(x414)*(x425)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x428=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x429=((r01)*(sj6)); | |
IkReal x430=((cj6)*(sj7)); | |
IkReal x431=((r01)*(sj11)); | |
IkReal x432=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x433=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x434=((cj11)*(r10)); | |
IkReal x435=((r11)*(sj11)); | |
IkReal x436=((sj6)*(sj7)); | |
IkReal x437=((r21)*(sj11)); | |
IkReal x438=((r00)*(sj6)); | |
IkReal x439=((cj7)*(sj6)); | |
IkReal x440=((cj6)*(r10)); | |
IkReal x441=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x442=((cj11)*(cj6)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(j9, IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x432)))); | |
evalcond[2]=((IkReal(-1.00000000000000))+(((cj11)*(x438)))+(((cj6)*(x435)))+(((IkReal(-1.00000000000000))*(x429)*(x441)))+(((IkReal(-1.00000000000000))*(x428)*(x440)))); | |
evalcond[3]=((((sj11)*(x440)))+(((IkReal(-1.00000000000000))*(x438)*(x441)))+(((IkReal(-1.00000000000000))*(x428)*(x429)))+(((r11)*(x442)))); | |
evalcond[4]=((IkReal(0.0515917000000000))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(cj6)*(r11)*(x433)))+(((IkReal(-0.0620002000000000))*(cj11)*(x438)))+(((IkReal(0.0620002000000000))*(cj6)*(x434)))+(((IkReal(-1.00000000000000))*(py)*(x432)))+(((x429)*(x433)))); | |
evalcond[5]=((((cj7)*(x437)))+(((x430)*(x431)))+(((IkReal(-1.00000000000000))*(r10)*(x428)*(x436)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x428)))+(((x435)*(x436)))+(((IkReal(-1.00000000000000))*(r00)*(x428)*(x430)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(cj7)*(x431)*(x432)))+(((cj7)*(r00)*(x442)))+(((IkReal(-1.00000000000000))*(x435)*(x439)))+(((IkReal(-1.00000000000000))*(r20)*(sj7)*(x428)))+(((x434)*(x439)))+(((sj7)*(x437)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x443=((cj6)*(sj7)); | |
IkReal x444=((cj11)*(cj7)); | |
IkReal x445=((IkReal(0.0443602609595982))*(r20)); | |
IkReal x446=((IkReal(0.715485771974900))*(px)); | |
IkReal x447=((cj6)*(cj7)); | |
IkReal x448=((pz)*(sj7)); | |
IkReal x449=((IkReal(3.14867567426476))*(cj7)); | |
IkReal x450=((py)*(sj6)); | |
IkReal x451=((IkReal(0.195218521539550))*(sj11)); | |
IkReal x452=((r11)*(sj6)); | |
IkReal x453=((IkReal(3.14867567426476))*(px)); | |
IkReal x454=((IkReal(0.195218521539550))*(r00)); | |
IkReal x455=((IkReal(0.715485771974900))*(cj7)); | |
IkReal x456=((IkReal(0.0443602609595982))*(sj7)); | |
IkReal x457=((r21)*(sj11)); | |
IkReal x458=((r10)*(sj6)); | |
IkReal x459=((IkReal(0.0443602609595982))*(r00)); | |
IkReal x460=((IkReal(0.0443602609595982))*(cj7)); | |
IkReal x461=((IkReal(0.0443602609595982))*(r01)*(sj11)); | |
IkReal x462=((IkReal(0.195218521539550))*(cj11)*(sj7)); | |
if( IKabs(((IkReal(0.850142432051486))+(((IkReal(-1.00000000000000))*(r01)*(x443)*(x451)))+(((IkReal(-0.0443602609595982))*(x444)*(x458)))+(((cj11)*(x443)*(x454)))+(((x447)*(x461)))+(((IkReal(-1.00000000000000))*(cj6)*(x444)*(x459)))+(((IkReal(-1.00000000000000))*(pz)*(x449)))+(((x450)*(x455)))+(((x446)*(x447)))+(((IkReal(-1.00000000000000))*(sj7)*(x451)*(x452)))+(((sj11)*(x452)*(x460)))+(((IkReal(-1.00000000000000))*(x456)*(x457)))+(((IkReal(-0.715485771974900))*(x448)))+(((IkReal(0.195218521539550))*(r20)*(x444)))+(((cj11)*(sj7)*(x445)))+(((IkReal(-1.00000000000000))*(x443)*(x453)))+(((IkReal(-3.14867567426476))*(sj7)*(x450)))+(((x458)*(x462)))+(((IkReal(-1.00000000000000))*(cj7)*(r21)*(x451))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((IkReal(-0.193181158433223))+(((r20)*(x462)))+(((IkReal(-1.00000000000000))*(cj11)*(x456)*(x458)))+(((IkReal(0.715485771974900))*(sj7)*(x450)))+(((IkReal(-3.14867567426476))*(x448)))+(((x443)*(x446)))+(((IkReal(-0.195218521539550))*(x444)*(x458)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x451)))+(((x443)*(x461)))+(((x449)*(x450)))+(((pz)*(x455)))+(((IkReal(-1.00000000000000))*(cj11)*(x443)*(x459)))+(((IkReal(-1.00000000000000))*(x444)*(x445)))+(((x457)*(x460)))+(((x447)*(x453)))+(((cj7)*(x451)*(x452)))+(((IkReal(-1.00000000000000))*(cj6)*(x444)*(x454)))+(((r01)*(x447)*(x451)))+(((sj11)*(x452)*(x456))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((IkReal(0.850142432051486))+(((IkReal(-1.00000000000000))*(r01)*(x443)*(x451)))+(((IkReal(-0.0443602609595982))*(x444)*(x458)))+(((cj11)*(x443)*(x454)))+(((x447)*(x461)))+(((IkReal(-1.00000000000000))*(cj6)*(x444)*(x459)))+(((IkReal(-1.00000000000000))*(pz)*(x449)))+(((x450)*(x455)))+(((x446)*(x447)))+(((IkReal(-1.00000000000000))*(sj7)*(x451)*(x452)))+(((sj11)*(x452)*(x460)))+(((IkReal(-1.00000000000000))*(x456)*(x457)))+(((IkReal(-0.715485771974900))*(x448)))+(((IkReal(0.195218521539550))*(r20)*(x444)))+(((cj11)*(sj7)*(x445)))+(((IkReal(-1.00000000000000))*(x443)*(x453)))+(((IkReal(-3.14867567426476))*(sj7)*(x450)))+(((x458)*(x462)))+(((IkReal(-1.00000000000000))*(cj7)*(r21)*(x451)))))+IKsqr(((IkReal(-0.193181158433223))+(((r20)*(x462)))+(((IkReal(-1.00000000000000))*(cj11)*(x456)*(x458)))+(((IkReal(0.715485771974900))*(sj7)*(x450)))+(((IkReal(-3.14867567426476))*(x448)))+(((x443)*(x446)))+(((IkReal(-0.195218521539550))*(x444)*(x458)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x451)))+(((x443)*(x461)))+(((x449)*(x450)))+(((pz)*(x455)))+(((IkReal(-1.00000000000000))*(cj11)*(x443)*(x459)))+(((IkReal(-1.00000000000000))*(x444)*(x445)))+(((x457)*(x460)))+(((x447)*(x453)))+(((cj7)*(x451)*(x452)))+(((IkReal(-1.00000000000000))*(cj6)*(x444)*(x454)))+(((r01)*(x447)*(x451)))+(((sj11)*(x452)*(x456)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((IkReal(0.850142432051486))+(((IkReal(-1.00000000000000))*(r01)*(x443)*(x451)))+(((IkReal(-0.0443602609595982))*(x444)*(x458)))+(((cj11)*(x443)*(x454)))+(((x447)*(x461)))+(((IkReal(-1.00000000000000))*(cj6)*(x444)*(x459)))+(((IkReal(-1.00000000000000))*(pz)*(x449)))+(((x450)*(x455)))+(((x446)*(x447)))+(((IkReal(-1.00000000000000))*(sj7)*(x451)*(x452)))+(((sj11)*(x452)*(x460)))+(((IkReal(-1.00000000000000))*(x456)*(x457)))+(((IkReal(-0.715485771974900))*(x448)))+(((IkReal(0.195218521539550))*(r20)*(x444)))+(((cj11)*(sj7)*(x445)))+(((IkReal(-1.00000000000000))*(x443)*(x453)))+(((IkReal(-3.14867567426476))*(sj7)*(x450)))+(((x458)*(x462)))+(((IkReal(-1.00000000000000))*(cj7)*(r21)*(x451)))), ((IkReal(-0.193181158433223))+(((r20)*(x462)))+(((IkReal(-1.00000000000000))*(cj11)*(x456)*(x458)))+(((IkReal(0.715485771974900))*(sj7)*(x450)))+(((IkReal(-3.14867567426476))*(x448)))+(((x443)*(x446)))+(((IkReal(-0.195218521539550))*(x444)*(x458)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x451)))+(((x443)*(x461)))+(((x449)*(x450)))+(((pz)*(x455)))+(((IkReal(-1.00000000000000))*(cj11)*(x443)*(x459)))+(((IkReal(-1.00000000000000))*(x444)*(x445)))+(((x457)*(x460)))+(((x447)*(x453)))+(((cj7)*(x451)*(x452)))+(((IkReal(-1.00000000000000))*(cj6)*(x444)*(x454)))+(((r01)*(x447)*(x451)))+(((sj11)*(x452)*(x456))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[2]; | |
IkReal x463=IKcos(j8); | |
IkReal x464=IKsin(j8); | |
IkReal x465=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x466=((cj6)*(sj7)); | |
IkReal x467=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x468=((cj7)*(sj6)); | |
IkReal x469=((IkReal(1.00000000000000))*(pz)); | |
IkReal x470=((sj6)*(sj7)); | |
IkReal x471=((cj6)*(cj7)); | |
evalcond[0]=((((px)*(x471)))+(((r11)*(x465)*(x468)))+(((IkReal(-1.00000000000000))*(sj7)*(x469)))+(((IkReal(-0.0686246300000000))*(x464)))+(((IkReal(-1.00000000000000))*(r00)*(x467)*(x471)))+(((IkReal(-0.302000000000000))*(x463)))+(((r20)*(sj7)*(x467)))+(((py)*(x468)))+(((IkReal(-1.00000000000000))*(r21)*(sj7)*(x465)))+(((IkReal(-1.00000000000000))*(r10)*(x467)*(x468)))+(((r01)*(x465)*(x471)))); | |
evalcond[1]=((IkReal(0.270000000000000))+(((r00)*(x466)*(x467)))+(((IkReal(0.0686246300000000))*(x463)))+(((r10)*(x467)*(x470)))+(((IkReal(-1.00000000000000))*(px)*(x466)))+(((IkReal(-1.00000000000000))*(cj7)*(r21)*(x465)))+(((IkReal(-1.00000000000000))*(r11)*(x465)*(x470)))+(((IkReal(-1.00000000000000))*(r01)*(x465)*(x466)))+(((IkReal(-1.00000000000000))*(cj7)*(x469)))+(((IkReal(-1.00000000000000))*(py)*(x470)))+(((IkReal(-0.302000000000000))*(x464)))+(((cj7)*(r20)*(x467)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst20; | |
gconst20=IKsign((((cj8)*(cj8))+((sj8)*(sj8)))); | |
dummyeval[0]=(((cj8)*(cj8))+((sj8)*(sj8))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst21; | |
gconst21=IKsign(((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8)))))); | |
dummyeval[0]=((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8))))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
continue; | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x472=((IkReal(1.00000000000000))*(cj8)); | |
IkReal x473=((cj6)*(sj7)); | |
IkReal x474=((r10)*(sj11)); | |
IkReal x475=((cj7)*(r22)); | |
IkReal x476=((cj8)*(sj11)); | |
IkReal x477=((cj11)*(r01)); | |
IkReal x478=((cj7)*(r20)); | |
IkReal x479=((cj11)*(r11)); | |
IkReal x480=((sj6)*(sj7)); | |
IkReal x481=((sj11)*(sj8)); | |
IkReal x482=((cj11)*(cj7)*(r21)); | |
IkReal x483=((sj8)*(x480)); | |
if( IKabs(((gconst21)*(((((sj8)*(x473)*(x477)))+(((x474)*(x483)))+(((r00)*(x473)*(x481)))+(((IkReal(-1.00000000000000))*(r12)*(x472)*(x480)))+(((IkReal(-1.00000000000000))*(r02)*(x472)*(x473)))+(((IkReal(-1.00000000000000))*(x472)*(x475)))+(((x479)*(x483)))+(((sj8)*(x482)))+(((x478)*(x481))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst21)*(((((r02)*(sj8)*(x473)))+(((r12)*(x483)))+(((cj8)*(x479)*(x480)))+(((cj8)*(x473)*(x477)))+(((cj8)*(x482)))+(((cj8)*(x474)*(x480)))+(((x476)*(x478)))+(((sj8)*(x475)))+(((r00)*(x473)*(x476))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst21)*(((((sj8)*(x473)*(x477)))+(((x474)*(x483)))+(((r00)*(x473)*(x481)))+(((IkReal(-1.00000000000000))*(r12)*(x472)*(x480)))+(((IkReal(-1.00000000000000))*(r02)*(x472)*(x473)))+(((IkReal(-1.00000000000000))*(x472)*(x475)))+(((x479)*(x483)))+(((sj8)*(x482)))+(((x478)*(x481)))))), ((gconst21)*(((((r02)*(sj8)*(x473)))+(((r12)*(x483)))+(((cj8)*(x479)*(x480)))+(((cj8)*(x473)*(x477)))+(((cj8)*(x482)))+(((cj8)*(x474)*(x480)))+(((x476)*(x478)))+(((sj8)*(x475)))+(((r00)*(x473)*(x476))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x484=IKsin(j10); | |
IkReal x485=IKcos(j10); | |
IkReal x486=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x487=((cj6)*(r02)); | |
IkReal x488=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x489=((r20)*(sj11)); | |
IkReal x490=((cj11)*(r21)); | |
IkReal x491=((r12)*(sj6)); | |
IkReal x492=((cj8)*(x484)); | |
IkReal x493=((r10)*(sj11)*(sj6)); | |
IkReal x494=((IkReal(1.00000000000000))*(x485)); | |
IkReal x495=((cj11)*(cj6)*(r01)); | |
IkReal x496=((sj8)*(x484)); | |
IkReal x497=((cj11)*(r11)*(sj6)); | |
IkReal x498=((cj6)*(r00)*(sj11)); | |
IkReal x499=((sj8)*(x494)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(cj8)*(x494)))+(((cj7)*(x487)))+(((cj7)*(x491)))+(((IkReal(-1.00000000000000))*(x496)))+(((IkReal(-1.00000000000000))*(r22)*(x488)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x487)*(x488)))+(((IkReal(-1.00000000000000))*(r22)*(x486)))+(x492)+(((IkReal(-1.00000000000000))*(x488)*(x491)))+(((IkReal(-1.00000000000000))*(x499)))); | |
evalcond[2]=((((cj7)*(x489)))+(((sj7)*(x493)))+(((cj7)*(x490)))+(((sj7)*(x495)))+(((cj8)*(x485)))+(x496)+(((sj7)*(x497)))+(((sj7)*(x498)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x486)*(x495)))+(((sj7)*(x490)))+(((IkReal(-1.00000000000000))*(x486)*(x498)))+(((IkReal(-1.00000000000000))*(x486)*(x497)))+(x492)+(((IkReal(-1.00000000000000))*(x486)*(x493)))+(((sj7)*(x489)))+(((IkReal(-1.00000000000000))*(x499)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x500=((r12)*(sj6)); | |
IkReal x501=((cj7)*(cj8)); | |
IkReal x502=((cj6)*(r02)); | |
IkReal x503=((cj8)*(sj7)); | |
IkReal x504=((cj7)*(sj8)); | |
IkReal x505=((IkReal(1.00000000000000))*(r22)*(sj7)); | |
IkReal x506=((IkReal(1.00000000000000))*(sj7)*(sj8)); | |
if( IKabs(((gconst20)*(((((x502)*(x504)))+(((r22)*(x501)))+(((x500)*(x503)))+(((x500)*(x504)))+(((IkReal(-1.00000000000000))*(sj8)*(x505)))+(((x502)*(x503))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst20)*(((((IkReal(-1.00000000000000))*(r22)*(x504)))+(((x500)*(x501)))+(((IkReal(-1.00000000000000))*(x500)*(x506)))+(((x501)*(x502)))+(((IkReal(-1.00000000000000))*(x502)*(x506)))+(((IkReal(-1.00000000000000))*(r22)*(x503))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst20)*(((((x502)*(x504)))+(((r22)*(x501)))+(((x500)*(x503)))+(((x500)*(x504)))+(((IkReal(-1.00000000000000))*(sj8)*(x505)))+(((x502)*(x503)))))), ((gconst20)*(((((IkReal(-1.00000000000000))*(r22)*(x504)))+(((x500)*(x501)))+(((IkReal(-1.00000000000000))*(x500)*(x506)))+(((x501)*(x502)))+(((IkReal(-1.00000000000000))*(x502)*(x506)))+(((IkReal(-1.00000000000000))*(r22)*(x503))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x507=IKsin(j10); | |
IkReal x508=IKcos(j10); | |
IkReal x509=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x510=((cj6)*(r02)); | |
IkReal x511=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x512=((r20)*(sj11)); | |
IkReal x513=((cj11)*(r21)); | |
IkReal x514=((r12)*(sj6)); | |
IkReal x515=((cj8)*(x507)); | |
IkReal x516=((r10)*(sj11)*(sj6)); | |
IkReal x517=((IkReal(1.00000000000000))*(x508)); | |
IkReal x518=((cj11)*(cj6)*(r01)); | |
IkReal x519=((sj8)*(x507)); | |
IkReal x520=((cj11)*(r11)*(sj6)); | |
IkReal x521=((cj6)*(r00)*(sj11)); | |
IkReal x522=((sj8)*(x517)); | |
evalcond[0]=((((cj7)*(x514)))+(((IkReal(-1.00000000000000))*(r22)*(x511)))+(((cj7)*(x510)))+(((IkReal(-1.00000000000000))*(x519)))+(((IkReal(-1.00000000000000))*(cj8)*(x517)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x511)*(x514)))+(x515)+(((IkReal(-1.00000000000000))*(x510)*(x511)))+(((IkReal(-1.00000000000000))*(r22)*(x509)))+(((IkReal(-1.00000000000000))*(x522)))); | |
evalcond[2]=((((cj7)*(x513)))+(x519)+(((sj7)*(x521)))+(((cj7)*(x512)))+(((sj7)*(x518)))+(((sj7)*(x516)))+(((cj8)*(x508)))+(((sj7)*(x520)))); | |
evalcond[3]=((x515)+(((IkReal(-1.00000000000000))*(x509)*(x520)))+(((IkReal(-1.00000000000000))*(x509)*(x518)))+(((IkReal(-1.00000000000000))*(x522)))+(((IkReal(-1.00000000000000))*(x509)*(x516)))+(((IkReal(-1.00000000000000))*(x509)*(x521)))+(((sj7)*(x513)))+(((sj7)*(x512)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x523=((IkReal(500.000000000000))*(sj9)); | |
IkReal x524=((cj11)*(cj7)); | |
IkReal x525=((r10)*(sj6)); | |
IkReal x526=((cj11)*(sj7)); | |
IkReal x527=((IkReal(31.0001000000000))*(sj9)); | |
IkReal x528=((cj6)*(r00)); | |
IkReal x529=((sj11)*(sj7)); | |
IkReal x530=((cj6)*(r01)); | |
IkReal x531=((cj7)*(sj6)); | |
IkReal x532=((cj7)*(sj11)); | |
IkReal x533=((r11)*(sj6)); | |
if( IKabs(((((IKabs(((((IkReal(30.8425000000000))*((sj9)*(sj9))))+(((IkReal(-35.0701500000000))*(sj9)))+(((IkReal(-0.757835000000000))*(cj9)*(sj9))))) != 0)?((IkReal)1/(((((IkReal(30.8425000000000))*((sj9)*(sj9))))+(((IkReal(-35.0701500000000))*(sj9)))+(((IkReal(-0.757835000000000))*(cj9)*(sj9)))))):(IkReal)1.0e30))*(((((x524)*(x527)*(x528)))+(((IkReal(-151.000000000000))*(x529)*(x530)))+(((IkReal(-1.00000000000000))*(x527)*(x530)*(x532)))+(((IkReal(-1.00000000000000))*(py)*(x523)*(x531)))+(((IkReal(-1.00000000000000))*(r20)*(x526)*(x527)))+(((x524)*(x525)*(x527)))+(((IkReal(-151.000000000000))*(r21)*(x532)))+(((IkReal(151.000000000000))*(x526)*(x528)))+(((IkReal(151.000000000000))*(x525)*(x526)))+(((IkReal(-151.000000000000))*(x529)*(x533)))+(((r21)*(x527)*(x529)))+(((IkReal(-1.00000000000000))*(cj6)*(cj7)*(px)*(x523)))+(((IkReal(-1.00000000000000))*(r11)*(sj11)*(x527)*(x531)))+(((pz)*(sj7)*(x523)))+(((IkReal(151.000000000000))*(r20)*(x524))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((r20)*(x524)))+(((IkReal(-1.00000000000000))*(x529)*(x530)))+(((x526)*(x528)))+(((x525)*(x526)))+(((IkReal(-1.00000000000000))*(x529)*(x533)))+(((IkReal(-1.00000000000000))*(r21)*(x532))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IKabs(((((IkReal(30.8425000000000))*((sj9)*(sj9))))+(((IkReal(-35.0701500000000))*(sj9)))+(((IkReal(-0.757835000000000))*(cj9)*(sj9))))) != 0)?((IkReal)1/(((((IkReal(30.8425000000000))*((sj9)*(sj9))))+(((IkReal(-35.0701500000000))*(sj9)))+(((IkReal(-0.757835000000000))*(cj9)*(sj9)))))):(IkReal)1.0e30))*(((((x524)*(x527)*(x528)))+(((IkReal(-151.000000000000))*(x529)*(x530)))+(((IkReal(-1.00000000000000))*(x527)*(x530)*(x532)))+(((IkReal(-1.00000000000000))*(py)*(x523)*(x531)))+(((IkReal(-1.00000000000000))*(r20)*(x526)*(x527)))+(((x524)*(x525)*(x527)))+(((IkReal(-151.000000000000))*(r21)*(x532)))+(((IkReal(151.000000000000))*(x526)*(x528)))+(((IkReal(151.000000000000))*(x525)*(x526)))+(((IkReal(-151.000000000000))*(x529)*(x533)))+(((r21)*(x527)*(x529)))+(((IkReal(-1.00000000000000))*(cj6)*(cj7)*(px)*(x523)))+(((IkReal(-1.00000000000000))*(r11)*(sj11)*(x527)*(x531)))+(((pz)*(sj7)*(x523)))+(((IkReal(151.000000000000))*(r20)*(x524)))))))+IKsqr(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((r20)*(x524)))+(((IkReal(-1.00000000000000))*(x529)*(x530)))+(((x526)*(x528)))+(((x525)*(x526)))+(((IkReal(-1.00000000000000))*(x529)*(x533)))+(((IkReal(-1.00000000000000))*(r21)*(x532)))))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((IKabs(((((IkReal(30.8425000000000))*((sj9)*(sj9))))+(((IkReal(-35.0701500000000))*(sj9)))+(((IkReal(-0.757835000000000))*(cj9)*(sj9))))) != 0)?((IkReal)1/(((((IkReal(30.8425000000000))*((sj9)*(sj9))))+(((IkReal(-35.0701500000000))*(sj9)))+(((IkReal(-0.757835000000000))*(cj9)*(sj9)))))):(IkReal)1.0e30))*(((((x524)*(x527)*(x528)))+(((IkReal(-151.000000000000))*(x529)*(x530)))+(((IkReal(-1.00000000000000))*(x527)*(x530)*(x532)))+(((IkReal(-1.00000000000000))*(py)*(x523)*(x531)))+(((IkReal(-1.00000000000000))*(r20)*(x526)*(x527)))+(((x524)*(x525)*(x527)))+(((IkReal(-151.000000000000))*(r21)*(x532)))+(((IkReal(151.000000000000))*(x526)*(x528)))+(((IkReal(151.000000000000))*(x525)*(x526)))+(((IkReal(-151.000000000000))*(x529)*(x533)))+(((r21)*(x527)*(x529)))+(((IkReal(-1.00000000000000))*(cj6)*(cj7)*(px)*(x523)))+(((IkReal(-1.00000000000000))*(r11)*(sj11)*(x527)*(x531)))+(((pz)*(sj7)*(x523)))+(((IkReal(151.000000000000))*(r20)*(x524)))))), ((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((r20)*(x524)))+(((IkReal(-1.00000000000000))*(x529)*(x530)))+(((x526)*(x528)))+(((x525)*(x526)))+(((IkReal(-1.00000000000000))*(x529)*(x533)))+(((IkReal(-1.00000000000000))*(r21)*(x532))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x534=IKsin(j8); | |
IkReal x535=IKcos(j8); | |
IkReal x536=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x537=((cj7)*(r21)); | |
IkReal x538=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x539=((cj7)*(r20)); | |
IkReal x540=((IkReal(0.00151567000000000))*(cj9)); | |
IkReal x541=((r21)*(sj7)); | |
IkReal x542=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x543=((cj7)*(sj6)); | |
IkReal x544=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x545=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x546=((cj6)*(px)); | |
IkReal x547=((cj6)*(r01)); | |
IkReal x548=((cj11)*(r20)*(sj7)); | |
IkReal x549=((sj7)*(x547)); | |
IkReal x550=((sj9)*(x535)); | |
IkReal x551=((cj6)*(r00)*(sj7)); | |
IkReal x552=((r11)*(sj6)*(sj7)); | |
IkReal x553=((sj9)*(x534)); | |
IkReal x554=((r10)*(sj6)*(sj7)); | |
IkReal x555=((cj6)*(cj7)*(r00)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(x538)*(x554)))+(((sj11)*(x549)))+(((IkReal(-1.00000000000000))*(x538)*(x551)))+(((IkReal(-1.00000000000000))*(x538)*(x539)))+(((sj11)*(x537)))+(((sj11)*(x552)))+(x550)); | |
evalcond[1]=((((cj11)*(x555)))+(((IkReal(-1.00000000000000))*(x553)))+(((cj11)*(r10)*(x543)))+(((sj11)*(x541)))+(((IkReal(-1.00000000000000))*(r20)*(sj7)*(x538)))+(((IkReal(-1.00000000000000))*(r11)*(sj11)*(sj6)*(x542)))+(((IkReal(-1.00000000000000))*(sj11)*(x542)*(x547)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x544)*(x555)))+(((py)*(x543)))+(((IkReal(-1.00000000000000))*(pz)*(x545)))+(((IkReal(-0.302000000000000))*(x535)))+(((IkReal(-1.00000000000000))*(r10)*(x543)*(x544)))+(((cj7)*(x536)*(x547)))+(((IkReal(-0.0701403000000000))*(x534)))+(((r11)*(x536)*(x543)))+(((cj7)*(x546)))+(((IkReal(0.0616850000000000))*(x553)))+(((IkReal(-1.00000000000000))*(x536)*(x541)))+(((IkReal(-1.00000000000000))*(x534)*(x540)))+(((r20)*(sj7)*(x544)))); | |
evalcond[3]=((IkReal(0.270000000000000))+(((IkReal(-1.00000000000000))*(pz)*(x542)))+(((x544)*(x551)))+(((IkReal(-0.302000000000000))*(x534)))+(((IkReal(-0.0616850000000000))*(x550)))+(((IkReal(-1.00000000000000))*(x545)*(x546)))+(((IkReal(0.0701403000000000))*(x535)))+(((IkReal(-1.00000000000000))*(x536)*(x537)))+(((x544)*(x554)))+(((x535)*(x540)))+(((IkReal(-1.00000000000000))*(x536)*(x549)))+(((x539)*(x544)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x545)))+(((IkReal(-1.00000000000000))*(x536)*(x552)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst2; | |
gconst2=IKsign(sj9); | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[2]; | |
dummyeval[0]=sj9; | |
dummyeval[1]=cj8; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 || IKabs(dummyeval[1]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[9]; | |
IkReal x556=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x557=((r21)*(sj11)); | |
IkReal x558=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x559=((r01)*(sj6)); | |
IkReal x560=((r20)*(sj7)); | |
IkReal x561=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x562=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x563=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x564=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x565=((cj6)*(r10)); | |
IkReal x566=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x567=((cj7)*(sj6)); | |
IkReal x568=((r00)*(sj6)); | |
IkReal x569=((r11)*(sj11)); | |
IkReal x570=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x571=((cj11)*(r10)); | |
IkReal x572=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x573=((cj6)*(r11)); | |
IkReal x574=((r01)*(sj11)); | |
IkReal x575=((cj11)*(cj6)*(r00)); | |
IkReal x576=((r11)*(sj6)*(sj7)); | |
IkReal x577=((r10)*(sj6)*(sj7)); | |
IkReal x578=((cj6)*(sj7)*(x574)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(3.14159265358979))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x561)))); | |
evalcond[2]=((IkReal(1.00000000000000))+(((cj6)*(x569)))+(((IkReal(-1.00000000000000))*(x559)*(x572)))+(((cj11)*(x568)))+(((IkReal(-1.00000000000000))*(x558)*(x565)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x558)*(x559)))+(((IkReal(-1.00000000000000))*(x568)*(x572)))+(((sj11)*(x565)))+(((cj11)*(x573)))); | |
evalcond[4]=((IkReal(-0.0717783000000000))+(((IkReal(-1.00000000000000))*(x562)*(x568)))+(((x559)*(x564)))+(((x562)*(x565)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(x564)*(x573)))+(((IkReal(-1.00000000000000))*(py)*(x561)))); | |
evalcond[5]=((x578)+(((cj7)*(x557)))+(((sj6)*(sj7)*(x569)))+(((IkReal(-1.00000000000000))*(x558)*(x577)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x558)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x558)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(cj7)*(x561)*(x574)))+(((cj7)*(x575)))+(((IkReal(-1.00000000000000))*(sj6)*(x566)*(x569)))+(((x567)*(x571)))+(((IkReal(-1.00000000000000))*(x558)*(x560)))+(((sj7)*(x557)))); | |
evalcond[7]=((((IkReal(-0.302000000000000))*(cj8)))+(((IkReal(-1.00000000000000))*(pz)*(x563)))+(((IkReal(-0.0716559700000000))*(sj8)))+(((IkReal(-1.00000000000000))*(x556)*(x575)))+(((cj6)*(x556)*(x574)))+(((cj6)*(cj7)*(px)))+(((IkReal(-1.00000000000000))*(x557)*(x570)))+(((py)*(x567)))+(((x560)*(x562)))+(((IkReal(-1.00000000000000))*(sj6)*(x556)*(x571)))+(((sj6)*(x556)*(x569)))); | |
evalcond[8]=((IkReal(0.270000000000000))+(((IkReal(-1.00000000000000))*(x556)*(x557)))+(((IkReal(0.0716559700000000))*(cj8)))+(((IkReal(-1.00000000000000))*(x564)*(x576)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x563)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x564)))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x561)))+(((x562)*(x577)))+(((cj11)*(r20)*(x556)))+(((cj6)*(r00)*(sj7)*(x562)))+(((IkReal(-0.302000000000000))*(sj8)))+(((IkReal(-1.00000000000000))*(pz)*(x566)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst3; | |
gconst3=IKsign((((cj8)*(cj8))+((sj8)*(sj8)))); | |
dummyeval[0]=(((cj8)*(cj8))+((sj8)*(sj8))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst4; | |
gconst4=IKsign(((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8)))))); | |
dummyeval[0]=((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8))))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
continue; | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x579=((sj7)*(sj8)); | |
IkReal x580=((cj11)*(r21)); | |
IkReal x581=((r20)*(sj11)); | |
IkReal x582=((cj8)*(sj7)); | |
IkReal x583=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x584=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x585=((cj7)*(sj6)*(sj8)); | |
IkReal x586=((cj6)*(cj7)*(sj8)); | |
IkReal x587=((cj7)*(cj8)*(sj6)); | |
IkReal x588=((cj6)*(cj7)*(cj8)); | |
if( IKabs(((gconst4)*(((((r02)*(x586)))+(((r12)*(x585)))+(((IkReal(-1.00000000000000))*(r22)*(x579)))+(((IkReal(-1.00000000000000))*(r10)*(x583)*(x587)))+(((x581)*(x582)))+(((IkReal(-1.00000000000000))*(r11)*(x584)*(x587)))+(((IkReal(-1.00000000000000))*(r01)*(x584)*(x588)))+(((IkReal(-1.00000000000000))*(r00)*(x583)*(x588)))+(((x580)*(x582))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst4)*(((((IkReal(-1.00000000000000))*(r10)*(x583)*(x585)))+(((x579)*(x580)))+(((x579)*(x581)))+(((IkReal(-1.00000000000000))*(r01)*(x584)*(x586)))+(((IkReal(-1.00000000000000))*(r11)*(x584)*(x585)))+(((IkReal(-1.00000000000000))*(r00)*(x583)*(x586)))+(((r22)*(x582)))+(((IkReal(-1.00000000000000))*(r02)*(x588)))+(((IkReal(-1.00000000000000))*(r12)*(x587))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst4)*(((((r02)*(x586)))+(((r12)*(x585)))+(((IkReal(-1.00000000000000))*(r22)*(x579)))+(((IkReal(-1.00000000000000))*(r10)*(x583)*(x587)))+(((x581)*(x582)))+(((IkReal(-1.00000000000000))*(r11)*(x584)*(x587)))+(((IkReal(-1.00000000000000))*(r01)*(x584)*(x588)))+(((IkReal(-1.00000000000000))*(r00)*(x583)*(x588)))+(((x580)*(x582)))))), ((gconst4)*(((((IkReal(-1.00000000000000))*(r10)*(x583)*(x585)))+(((x579)*(x580)))+(((x579)*(x581)))+(((IkReal(-1.00000000000000))*(r01)*(x584)*(x586)))+(((IkReal(-1.00000000000000))*(r11)*(x584)*(x585)))+(((IkReal(-1.00000000000000))*(r00)*(x583)*(x586)))+(((r22)*(x582)))+(((IkReal(-1.00000000000000))*(r02)*(x588)))+(((IkReal(-1.00000000000000))*(r12)*(x587))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x589=IKcos(j10); | |
IkReal x590=IKsin(j10); | |
IkReal x591=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x592=((cj6)*(r02)); | |
IkReal x593=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x594=((r20)*(sj11)); | |
IkReal x595=((cj11)*(r21)); | |
IkReal x596=((r12)*(sj6)); | |
IkReal x597=((sj8)*(x590)); | |
IkReal x598=((cj8)*(x590)); | |
IkReal x599=((r10)*(sj11)*(sj6)); | |
IkReal x600=((IkReal(1.00000000000000))*(x589)); | |
IkReal x601=((cj11)*(cj6)*(r01)); | |
IkReal x602=((cj11)*(r11)*(sj6)); | |
IkReal x603=((cj6)*(r00)*(sj11)); | |
IkReal x604=((cj8)*(x600)); | |
evalcond[0]=((((cj7)*(x592)))+(((IkReal(-1.00000000000000))*(r22)*(x593)))+(((cj7)*(x596)))+(((IkReal(-1.00000000000000))*(x604)))+(x597)); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r22)*(x591)))+(((IkReal(-1.00000000000000))*(x592)*(x593)))+(((IkReal(-1.00000000000000))*(x593)*(x596)))+(((IkReal(-1.00000000000000))*(sj8)*(x600)))+(((IkReal(-1.00000000000000))*(x598)))); | |
evalcond[2]=((((cj7)*(x594)))+(((sj7)*(x603)))+(((IkReal(-1.00000000000000))*(x604)))+(((sj7)*(x599)))+(((cj7)*(x595)))+(((sj7)*(x602)))+(x597)+(((sj7)*(x601)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x591)*(x599)))+(((sj7)*(x594)))+(((sj7)*(x595)))+(((IkReal(-1.00000000000000))*(x591)*(x602)))+(((IkReal(-1.00000000000000))*(x591)*(x603)))+(((IkReal(-1.00000000000000))*(x591)*(x601)))+(x598)+(((sj8)*(x589)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x605=((cj7)*(cj8)); | |
IkReal x606=((r12)*(sj6)); | |
IkReal x607=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x608=((cj6)*(r02)); | |
IkReal x609=((IkReal(1.00000000000000))*(r22)); | |
IkReal x610=((cj7)*(sj8)); | |
if( IKabs(((gconst3)*(((((IkReal(-1.00000000000000))*(x606)*(x610)))+(((IkReal(-1.00000000000000))*(cj8)*(x607)*(x608)))+(((IkReal(-1.00000000000000))*(x605)*(x609)))+(((r22)*(sj7)*(sj8)))+(((IkReal(-1.00000000000000))*(x608)*(x610)))+(((IkReal(-1.00000000000000))*(cj8)*(x606)*(x607))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst3)*(((((x605)*(x608)))+(((IkReal(-1.00000000000000))*(sj8)*(x606)*(x607)))+(((IkReal(-1.00000000000000))*(x609)*(x610)))+(((IkReal(-1.00000000000000))*(sj8)*(x607)*(x608)))+(((IkReal(-1.00000000000000))*(cj8)*(r22)*(x607)))+(((x605)*(x606))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst3)*(((((IkReal(-1.00000000000000))*(x606)*(x610)))+(((IkReal(-1.00000000000000))*(cj8)*(x607)*(x608)))+(((IkReal(-1.00000000000000))*(x605)*(x609)))+(((r22)*(sj7)*(sj8)))+(((IkReal(-1.00000000000000))*(x608)*(x610)))+(((IkReal(-1.00000000000000))*(cj8)*(x606)*(x607)))))), ((gconst3)*(((((x605)*(x608)))+(((IkReal(-1.00000000000000))*(sj8)*(x606)*(x607)))+(((IkReal(-1.00000000000000))*(x609)*(x610)))+(((IkReal(-1.00000000000000))*(sj8)*(x607)*(x608)))+(((IkReal(-1.00000000000000))*(cj8)*(r22)*(x607)))+(((x605)*(x606))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x611=IKcos(j10); | |
IkReal x612=IKsin(j10); | |
IkReal x613=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x614=((cj6)*(r02)); | |
IkReal x615=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x616=((r20)*(sj11)); | |
IkReal x617=((cj11)*(r21)); | |
IkReal x618=((r12)*(sj6)); | |
IkReal x619=((sj8)*(x612)); | |
IkReal x620=((cj8)*(x612)); | |
IkReal x621=((r10)*(sj11)*(sj6)); | |
IkReal x622=((IkReal(1.00000000000000))*(x611)); | |
IkReal x623=((cj11)*(cj6)*(r01)); | |
IkReal x624=((cj11)*(r11)*(sj6)); | |
IkReal x625=((cj6)*(r00)*(sj11)); | |
IkReal x626=((cj8)*(x622)); | |
evalcond[0]=((((cj7)*(x614)))+(((IkReal(-1.00000000000000))*(x626)))+(((cj7)*(x618)))+(((IkReal(-1.00000000000000))*(r22)*(x615)))+(x619)); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(sj8)*(x622)))+(((IkReal(-1.00000000000000))*(r22)*(x613)))+(((IkReal(-1.00000000000000))*(x614)*(x615)))+(((IkReal(-1.00000000000000))*(x615)*(x618)))+(((IkReal(-1.00000000000000))*(x620)))); | |
evalcond[2]=((((sj7)*(x621)))+(((sj7)*(x625)))+(((cj7)*(x616)))+(((IkReal(-1.00000000000000))*(x626)))+(((cj7)*(x617)))+(((sj7)*(x624)))+(((sj7)*(x623)))+(x619)); | |
evalcond[3]=((((sj7)*(x617)))+(((IkReal(-1.00000000000000))*(x613)*(x621)))+(((IkReal(-1.00000000000000))*(x613)*(x624)))+(((IkReal(-1.00000000000000))*(x613)*(x623)))+(((IkReal(-1.00000000000000))*(x613)*(x625)))+(((sj8)*(x611)))+(x620)+(((sj7)*(x616)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x627=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x628=((r21)*(sj11)); | |
IkReal x629=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x630=((r01)*(sj6)); | |
IkReal x631=((r20)*(sj7)); | |
IkReal x632=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x633=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x634=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x635=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x636=((cj6)*(r10)); | |
IkReal x637=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x638=((cj7)*(sj6)); | |
IkReal x639=((r00)*(sj6)); | |
IkReal x640=((r11)*(sj11)); | |
IkReal x641=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x642=((cj11)*(r10)); | |
IkReal x643=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x644=((cj6)*(r11)); | |
IkReal x645=((r01)*(sj11)); | |
IkReal x646=((cj11)*(cj6)*(r00)); | |
IkReal x647=((r11)*(sj6)*(sj7)); | |
IkReal x648=((r10)*(sj6)*(sj7)); | |
IkReal x649=((cj6)*(sj7)*(x645)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(j9, IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x632)))); | |
evalcond[2]=((IkReal(-1.00000000000000))+(((cj6)*(x640)))+(((IkReal(-1.00000000000000))*(x630)*(x643)))+(((cj11)*(x639)))+(((IkReal(-1.00000000000000))*(x629)*(x636)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x629)*(x630)))+(((sj11)*(x636)))+(((cj11)*(x644)))+(((IkReal(-1.00000000000000))*(x639)*(x643)))); | |
evalcond[4]=((IkReal(0.0515917000000000))+(((IkReal(-1.00000000000000))*(x635)*(x644)))+(((x633)*(x636)))+(((px)*(sj6)))+(((x630)*(x635)))+(((IkReal(-1.00000000000000))*(x633)*(x639)))+(((IkReal(-1.00000000000000))*(py)*(x632)))); | |
evalcond[5]=((x649)+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x629)))+(((cj7)*(x628)))+(((IkReal(-1.00000000000000))*(x629)*(x648)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x629)))+(((sj6)*(sj7)*(x640)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(cj7)*(x632)*(x645)))+(((x638)*(x642)))+(((cj7)*(x646)))+(((sj7)*(x628)))+(((IkReal(-1.00000000000000))*(x629)*(x631)))+(((IkReal(-1.00000000000000))*(sj6)*(x637)*(x640)))); | |
evalcond[7]=((((IkReal(-0.302000000000000))*(cj8)))+(((IkReal(-1.00000000000000))*(sj6)*(x627)*(x642)))+(((IkReal(-0.0686246300000000))*(sj8)))+(((py)*(x638)))+(((IkReal(-1.00000000000000))*(x628)*(x641)))+(((cj6)*(cj7)*(px)))+(((IkReal(-1.00000000000000))*(x627)*(x646)))+(((IkReal(-1.00000000000000))*(pz)*(x634)))+(((sj6)*(x627)*(x640)))+(((x631)*(x633)))+(((cj6)*(x627)*(x645)))); | |
evalcond[8]=((IkReal(0.270000000000000))+(((IkReal(-1.00000000000000))*(x627)*(x628)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x634)))+(((cj6)*(r00)*(sj7)*(x633)))+(((IkReal(-1.00000000000000))*(x635)*(x647)))+(((IkReal(0.0686246300000000))*(cj8)))+(((cj11)*(r20)*(x627)))+(((IkReal(-0.302000000000000))*(sj8)))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x632)))+(((x633)*(x648)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x635)))+(((IkReal(-1.00000000000000))*(pz)*(x637)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst5; | |
gconst5=IKsign((((cj8)*(cj8))+((sj8)*(sj8)))); | |
dummyeval[0]=(((cj8)*(cj8))+((sj8)*(sj8))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst6; | |
gconst6=IKsign(((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8)))))); | |
dummyeval[0]=((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8))))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
continue; | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x650=((IkReal(1.00000000000000))*(cj8)); | |
IkReal x651=((cj6)*(sj7)); | |
IkReal x652=((cj8)*(sj11)); | |
IkReal x653=((cj7)*(r20)); | |
IkReal x654=((sj6)*(sj7)); | |
IkReal x655=((sj11)*(sj8)); | |
IkReal x656=((cj7)*(r22)); | |
IkReal x657=((cj11)*(sj8)); | |
IkReal x658=((cj11)*(cj8)); | |
IkReal x659=((cj11)*(cj7)*(r21)); | |
if( IKabs(((gconst6)*(((((cj7)*(r21)*(x657)))+(((r11)*(x654)*(x657)))+(((r10)*(x654)*(x655)))+(((IkReal(-1.00000000000000))*(r12)*(x650)*(x654)))+(((r01)*(x651)*(x657)))+(((IkReal(-1.00000000000000))*(x650)*(x656)))+(((x653)*(x655)))+(((IkReal(-1.00000000000000))*(r02)*(x650)*(x651)))+(((r00)*(x651)*(x655))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst6)*(((((sj8)*(x656)))+(((r01)*(x651)*(x658)))+(((r02)*(sj8)*(x651)))+(((r10)*(x652)*(x654)))+(((x652)*(x653)))+(((r12)*(sj8)*(x654)))+(((r00)*(x651)*(x652)))+(((cj7)*(r21)*(x658)))+(((r11)*(x654)*(x658))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst6)*(((((cj7)*(r21)*(x657)))+(((r11)*(x654)*(x657)))+(((r10)*(x654)*(x655)))+(((IkReal(-1.00000000000000))*(r12)*(x650)*(x654)))+(((r01)*(x651)*(x657)))+(((IkReal(-1.00000000000000))*(x650)*(x656)))+(((x653)*(x655)))+(((IkReal(-1.00000000000000))*(r02)*(x650)*(x651)))+(((r00)*(x651)*(x655)))))), ((gconst6)*(((((sj8)*(x656)))+(((r01)*(x651)*(x658)))+(((r02)*(sj8)*(x651)))+(((r10)*(x652)*(x654)))+(((x652)*(x653)))+(((r12)*(sj8)*(x654)))+(((r00)*(x651)*(x652)))+(((cj7)*(r21)*(x658)))+(((r11)*(x654)*(x658))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x660=IKsin(j10); | |
IkReal x661=IKcos(j10); | |
IkReal x662=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x663=((cj6)*(r02)); | |
IkReal x664=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x665=((r20)*(sj11)); | |
IkReal x666=((cj11)*(r21)); | |
IkReal x667=((r12)*(sj6)); | |
IkReal x668=((cj8)*(x660)); | |
IkReal x669=((r10)*(sj11)*(sj6)); | |
IkReal x670=((IkReal(1.00000000000000))*(x661)); | |
IkReal x671=((cj11)*(cj6)*(r01)); | |
IkReal x672=((sj8)*(x660)); | |
IkReal x673=((cj11)*(r11)*(sj6)); | |
IkReal x674=((cj6)*(r00)*(sj11)); | |
IkReal x675=((sj8)*(x670)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(cj8)*(x670)))+(((cj7)*(x667)))+(((IkReal(-1.00000000000000))*(r22)*(x664)))+(((IkReal(-1.00000000000000))*(x672)))+(((cj7)*(x663)))); | |
evalcond[1]=((x668)+(((IkReal(-1.00000000000000))*(x663)*(x664)))+(((IkReal(-1.00000000000000))*(x675)))+(((IkReal(-1.00000000000000))*(r22)*(x662)))+(((IkReal(-1.00000000000000))*(x664)*(x667)))); | |
evalcond[2]=((((sj7)*(x671)))+(((sj7)*(x674)))+(((cj8)*(x661)))+(((sj7)*(x669)))+(((cj7)*(x665)))+(((cj7)*(x666)))+(((sj7)*(x673)))+(x672)); | |
evalcond[3]=((x668)+(((sj7)*(x665)))+(((IkReal(-1.00000000000000))*(x662)*(x671)))+(((sj7)*(x666)))+(((IkReal(-1.00000000000000))*(x662)*(x673)))+(((IkReal(-1.00000000000000))*(x662)*(x674)))+(((IkReal(-1.00000000000000))*(x675)))+(((IkReal(-1.00000000000000))*(x662)*(x669)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x676=((cj6)*(r02)); | |
IkReal x677=((cj7)*(cj8)); | |
IkReal x678=((r12)*(sj6)); | |
IkReal x679=((cj8)*(sj7)); | |
IkReal x680=((cj7)*(sj8)); | |
IkReal x681=((cj7)*(x678)); | |
IkReal x682=((IkReal(1.00000000000000))*(r22)*(sj7)); | |
IkReal x683=((IkReal(1.00000000000000))*(sj7)*(sj8)); | |
if( IKabs(((gconst5)*(((((x678)*(x680)))+(((x676)*(x680)))+(((IkReal(-1.00000000000000))*(sj8)*(x682)))+(((x676)*(x679)))+(((x678)*(x679)))+(((r22)*(x677))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst5)*(((((x676)*(x677)))+(((IkReal(-1.00000000000000))*(x676)*(x683)))+(((IkReal(-1.00000000000000))*(r22)*(x680)))+(((x677)*(x678)))+(((IkReal(-1.00000000000000))*(r22)*(x679)))+(((IkReal(-1.00000000000000))*(x678)*(x683))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst5)*(((((x678)*(x680)))+(((x676)*(x680)))+(((IkReal(-1.00000000000000))*(sj8)*(x682)))+(((x676)*(x679)))+(((x678)*(x679)))+(((r22)*(x677)))))), ((gconst5)*(((((x676)*(x677)))+(((IkReal(-1.00000000000000))*(x676)*(x683)))+(((IkReal(-1.00000000000000))*(r22)*(x680)))+(((x677)*(x678)))+(((IkReal(-1.00000000000000))*(r22)*(x679)))+(((IkReal(-1.00000000000000))*(x678)*(x683))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x684=IKsin(j10); | |
IkReal x685=IKcos(j10); | |
IkReal x686=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x687=((cj6)*(r02)); | |
IkReal x688=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x689=((r20)*(sj11)); | |
IkReal x690=((cj11)*(r21)); | |
IkReal x691=((r12)*(sj6)); | |
IkReal x692=((cj8)*(x684)); | |
IkReal x693=((r10)*(sj11)*(sj6)); | |
IkReal x694=((IkReal(1.00000000000000))*(x685)); | |
IkReal x695=((cj11)*(cj6)*(r01)); | |
IkReal x696=((sj8)*(x684)); | |
IkReal x697=((cj11)*(r11)*(sj6)); | |
IkReal x698=((cj6)*(r00)*(sj11)); | |
IkReal x699=((sj8)*(x694)); | |
evalcond[0]=((((cj7)*(x691)))+(((IkReal(-1.00000000000000))*(r22)*(x688)))+(((cj7)*(x687)))+(((IkReal(-1.00000000000000))*(cj8)*(x694)))+(((IkReal(-1.00000000000000))*(x696)))); | |
evalcond[1]=((x692)+(((IkReal(-1.00000000000000))*(x688)*(x691)))+(((IkReal(-1.00000000000000))*(r22)*(x686)))+(((IkReal(-1.00000000000000))*(x687)*(x688)))+(((IkReal(-1.00000000000000))*(x699)))); | |
evalcond[2]=((x696)+(((sj7)*(x695)))+(((sj7)*(x693)))+(((cj7)*(x690)))+(((sj7)*(x698)))+(((cj8)*(x685)))+(((cj7)*(x689)))+(((sj7)*(x697)))); | |
evalcond[3]=((((sj7)*(x689)))+(x692)+(((sj7)*(x690)))+(((IkReal(-1.00000000000000))*(x686)*(x698)))+(((IkReal(-1.00000000000000))*(x686)*(x693)))+(((IkReal(-1.00000000000000))*(x686)*(x697)))+(((IkReal(-1.00000000000000))*(x686)*(x695)))+(((IkReal(-1.00000000000000))*(x699)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x700=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x701=((cj7)*(r21)); | |
IkReal x702=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x703=((cj7)*(r20)); | |
IkReal x704=((cj6)*(sj7)); | |
IkReal x705=((r01)*(sj6)); | |
IkReal x706=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x707=((cj6)*(r10)); | |
IkReal x708=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x709=((cj7)*(sj6)); | |
IkReal x710=((r00)*(sj6)); | |
IkReal x711=((r11)*(sj11)); | |
IkReal x712=((IkReal(1.00000000000000))*(py)); | |
IkReal x713=((sj6)*(sj7)); | |
IkReal x714=((r21)*(sj7)); | |
IkReal x715=((cj6)*(cj7)); | |
IkReal x716=((r01)*(x704)); | |
IkReal x717=((cj11)*(r20)*(sj7)); | |
IkReal x718=((r11)*(x713)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.57079632679490))+(j8)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(sj11)*(x705)))+(((IkReal(-1.00000000000000))*(x702)*(x707)))+(cj9)+(((cj11)*(x710)))+(((cj6)*(x711)))); | |
evalcond[2]=((IkReal(-0.0100933000000000))+(((IkReal(-1.00000000000000))*(x706)*(x710)))+(((IkReal(-0.00151567000000000))*(sj9)))+(((IkReal(-0.0616850000000000))*(cj9)))+(((IkReal(-1.00000000000000))*(cj6)*(x712)))+(((x700)*(x705)))+(((px)*(sj6)))+(((x706)*(x707)))+(((IkReal(-1.00000000000000))*(cj6)*(r11)*(x700)))); | |
evalcond[3]=((((sj11)*(x716)))+(((IkReal(-1.00000000000000))*(x702)*(x703)))+(((x711)*(x713)))+(((IkReal(-1.00000000000000))*(r10)*(x702)*(x713)))+(((sj11)*(x701)))+(((IkReal(-1.00000000000000))*(r00)*(x702)*(x704)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(r20)*(sj7)*(x702)))+(((cj11)*(r00)*(x715)))+(((IkReal(-1.00000000000000))*(sj6)*(x708)*(x711)))+(((IkReal(-1.00000000000000))*(sj9)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj11)*(x708)))+(((sj11)*(x714)))+(((cj11)*(r10)*(x709)))); | |
evalcond[5]=((IkReal(-0.0701403000000000))+(((IkReal(-1.00000000000000))*(r00)*(x706)*(x715)))+(((IkReal(-1.00000000000000))*(pz)*(sj7)))+(((py)*(x709)))+(((IkReal(0.0616850000000000))*(sj9)))+(((IkReal(-1.00000000000000))*(r10)*(x706)*(x709)))+(((r20)*(sj7)*(x706)))+(((IkReal(-1.00000000000000))*(x700)*(x714)))+(((r11)*(x700)*(x709)))+(((px)*(x715)))+(((IkReal(-0.00151567000000000))*(cj9)))+(((r01)*(x700)*(x715)))); | |
evalcond[6]=((IkReal(-0.0320000000000000))+(((IkReal(-1.00000000000000))*(px)*(x704)))+(((IkReal(-1.00000000000000))*(x700)*(x701)))+(((x703)*(x706)))+(((IkReal(-1.00000000000000))*(x700)*(x718)))+(((r10)*(x706)*(x713)))+(((IkReal(-1.00000000000000))*(x712)*(x713)))+(((IkReal(-1.00000000000000))*(pz)*(x708)))+(((r00)*(x704)*(x706)))+(((IkReal(-1.00000000000000))*(x700)*(x716)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst7; | |
gconst7=IKsign(sj9); | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[9]; | |
IkReal x719=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x720=((r21)*(sj11)); | |
IkReal x721=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x722=((r01)*(sj6)); | |
IkReal x723=((r20)*(sj7)); | |
IkReal x724=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x725=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x726=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x727=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x728=((cj6)*(r10)); | |
IkReal x729=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x730=((cj7)*(sj6)); | |
IkReal x731=((r00)*(sj6)); | |
IkReal x732=((r11)*(sj11)); | |
IkReal x733=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x734=((cj11)*(r10)); | |
IkReal x735=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x736=((cj6)*(r11)); | |
IkReal x737=((r01)*(sj11)); | |
IkReal x738=((cj11)*(cj6)*(r00)); | |
IkReal x739=((r11)*(sj6)*(sj7)); | |
IkReal x740=((r10)*(sj6)*(sj7)); | |
IkReal x741=((cj6)*(sj7)*(x737)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(3.14159265358979))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x724)))); | |
evalcond[2]=((IkReal(1.00000000000000))+(((cj6)*(x732)))+(((IkReal(-1.00000000000000))*(x721)*(x728)))+(((cj11)*(x731)))+(((IkReal(-1.00000000000000))*(x722)*(x735)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x731)*(x735)))+(((cj11)*(x736)))+(((IkReal(-1.00000000000000))*(x721)*(x722)))+(((sj11)*(x728)))); | |
evalcond[4]=((IkReal(-0.0717783000000000))+(((IkReal(-1.00000000000000))*(py)*(x724)))+(((x722)*(x727)))+(((px)*(sj6)))+(((x725)*(x728)))+(((IkReal(-1.00000000000000))*(x725)*(x731)))+(((IkReal(-1.00000000000000))*(x727)*(x736)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x721)))+(((IkReal(-1.00000000000000))*(x721)*(x740)))+(((sj6)*(sj7)*(x732)))+(((cj7)*(x720)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x721)))+(x741)); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(cj7)*(x724)*(x737)))+(((IkReal(-1.00000000000000))*(sj6)*(x729)*(x732)))+(((cj7)*(x738)))+(((x730)*(x734)))+(((IkReal(-1.00000000000000))*(x721)*(x723)))+(((sj7)*(x720)))); | |
evalcond[7]=((IkReal(-0.0716559700000000))+(((sj6)*(x719)*(x732)))+(((IkReal(-1.00000000000000))*(sj6)*(x719)*(x734)))+(((cj6)*(cj7)*(px)))+(((cj6)*(x719)*(x737)))+(((IkReal(-1.00000000000000))*(x720)*(x733)))+(((py)*(x730)))+(((IkReal(-1.00000000000000))*(x719)*(x738)))+(((x723)*(x725)))+(((IkReal(-1.00000000000000))*(pz)*(x726)))); | |
evalcond[8]=((IkReal(-0.0320000000000000))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x724)))+(((IkReal(-1.00000000000000))*(x727)*(x739)))+(((cj6)*(r00)*(sj7)*(x725)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x727)))+(((IkReal(-1.00000000000000))*(pz)*(x729)))+(((x725)*(x740)))+(((cj11)*(r20)*(x719)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x726)))+(((IkReal(-1.00000000000000))*(x719)*(x720)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x742=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x743=((cj6)*(r02)); | |
IkReal x744=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x745=((r12)*(sj6)); | |
if( IKabs(((((IkReal(-1.00000000000000))*(x743)*(x744)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x744)*(x745))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(x742)*(x745)))+(((IkReal(-1.00000000000000))*(x742)*(x743)))+(((IkReal(-1.00000000000000))*(r22)*(x744))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IkReal(-1.00000000000000))*(x743)*(x744)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x744)*(x745)))))+IKsqr(((((IkReal(-1.00000000000000))*(x742)*(x745)))+(((IkReal(-1.00000000000000))*(x742)*(x743)))+(((IkReal(-1.00000000000000))*(r22)*(x744)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((IkReal(-1.00000000000000))*(x743)*(x744)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x744)*(x745)))), ((((IkReal(-1.00000000000000))*(x742)*(x745)))+(((IkReal(-1.00000000000000))*(x742)*(x743)))+(((IkReal(-1.00000000000000))*(r22)*(x744))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x746=IKsin(j10); | |
IkReal x747=IKcos(j10); | |
IkReal x748=((IkReal(1.00000000000000))*(r22)); | |
IkReal x749=((cj7)*(sj11)); | |
IkReal x750=((r10)*(sj6)); | |
IkReal x751=((cj11)*(r21)); | |
IkReal x752=((sj11)*(sj7)); | |
IkReal x753=((cj6)*(r01)); | |
IkReal x754=((r11)*(sj6)); | |
IkReal x755=((cj6)*(r02)); | |
IkReal x756=((r12)*(sj6)); | |
IkReal x757=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x758=((cj11)*(sj7)); | |
IkReal x759=((cj6)*(r00)); | |
IkReal x760=((IkReal(1.00000000000000))*(cj11)*(cj7)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(sj7)*(x748)))+(((cj7)*(x756)))+(x746)+(((cj7)*(x755)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x747)))+(((IkReal(-1.00000000000000))*(x755)*(x757)))+(((IkReal(-1.00000000000000))*(cj7)*(x748)))+(((IkReal(-1.00000000000000))*(x756)*(x757)))); | |
evalcond[2]=((((x754)*(x758)))+(x746)+(((x750)*(x752)))+(((x752)*(x759)))+(((x753)*(x758)))+(((r20)*(x749)))+(((cj7)*(x751)))); | |
evalcond[3]=((((r20)*(x752)))+(x747)+(((IkReal(-1.00000000000000))*(x754)*(x760)))+(((sj7)*(x751)))+(((IkReal(-1.00000000000000))*(x749)*(x750)))+(((IkReal(-1.00000000000000))*(x753)*(x760)))+(((IkReal(-1.00000000000000))*(x749)*(x759)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x761=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x762=((r21)*(sj11)); | |
IkReal x763=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x764=((r01)*(sj6)); | |
IkReal x765=((r20)*(sj7)); | |
IkReal x766=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x767=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x768=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x769=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x770=((cj6)*(r10)); | |
IkReal x771=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x772=((cj7)*(sj6)); | |
IkReal x773=((r00)*(sj6)); | |
IkReal x774=((r11)*(sj11)); | |
IkReal x775=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x776=((cj11)*(r10)); | |
IkReal x777=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x778=((cj6)*(r11)); | |
IkReal x779=((r01)*(sj11)); | |
IkReal x780=((cj11)*(cj6)*(r00)); | |
IkReal x781=((r11)*(sj6)*(sj7)); | |
IkReal x782=((r10)*(sj6)*(sj7)); | |
IkReal x783=((cj6)*(sj7)*(x779)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(j9, IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x766)))); | |
evalcond[2]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(x764)*(x777)))+(((IkReal(-1.00000000000000))*(x763)*(x770)))+(((cj11)*(x773)))+(((cj6)*(x774)))); | |
evalcond[3]=((((sj11)*(x770)))+(((IkReal(-1.00000000000000))*(x773)*(x777)))+(((IkReal(-1.00000000000000))*(x763)*(x764)))+(((cj11)*(x778)))); | |
evalcond[4]=((IkReal(0.0515917000000000))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(py)*(x766)))+(((x767)*(x770)))+(((IkReal(-1.00000000000000))*(x769)*(x778)))+(((x764)*(x769)))+(((IkReal(-1.00000000000000))*(x767)*(x773)))); | |
evalcond[5]=((((cj7)*(x762)))+(x783)+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x763)))+(((IkReal(-1.00000000000000))*(x763)*(x782)))+(((sj6)*(sj7)*(x774)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x763)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(x763)*(x765)))+(((IkReal(-1.00000000000000))*(cj7)*(x766)*(x779)))+(((x772)*(x776)))+(((sj7)*(x762)))+(((cj7)*(x780)))+(((IkReal(-1.00000000000000))*(sj6)*(x771)*(x774)))); | |
evalcond[7]=((IkReal(-0.0686246300000000))+(((IkReal(-1.00000000000000))*(x761)*(x780)))+(((IkReal(-1.00000000000000))*(pz)*(x768)))+(((IkReal(-1.00000000000000))*(sj6)*(x761)*(x776)))+(((sj6)*(x761)*(x774)))+(((IkReal(-1.00000000000000))*(x762)*(x775)))+(((cj6)*(cj7)*(px)))+(((py)*(x772)))+(((cj6)*(x761)*(x779)))+(((x765)*(x767)))); | |
evalcond[8]=((IkReal(-0.0320000000000000))+(((x767)*(x782)))+(((cj6)*(r00)*(sj7)*(x767)))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x766)))+(((cj11)*(r20)*(x761)))+(((IkReal(-1.00000000000000))*(pz)*(x771)))+(((IkReal(-1.00000000000000))*(x761)*(x762)))+(((IkReal(-1.00000000000000))*(x769)*(x781)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x769)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x768)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x784=((IkReal(1.00000000000000))*(r22)); | |
IkReal x785=((cj6)*(r02)); | |
IkReal x786=((r12)*(sj6)); | |
IkReal x787=((IkReal(1.00000000000000))*(sj7)); | |
if( IKabs(((((cj7)*(x785)))+(((cj7)*(x786)))+(((IkReal(-1.00000000000000))*(sj7)*(x784))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(cj7)*(x784)))+(((IkReal(-1.00000000000000))*(x786)*(x787)))+(((IkReal(-1.00000000000000))*(x785)*(x787))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((cj7)*(x785)))+(((cj7)*(x786)))+(((IkReal(-1.00000000000000))*(sj7)*(x784)))))+IKsqr(((((IkReal(-1.00000000000000))*(cj7)*(x784)))+(((IkReal(-1.00000000000000))*(x786)*(x787)))+(((IkReal(-1.00000000000000))*(x785)*(x787)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((cj7)*(x785)))+(((cj7)*(x786)))+(((IkReal(-1.00000000000000))*(sj7)*(x784)))), ((((IkReal(-1.00000000000000))*(cj7)*(x784)))+(((IkReal(-1.00000000000000))*(x786)*(x787)))+(((IkReal(-1.00000000000000))*(x785)*(x787))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x788=IKsin(j10); | |
IkReal x789=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x790=((cj7)*(sj11)); | |
IkReal x791=((r10)*(sj6)); | |
IkReal x792=((cj11)*(r21)); | |
IkReal x793=((sj11)*(sj7)); | |
IkReal x794=((cj11)*(cj7)); | |
IkReal x795=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x796=((r11)*(sj6)); | |
IkReal x797=((r12)*(sj6)); | |
IkReal x798=((cj11)*(sj7)); | |
IkReal x799=((IkReal(1.00000000000000))*(IKcos(j10))); | |
evalcond[0]=((((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(x788)))+(((cj7)*(x797)))+(((IkReal(-1.00000000000000))*(r22)*(x795)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x799)))+(((IkReal(-1.00000000000000))*(x795)*(x797)))+(((IkReal(-1.00000000000000))*(cj7)*(r22)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x789)))); | |
evalcond[2]=((((x796)*(x798)))+(x788)+(((cj6)*(r00)*(x793)))+(((cj6)*(r01)*(x798)))+(((x791)*(x793)))+(((cj7)*(x792)))+(((r20)*(x790)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r00)*(x789)*(x790)))+(((r20)*(x793)))+(((sj7)*(x792)))+(((IkReal(-1.00000000000000))*(x799)))+(((IkReal(-1.00000000000000))*(x794)*(x796)))+(((IkReal(-1.00000000000000))*(r01)*(x789)*(x794)))+(((IkReal(-1.00000000000000))*(x790)*(x791)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x800=((IkReal(1.00000000000000))*(r02)); | |
if( IKabs(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((IkReal(-1.00000000000000))*(sj6)*(x800)))+(((cj6)*(r12))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(r12)*(sj6)*(sj7)))+(((IkReal(-1.00000000000000))*(cj6)*(sj7)*(x800)))+(((IkReal(-1.00000000000000))*(cj7)*(r22))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((IkReal(-1.00000000000000))*(sj6)*(x800)))+(((cj6)*(r12)))))))+IKsqr(((((IkReal(-1.00000000000000))*(r12)*(sj6)*(sj7)))+(((IkReal(-1.00000000000000))*(cj6)*(sj7)*(x800)))+(((IkReal(-1.00000000000000))*(cj7)*(r22)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((IkReal(-1.00000000000000))*(sj6)*(x800)))+(((cj6)*(r12)))))), ((((IkReal(-1.00000000000000))*(r12)*(sj6)*(sj7)))+(((IkReal(-1.00000000000000))*(cj6)*(sj7)*(x800)))+(((IkReal(-1.00000000000000))*(cj7)*(r22))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x801=IKsin(j10); | |
IkReal x802=IKcos(j10); | |
IkReal x803=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x804=((cj7)*(sj11)); | |
IkReal x805=((cj11)*(r01)); | |
IkReal x806=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x807=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x808=((cj11)*(r21)); | |
IkReal x809=((r10)*(sj11)); | |
IkReal x810=((sj6)*(sj7)); | |
IkReal x811=((cj11)*(r11)); | |
IkReal x812=((r00)*(sj11)); | |
IkReal x813=((cj6)*(sj7)); | |
evalcond[0]=((((r02)*(sj6)))+(((sj9)*(x801)))+(((IkReal(-1.00000000000000))*(r12)*(x807)))); | |
evalcond[1]=((((cj7)*(r12)*(sj6)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj9)*(x801)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x803)*(x812)))+(((sj9)*(x802)))+(((IkReal(-1.00000000000000))*(x803)*(x805)))+(((cj6)*(x811)))+(((cj6)*(x809)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r12)*(sj7)*(x803)))+(((IkReal(-1.00000000000000))*(x802)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x807)))+(((IkReal(-1.00000000000000))*(r22)*(x806)))); | |
evalcond[4]=((((x812)*(x813)))+(x801)+(((x805)*(x813)))+(((cj7)*(x808)))+(((x810)*(x811)))+(((x809)*(x810)))+(((r20)*(x804)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj6)*(x805)*(x806)))+(((r20)*(sj11)*(sj7)))+(((cj9)*(x802)))+(((IkReal(-1.00000000000000))*(cj7)*(x803)*(x811)))+(((IkReal(-1.00000000000000))*(r10)*(x803)*(x804)))+(((IkReal(-1.00000000000000))*(r00)*(x804)*(x807)))+(((sj7)*(x808)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x814=((IkReal(1.00000000000000))*(cj6)); | |
if( IKabs(((gconst7)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst7)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x814)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x814)))+(((r00)*(sj11)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst7)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))), ((gconst7)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x814)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x814)))+(((r00)*(sj11)*(sj6))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x815=IKsin(j10); | |
IkReal x816=IKcos(j10); | |
IkReal x817=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x818=((cj7)*(sj11)); | |
IkReal x819=((cj11)*(r01)); | |
IkReal x820=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x821=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x822=((cj11)*(r21)); | |
IkReal x823=((r10)*(sj11)); | |
IkReal x824=((sj6)*(sj7)); | |
IkReal x825=((cj11)*(r11)); | |
IkReal x826=((r00)*(sj11)); | |
IkReal x827=((cj6)*(sj7)); | |
evalcond[0]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x821)))+(((sj9)*(x815)))); | |
evalcond[1]=((((cj7)*(r12)*(sj6)))+(((cj9)*(x815)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))); | |
evalcond[2]=((((cj6)*(x825)))+(((sj9)*(x816)))+(((IkReal(-1.00000000000000))*(x817)*(x819)))+(((IkReal(-1.00000000000000))*(x817)*(x826)))+(((cj6)*(x823)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r02)*(sj7)*(x821)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x817)))+(((IkReal(-1.00000000000000))*(x816)))+(((IkReal(-1.00000000000000))*(r22)*(x820)))); | |
evalcond[4]=((((x824)*(x825)))+(((x823)*(x824)))+(((cj7)*(x822)))+(((x826)*(x827)))+(((r20)*(x818)))+(x815)+(((x819)*(x827)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(r00)*(x818)*(x821)))+(((IkReal(-1.00000000000000))*(cj6)*(x819)*(x820)))+(((IkReal(-1.00000000000000))*(r10)*(x817)*(x818)))+(((r20)*(sj11)*(sj7)))+(((IkReal(-1.00000000000000))*(cj7)*(x817)*(x825)))+(((sj7)*(x822)))+(((cj9)*(x816)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x828=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x829=((cj7)*(r21)); | |
IkReal x830=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x831=((cj7)*(r20)); | |
IkReal x832=((cj6)*(sj7)); | |
IkReal x833=((r01)*(sj6)); | |
IkReal x834=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x835=((cj6)*(r10)); | |
IkReal x836=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x837=((cj7)*(sj6)); | |
IkReal x838=((r00)*(sj6)); | |
IkReal x839=((r11)*(sj11)); | |
IkReal x840=((IkReal(1.00000000000000))*(py)); | |
IkReal x841=((sj6)*(sj7)); | |
IkReal x842=((r21)*(sj7)); | |
IkReal x843=((cj6)*(cj7)); | |
IkReal x844=((r01)*(x832)); | |
IkReal x845=((cj11)*(r20)*(sj7)); | |
IkReal x846=((r11)*(x841)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.71238898038469))+(j8)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(sj11)*(x833)))+(((IkReal(-1.00000000000000))*(x830)*(x835)))+(cj9)+(((cj11)*(x838)))+(((cj6)*(x839)))); | |
evalcond[2]=((IkReal(-0.0100933000000000))+(((IkReal(-0.00151567000000000))*(sj9)))+(((IkReal(-0.0616850000000000))*(cj9)))+(((x834)*(x835)))+(((IkReal(-1.00000000000000))*(x834)*(x838)))+(((px)*(sj6)))+(((x828)*(x833)))+(((IkReal(-1.00000000000000))*(cj6)*(x840)))+(((IkReal(-1.00000000000000))*(cj6)*(r11)*(x828)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r10)*(x830)*(x841)))+(((sj11)*(x844)))+(((sj11)*(x829)))+(((IkReal(-1.00000000000000))*(x830)*(x831)))+(((x839)*(x841)))+(((IkReal(-1.00000000000000))*(r00)*(x830)*(x832)))); | |
evalcond[4]=((sj9)+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj11)*(x836)))+(((IkReal(-1.00000000000000))*(sj6)*(x836)*(x839)))+(((cj11)*(r10)*(x837)))+(((IkReal(-1.00000000000000))*(r20)*(sj7)*(x830)))+(((sj11)*(x842)))+(((cj11)*(r00)*(x843)))); | |
evalcond[5]=((IkReal(0.0701403000000000))+(((r01)*(x828)*(x843)))+(((py)*(x837)))+(((IkReal(-1.00000000000000))*(pz)*(sj7)))+(((r20)*(sj7)*(x834)))+(((r11)*(x828)*(x837)))+(((IkReal(0.00151567000000000))*(cj9)))+(((IkReal(-1.00000000000000))*(r10)*(x834)*(x837)))+(((IkReal(-1.00000000000000))*(x828)*(x842)))+(((IkReal(-0.0616850000000000))*(sj9)))+(((IkReal(-1.00000000000000))*(r00)*(x834)*(x843)))+(((px)*(x843)))); | |
evalcond[6]=((IkReal(0.572000000000000))+(((r10)*(x834)*(x841)))+(((x831)*(x834)))+(((IkReal(-1.00000000000000))*(x828)*(x829)))+(((IkReal(-1.00000000000000))*(x828)*(x846)))+(((IkReal(-1.00000000000000))*(x840)*(x841)))+(((IkReal(-1.00000000000000))*(pz)*(x836)))+(((IkReal(-1.00000000000000))*(x828)*(x844)))+(((r00)*(x832)*(x834)))+(((IkReal(-1.00000000000000))*(px)*(x832)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst8; | |
gconst8=IKsign(sj9); | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[9]; | |
IkReal x847=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x848=((r21)*(sj11)); | |
IkReal x849=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x850=((r01)*(sj6)); | |
IkReal x851=((r20)*(sj7)); | |
IkReal x852=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x853=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x854=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x855=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x856=((cj6)*(r10)); | |
IkReal x857=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x858=((cj7)*(sj6)); | |
IkReal x859=((r00)*(sj6)); | |
IkReal x860=((r11)*(sj11)); | |
IkReal x861=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x862=((cj11)*(r10)); | |
IkReal x863=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x864=((cj6)*(r11)); | |
IkReal x865=((r01)*(sj11)); | |
IkReal x866=((cj11)*(cj6)*(r00)); | |
IkReal x867=((r11)*(sj6)*(sj7)); | |
IkReal x868=((r10)*(sj6)*(sj7)); | |
IkReal x869=((cj6)*(sj7)*(x865)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(3.14159265358979))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x852)))); | |
evalcond[2]=((IkReal(1.00000000000000))+(((cj11)*(x859)))+(((IkReal(-1.00000000000000))*(x850)*(x863)))+(((cj6)*(x860)))+(((IkReal(-1.00000000000000))*(x849)*(x856)))); | |
evalcond[3]=((((sj11)*(x856)))+(((IkReal(-1.00000000000000))*(x859)*(x863)))+(((IkReal(-1.00000000000000))*(x849)*(x850)))+(((cj11)*(x864)))); | |
evalcond[4]=((IkReal(-0.0717783000000000))+(((IkReal(-1.00000000000000))*(x855)*(x864)))+(((px)*(sj6)))+(((x853)*(x856)))+(((x850)*(x855)))+(((IkReal(-1.00000000000000))*(x853)*(x859)))+(((IkReal(-1.00000000000000))*(py)*(x852)))); | |
evalcond[5]=((((sj6)*(sj7)*(x860)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x849)))+(x869)+(((IkReal(-1.00000000000000))*(x849)*(x868)))+(((cj7)*(x848)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x849)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(x849)*(x851)))+(((IkReal(-1.00000000000000))*(cj7)*(x852)*(x865)))+(((sj7)*(x848)))+(((x858)*(x862)))+(((cj7)*(x866)))+(((IkReal(-1.00000000000000))*(sj6)*(x857)*(x860)))); | |
evalcond[7]=((IkReal(0.0716559700000000))+(((sj6)*(x847)*(x860)))+(((IkReal(-1.00000000000000))*(pz)*(x854)))+(((x851)*(x853)))+(((cj6)*(cj7)*(px)))+(((cj6)*(x847)*(x865)))+(((IkReal(-1.00000000000000))*(x847)*(x866)))+(((IkReal(-1.00000000000000))*(x848)*(x861)))+(((IkReal(-1.00000000000000))*(sj6)*(x847)*(x862)))+(((py)*(x858)))); | |
evalcond[8]=((IkReal(0.572000000000000))+(((cj6)*(r00)*(sj7)*(x853)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x855)))+(((cj11)*(r20)*(x847)))+(((IkReal(-1.00000000000000))*(pz)*(x857)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x854)))+(((x853)*(x868)))+(((IkReal(-1.00000000000000))*(x847)*(x848)))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x852)))+(((IkReal(-1.00000000000000))*(x855)*(x867)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x870=((r12)*(sj6)); | |
IkReal x871=((cj6)*(r02)); | |
if( IKabs(((((cj7)*(x871)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj7)*(x870))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((cj7)*(r22)))+(((sj7)*(x871)))+(((sj7)*(x870))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((cj7)*(x871)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj7)*(x870)))))+IKsqr(((((cj7)*(r22)))+(((sj7)*(x871)))+(((sj7)*(x870)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((cj7)*(x871)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj7)*(x870)))), ((((cj7)*(r22)))+(((sj7)*(x871)))+(((sj7)*(x870))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x872=IKcos(j10); | |
IkReal x873=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x874=((cj7)*(sj11)); | |
IkReal x875=((r10)*(sj6)); | |
IkReal x876=((cj11)*(r21)); | |
IkReal x877=((sj11)*(sj7)); | |
IkReal x878=((cj11)*(cj7)); | |
IkReal x879=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x880=((r11)*(sj6)); | |
IkReal x881=((r12)*(sj6)); | |
IkReal x882=((cj11)*(sj7)); | |
IkReal x883=((IkReal(1.00000000000000))*(IKsin(j10))); | |
evalcond[0]=((((cj7)*(x881)))+(((IkReal(-1.00000000000000))*(x883)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(x879)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r02)*(sj7)*(x873)))+(x872)+(((IkReal(-1.00000000000000))*(x879)*(x881)))+(((IkReal(-1.00000000000000))*(cj7)*(r22)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x883)))+(((cj6)*(r00)*(x877)))+(((cj7)*(x876)))+(((x875)*(x877)))+(((x880)*(x882)))+(((cj6)*(r01)*(x882)))+(((r20)*(x874)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x874)*(x875)))+(((sj7)*(x876)))+(((IkReal(-1.00000000000000))*(x872)))+(((r20)*(x877)))+(((IkReal(-1.00000000000000))*(x878)*(x880)))+(((IkReal(-1.00000000000000))*(r00)*(x873)*(x874)))+(((IkReal(-1.00000000000000))*(r01)*(x873)*(x878)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x884=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x885=((r21)*(sj11)); | |
IkReal x886=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x887=((r01)*(sj6)); | |
IkReal x888=((r20)*(sj7)); | |
IkReal x889=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x890=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x891=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x892=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x893=((cj6)*(r10)); | |
IkReal x894=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x895=((cj7)*(sj6)); | |
IkReal x896=((r00)*(sj6)); | |
IkReal x897=((r11)*(sj11)); | |
IkReal x898=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x899=((cj11)*(r10)); | |
IkReal x900=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x901=((cj6)*(r11)); | |
IkReal x902=((r01)*(sj11)); | |
IkReal x903=((cj11)*(cj6)*(r00)); | |
IkReal x904=((r11)*(sj6)*(sj7)); | |
IkReal x905=((r10)*(sj6)*(sj7)); | |
IkReal x906=((cj6)*(sj7)*(x902)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(j9, IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x889)))); | |
evalcond[2]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(x886)*(x893)))+(((cj11)*(x896)))+(((cj6)*(x897)))+(((IkReal(-1.00000000000000))*(x887)*(x900)))); | |
evalcond[3]=((((cj11)*(x901)))+(((sj11)*(x893)))+(((IkReal(-1.00000000000000))*(x886)*(x887)))+(((IkReal(-1.00000000000000))*(x896)*(x900)))); | |
evalcond[4]=((IkReal(0.0515917000000000))+(((x887)*(x892)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(x892)*(x901)))+(((x890)*(x893)))+(((IkReal(-1.00000000000000))*(py)*(x889)))+(((IkReal(-1.00000000000000))*(x890)*(x896)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(x886)*(x905)))+(((cj7)*(x885)))+(((sj6)*(sj7)*(x897)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x886)))+(x906)+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x886)))); | |
evalcond[6]=((((x895)*(x899)))+(((IkReal(-1.00000000000000))*(cj7)*(x889)*(x902)))+(((cj7)*(x903)))+(((IkReal(-1.00000000000000))*(x886)*(x888)))+(((sj7)*(x885)))+(((IkReal(-1.00000000000000))*(sj6)*(x894)*(x897)))); | |
evalcond[7]=((IkReal(0.0686246300000000))+(((IkReal(-1.00000000000000))*(x884)*(x903)))+(((sj6)*(x884)*(x897)))+(((py)*(x895)))+(((cj6)*(cj7)*(px)))+(((IkReal(-1.00000000000000))*(pz)*(x891)))+(((IkReal(-1.00000000000000))*(sj6)*(x884)*(x899)))+(((IkReal(-1.00000000000000))*(x885)*(x898)))+(((cj6)*(x884)*(x902)))+(((x888)*(x890)))); | |
evalcond[8]=((IkReal(0.572000000000000))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x889)))+(((cj11)*(r20)*(x884)))+(((IkReal(-1.00000000000000))*(x884)*(x885)))+(((x890)*(x905)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x892)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x891)))+(((IkReal(-1.00000000000000))*(pz)*(x894)))+(((IkReal(-1.00000000000000))*(x892)*(x904)))+(((cj6)*(r00)*(sj7)*(x890)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x907=((r12)*(sj6)); | |
IkReal x908=((cj6)*(r02)); | |
IkReal x909=((IkReal(1.00000000000000))*(cj7)); | |
if( IKabs(((((IkReal(-1.00000000000000))*(x907)*(x909)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x908)*(x909))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((cj7)*(r22)))+(((sj7)*(x908)))+(((sj7)*(x907))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IkReal(-1.00000000000000))*(x907)*(x909)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x908)*(x909)))))+IKsqr(((((cj7)*(r22)))+(((sj7)*(x908)))+(((sj7)*(x907)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((IkReal(-1.00000000000000))*(x907)*(x909)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x908)*(x909)))), ((((cj7)*(r22)))+(((sj7)*(x908)))+(((sj7)*(x907))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x910=IKsin(j10); | |
IkReal x911=IKcos(j10); | |
IkReal x912=((IkReal(1.00000000000000))*(r22)); | |
IkReal x913=((cj6)*(r00)); | |
IkReal x914=((r10)*(sj6)); | |
IkReal x915=((r20)*(sj11)); | |
IkReal x916=((cj11)*(r21)); | |
IkReal x917=((sj11)*(sj7)); | |
IkReal x918=((cj6)*(r01)); | |
IkReal x919=((r11)*(sj6)); | |
IkReal x920=((cj6)*(r02)); | |
IkReal x921=((r12)*(sj6)); | |
IkReal x922=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x923=((cj11)*(sj7)); | |
IkReal x924=((IkReal(1.00000000000000))*(cj7)*(sj11)); | |
IkReal x925=((IkReal(1.00000000000000))*(cj11)*(cj7)); | |
evalcond[0]=((((cj7)*(x921)))+(((IkReal(-1.00000000000000))*(sj7)*(x912)))+(((cj7)*(x920)))+(x910)); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(cj7)*(x912)))+(((IkReal(-1.00000000000000))*(x921)*(x922)))+(x911)+(((IkReal(-1.00000000000000))*(x920)*(x922)))); | |
evalcond[2]=((((x919)*(x923)))+(((x914)*(x917)))+(((cj7)*(x916)))+(((x918)*(x923)))+(((IkReal(-1.00000000000000))*(x910)))+(((cj7)*(x915)))+(((x913)*(x917)))); | |
evalcond[3]=((((sj7)*(x916)))+(((IkReal(-1.00000000000000))*(x919)*(x925)))+(((IkReal(-1.00000000000000))*(x914)*(x924)))+(((sj7)*(x915)))+(x911)+(((IkReal(-1.00000000000000))*(x918)*(x925)))+(((IkReal(-1.00000000000000))*(x913)*(x924)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
if( IKabs(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((cj7)*(r22)))+(((cj6)*(r02)*(sj7)))+(((r12)*(sj6)*(sj7))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))))+IKsqr(((((cj7)*(r22)))+(((cj6)*(r02)*(sj7)))+(((r12)*(sj6)*(sj7)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))), ((((cj7)*(r22)))+(((cj6)*(r02)*(sj7)))+(((r12)*(sj6)*(sj7))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x926=IKsin(j10); | |
IkReal x927=IKcos(j10); | |
IkReal x928=((IkReal(1.00000000000000))*(cj9)); | |
IkReal x929=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x930=((cj7)*(sj11)); | |
IkReal x931=((cj11)*(r01)); | |
IkReal x932=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x933=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x934=((cj11)*(r21)); | |
IkReal x935=((r10)*(sj11)); | |
IkReal x936=((sj6)*(sj7)); | |
IkReal x937=((cj11)*(r11)); | |
IkReal x938=((r00)*(sj11)); | |
IkReal x939=((cj6)*(sj7)); | |
evalcond[0]=((((r02)*(sj6)))+(((sj9)*(x926)))+(((IkReal(-1.00000000000000))*(r12)*(x933)))); | |
evalcond[1]=((((cj7)*(r12)*(sj6)))+(((IkReal(-1.00000000000000))*(x926)*(x928)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x929)*(x938)))+(((sj9)*(x927)))+(((IkReal(-1.00000000000000))*(x929)*(x931)))+(((cj6)*(x937)))+(((cj6)*(x935)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r12)*(sj7)*(x929)))+(x927)+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x933)))+(((IkReal(-1.00000000000000))*(r22)*(x932)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(x926)))+(((x931)*(x939)))+(((x935)*(x936)))+(((x938)*(x939)))+(((r20)*(x930)))+(((cj7)*(x934)))+(((x936)*(x937)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj6)*(x931)*(x932)))+(((IkReal(-1.00000000000000))*(r10)*(x929)*(x930)))+(((IkReal(-1.00000000000000))*(cj7)*(x929)*(x937)))+(((r20)*(sj11)*(sj7)))+(((IkReal(-1.00000000000000))*(r00)*(x930)*(x933)))+(((IkReal(-1.00000000000000))*(x927)*(x928)))+(((sj7)*(x934)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x940=((IkReal(1.00000000000000))*(cj6)); | |
if( IKabs(((gconst8)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst8)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x940)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x940)))+(((r00)*(sj11)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst8)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))), ((gconst8)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x940)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x940)))+(((r00)*(sj11)*(sj6))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x941=IKsin(j10); | |
IkReal x942=IKcos(j10); | |
IkReal x943=((IkReal(1.00000000000000))*(cj9)); | |
IkReal x944=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x945=((cj7)*(sj11)); | |
IkReal x946=((cj11)*(r01)); | |
IkReal x947=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x948=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x949=((cj11)*(r21)); | |
IkReal x950=((r10)*(sj11)); | |
IkReal x951=((sj6)*(sj7)); | |
IkReal x952=((cj11)*(r11)); | |
IkReal x953=((r00)*(sj11)); | |
IkReal x954=((cj6)*(sj7)); | |
evalcond[0]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x948)))+(((sj9)*(x941)))); | |
evalcond[1]=((((cj7)*(r12)*(sj6)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x941)*(x943)))); | |
evalcond[2]=((((cj6)*(x950)))+(((IkReal(-1.00000000000000))*(x944)*(x946)))+(((cj6)*(x952)))+(((sj9)*(x942)))+(((IkReal(-1.00000000000000))*(x944)*(x953)))); | |
evalcond[3]=((x942)+(((IkReal(-1.00000000000000))*(r22)*(x947)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x944)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x948)))); | |
evalcond[4]=((((x953)*(x954)))+(((x950)*(x951)))+(((r20)*(x945)))+(((x951)*(x952)))+(((IkReal(-1.00000000000000))*(x941)))+(((x946)*(x954)))+(((cj7)*(x949)))); | |
evalcond[5]=((((sj7)*(x949)))+(((IkReal(-1.00000000000000))*(cj6)*(x946)*(x947)))+(((r20)*(sj11)*(sj7)))+(((IkReal(-1.00000000000000))*(r00)*(x945)*(x948)))+(((IkReal(-1.00000000000000))*(x942)*(x943)))+(((IkReal(-1.00000000000000))*(cj7)*(x944)*(x952)))+(((IkReal(-1.00000000000000))*(r10)*(x944)*(x945)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x955=((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30); | |
IkReal x956=((cj9)*(sj8)); | |
IkReal x957=((cj6)*(r12)); | |
IkReal x958=((cj7)*(sj9)); | |
IkReal x959=((IkReal(1.00000000000000))*(r02)*(sj6)); | |
if( IKabs(((x955)*(((x957)+(((IkReal(-1.00000000000000))*(x959))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x955)*(((IKabs(cj8) != 0)?((IkReal)1/(cj8)):(IkReal)1.0e30))*(((((x956)*(x957)))+(((cj6)*(r02)*(x958)))+(((r12)*(sj6)*(x958)))+(((IkReal(-1.00000000000000))*(x956)*(x959)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)*(sj9))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x955)*(((x957)+(((IkReal(-1.00000000000000))*(x959)))))))+IKsqr(((x955)*(((IKabs(cj8) != 0)?((IkReal)1/(cj8)):(IkReal)1.0e30))*(((((x956)*(x957)))+(((cj6)*(r02)*(x958)))+(((r12)*(sj6)*(x958)))+(((IkReal(-1.00000000000000))*(x956)*(x959)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)*(sj9)))))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((x955)*(((x957)+(((IkReal(-1.00000000000000))*(x959)))))), ((x955)*(((IKabs(cj8) != 0)?((IkReal)1/(cj8)):(IkReal)1.0e30))*(((((x956)*(x957)))+(((cj6)*(r02)*(x958)))+(((r12)*(sj6)*(x958)))+(((IkReal(-1.00000000000000))*(x956)*(x959)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)*(sj9))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x960=IKsin(j10); | |
IkReal x961=IKcos(j10); | |
IkReal x962=((cj9)*(sj8)); | |
IkReal x963=((cj6)*(cj7)); | |
IkReal x964=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x965=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x966=((r20)*(sj11)); | |
IkReal x967=((cj11)*(r21)); | |
IkReal x968=((cj6)*(sj11)); | |
IkReal x969=((cj11)*(cj6)); | |
IkReal x970=((r12)*(sj6)); | |
IkReal x971=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x972=((cj8)*(x960)); | |
IkReal x973=((IkReal(1.00000000000000))*(cj11)*(r01)); | |
IkReal x974=((r10)*(sj11)*(sj6)); | |
IkReal x975=((cj11)*(r11)*(sj6)); | |
IkReal x976=((IkReal(1.00000000000000))*(r00)*(sj11)); | |
IkReal x977=((IkReal(1.00000000000000))*(cj8)*(x961)); | |
evalcond[0]=((((r02)*(sj6)))+(((sj9)*(x960)))+(((IkReal(-1.00000000000000))*(r12)*(x965)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x977)))+(((r02)*(x963)))+(((x960)*(x962)))+(((cj7)*(x970)))+(((IkReal(-1.00000000000000))*(r22)*(x971)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(sj6)*(x973)))+(((r11)*(x969)))+(((sj9)*(x961)))+(((r10)*(x968)))+(((IkReal(-1.00000000000000))*(sj6)*(x976)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x970)*(x971)))+(((IkReal(-1.00000000000000))*(r22)*(x964)))+(((IkReal(-1.00000000000000))*(sj8)*(x961)))+(((IkReal(-1.00000000000000))*(cj9)*(x972)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x965)))); | |
evalcond[4]=((((r00)*(sj7)*(x968)))+(((IkReal(-1.00000000000000))*(cj9)*(x977)))+(((r01)*(sj7)*(x969)))+(((cj7)*(x966)))+(((sj8)*(x960)))+(((sj7)*(x975)))+(((sj7)*(x974)))+(((cj7)*(x967)))); | |
evalcond[5]=((x972)+(((IkReal(-1.00000000000000))*(x964)*(x974)))+(((IkReal(-1.00000000000000))*(x963)*(x973)))+(((sj7)*(x967)))+(((x961)*(x962)))+(((IkReal(-1.00000000000000))*(x963)*(x976)))+(((sj7)*(x966)))+(((IkReal(-1.00000000000000))*(x964)*(x975)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x978=((IkReal(1.00000000000000))*(cj6)); | |
if( IKabs(((gconst2)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst2)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x978)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x978)))+(((r00)*(sj11)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst2)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))), ((gconst2)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x978)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x978)))+(((r00)*(sj11)*(sj6))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x979=IKsin(j10); | |
IkReal x980=IKcos(j10); | |
IkReal x981=((cj9)*(sj8)); | |
IkReal x982=((cj6)*(cj7)); | |
IkReal x983=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x984=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x985=((r20)*(sj11)); | |
IkReal x986=((cj11)*(r21)); | |
IkReal x987=((cj6)*(sj11)); | |
IkReal x988=((cj11)*(cj6)); | |
IkReal x989=((r12)*(sj6)); | |
IkReal x990=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x991=((cj8)*(x979)); | |
IkReal x992=((IkReal(1.00000000000000))*(cj11)*(r01)); | |
IkReal x993=((r10)*(sj11)*(sj6)); | |
IkReal x994=((cj11)*(r11)*(sj6)); | |
IkReal x995=((IkReal(1.00000000000000))*(r00)*(sj11)); | |
IkReal x996=((IkReal(1.00000000000000))*(cj8)*(x980)); | |
evalcond[0]=((((r02)*(sj6)))+(((sj9)*(x979)))+(((IkReal(-1.00000000000000))*(r12)*(x984)))); | |
evalcond[1]=((((x979)*(x981)))+(((r02)*(x982)))+(((IkReal(-1.00000000000000))*(x996)))+(((IkReal(-1.00000000000000))*(r22)*(x990)))+(((cj7)*(x989)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(sj6)*(x995)))+(((r10)*(x987)))+(((sj9)*(x980)))+(((r11)*(x988)))+(((IkReal(-1.00000000000000))*(sj6)*(x992)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(cj9)*(x991)))+(((IkReal(-1.00000000000000))*(sj8)*(x980)))+(((IkReal(-1.00000000000000))*(x989)*(x990)))+(((IkReal(-1.00000000000000))*(r22)*(x983)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x984)))); | |
evalcond[4]=((((r00)*(sj7)*(x987)))+(((IkReal(-1.00000000000000))*(cj9)*(x996)))+(((cj7)*(x985)))+(((sj7)*(x993)))+(((r01)*(sj7)*(x988)))+(((cj7)*(x986)))+(((sj7)*(x994)))+(((sj8)*(x979)))); | |
evalcond[5]=((((sj7)*(x985)))+(((sj7)*(x986)))+(((IkReal(-1.00000000000000))*(x983)*(x993)))+(((IkReal(-1.00000000000000))*(x982)*(x995)))+(((x980)*(x981)))+(((IkReal(-1.00000000000000))*(x982)*(x992)))+(((IkReal(-1.00000000000000))*(x983)*(x994)))+(x991)); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x997=((sj11)*(sj7)); | |
IkReal x998=((cj11)*(cj7)); | |
IkReal x999=((r10)*(sj6)); | |
IkReal x1000=((cj6)*(r00)); | |
IkReal x1001=((cj11)*(sj7)); | |
IkReal x1002=((cj7)*(sj11)); | |
IkReal x1003=((IkReal(1.00000000000000))*(r11)*(sj6)); | |
IkReal x1004=((IkReal(1.00000000000000))*(cj6)*(r01)); | |
if( IKabs(((gconst0)*(((((x1000)*(x998)))+(((IkReal(-1.00000000000000))*(r20)*(x1001)))+(((IkReal(-1.00000000000000))*(x1002)*(x1003)))+(((IkReal(-1.00000000000000))*(x1002)*(x1004)))+(((r21)*(x997)))+(((x998)*(x999))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst0)*(((((IkReal(-1.00000000000000))*(r21)*(x1002)))+(((IkReal(-1.00000000000000))*(x1003)*(x997)))+(((IkReal(-1.00000000000000))*(x1004)*(x997)))+(((x1001)*(x999)))+(((r20)*(x998)))+(((x1000)*(x1001))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst0)*(((((x1000)*(x998)))+(((IkReal(-1.00000000000000))*(r20)*(x1001)))+(((IkReal(-1.00000000000000))*(x1002)*(x1003)))+(((IkReal(-1.00000000000000))*(x1002)*(x1004)))+(((r21)*(x997)))+(((x998)*(x999)))))), ((gconst0)*(((((IkReal(-1.00000000000000))*(r21)*(x1002)))+(((IkReal(-1.00000000000000))*(x1003)*(x997)))+(((IkReal(-1.00000000000000))*(x1004)*(x997)))+(((x1001)*(x999)))+(((r20)*(x998)))+(((x1000)*(x1001))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x1005=IKsin(j8); | |
IkReal x1006=IKcos(j8); | |
IkReal x1007=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1008=((cj7)*(r21)); | |
IkReal x1009=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1010=((cj7)*(r20)); | |
IkReal x1011=((IkReal(0.00151567000000000))*(cj9)); | |
IkReal x1012=((r21)*(sj7)); | |
IkReal x1013=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1014=((cj7)*(sj6)); | |
IkReal x1015=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1016=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1017=((cj6)*(px)); | |
IkReal x1018=((cj6)*(r01)); | |
IkReal x1019=((cj11)*(r20)*(sj7)); | |
IkReal x1020=((sj7)*(x1018)); | |
IkReal x1021=((sj9)*(x1006)); | |
IkReal x1022=((cj6)*(r00)*(sj7)); | |
IkReal x1023=((r11)*(sj6)*(sj7)); | |
IkReal x1024=((sj9)*(x1005)); | |
IkReal x1025=((r10)*(sj6)*(sj7)); | |
IkReal x1026=((cj6)*(cj7)*(r00)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(x1009)*(x1022)))+(((sj11)*(x1008)))+(((IkReal(-1.00000000000000))*(x1009)*(x1010)))+(x1021)+(((IkReal(-1.00000000000000))*(x1009)*(x1025)))+(((sj11)*(x1023)))+(((sj11)*(x1020)))); | |
evalcond[1]=((((sj11)*(x1012)))+(((cj11)*(r10)*(x1014)))+(((IkReal(-1.00000000000000))*(sj11)*(x1013)*(x1018)))+(((cj11)*(x1026)))+(((IkReal(-1.00000000000000))*(x1024)))+(((IkReal(-1.00000000000000))*(r11)*(sj11)*(sj6)*(x1013)))+(((IkReal(-1.00000000000000))*(r20)*(sj7)*(x1009)))); | |
evalcond[2]=((((r11)*(x1007)*(x1014)))+(((cj7)*(x1017)))+(((IkReal(0.0616850000000000))*(x1024)))+(((IkReal(-0.0701403000000000))*(x1005)))+(((IkReal(-1.00000000000000))*(r10)*(x1014)*(x1015)))+(((IkReal(-1.00000000000000))*(pz)*(x1016)))+(((cj7)*(x1007)*(x1018)))+(((IkReal(-0.302000000000000))*(x1006)))+(((IkReal(-1.00000000000000))*(x1005)*(x1011)))+(((r20)*(sj7)*(x1015)))+(((py)*(x1014)))+(((IkReal(-1.00000000000000))*(x1007)*(x1012)))+(((IkReal(-1.00000000000000))*(x1015)*(x1026)))); | |
evalcond[3]=((IkReal(0.270000000000000))+(((x1006)*(x1011)))+(((IkReal(-1.00000000000000))*(x1007)*(x1023)))+(((IkReal(-1.00000000000000))*(x1007)*(x1020)))+(((x1015)*(x1022)))+(((IkReal(0.0701403000000000))*(x1006)))+(((IkReal(-0.302000000000000))*(x1005)))+(((x1015)*(x1025)))+(((IkReal(-0.0616850000000000))*(x1021)))+(((IkReal(-1.00000000000000))*(pz)*(x1013)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x1016)))+(((x1010)*(x1015)))+(((IkReal(-1.00000000000000))*(x1007)*(x1008)))+(((IkReal(-1.00000000000000))*(x1016)*(x1017)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst2; | |
gconst2=IKsign(sj9); | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[2]; | |
dummyeval[0]=sj9; | |
dummyeval[1]=cj8; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 || IKabs(dummyeval[1]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[9]; | |
IkReal x1027=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x1028=((r21)*(sj11)); | |
IkReal x1029=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1030=((r01)*(sj6)); | |
IkReal x1031=((r20)*(sj7)); | |
IkReal x1032=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1033=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1034=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1035=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1036=((cj6)*(r10)); | |
IkReal x1037=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1038=((cj7)*(sj6)); | |
IkReal x1039=((r00)*(sj6)); | |
IkReal x1040=((r11)*(sj11)); | |
IkReal x1041=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x1042=((cj11)*(r10)); | |
IkReal x1043=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1044=((cj6)*(r11)); | |
IkReal x1045=((r01)*(sj11)); | |
IkReal x1046=((cj11)*(cj6)*(r00)); | |
IkReal x1047=((r11)*(sj6)*(sj7)); | |
IkReal x1048=((r10)*(sj6)*(sj7)); | |
IkReal x1049=((cj6)*(sj7)*(x1045)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(3.14159265358979))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1032)))); | |
evalcond[2]=((IkReal(1.00000000000000))+(((cj11)*(x1039)))+(((IkReal(-1.00000000000000))*(x1029)*(x1036)))+(((IkReal(-1.00000000000000))*(x1030)*(x1043)))+(((cj6)*(x1040)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1029)*(x1030)))+(((cj11)*(x1044)))+(((IkReal(-1.00000000000000))*(x1039)*(x1043)))+(((sj11)*(x1036)))); | |
evalcond[4]=((IkReal(-0.0717783000000000))+(((IkReal(-1.00000000000000))*(py)*(x1032)))+(((IkReal(-1.00000000000000))*(x1033)*(x1039)))+(((px)*(sj6)))+(((x1033)*(x1036)))+(((x1030)*(x1035)))+(((IkReal(-1.00000000000000))*(x1035)*(x1044)))); | |
evalcond[5]=((x1049)+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x1029)))+(((sj6)*(sj7)*(x1040)))+(((cj7)*(x1028)))+(((IkReal(-1.00000000000000))*(x1029)*(x1048)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x1029)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(cj7)*(x1032)*(x1045)))+(((cj7)*(x1046)))+(((IkReal(-1.00000000000000))*(x1029)*(x1031)))+(((sj7)*(x1028)))+(((x1038)*(x1042)))+(((IkReal(-1.00000000000000))*(sj6)*(x1037)*(x1040)))); | |
evalcond[7]=((((IkReal(-0.302000000000000))*(cj8)))+(((IkReal(-0.0716559700000000))*(sj8)))+(((IkReal(-1.00000000000000))*(x1027)*(x1046)))+(((cj6)*(x1027)*(x1045)))+(((cj6)*(cj7)*(px)))+(((sj6)*(x1027)*(x1040)))+(((IkReal(-1.00000000000000))*(sj6)*(x1027)*(x1042)))+(((IkReal(-1.00000000000000))*(x1028)*(x1041)))+(((IkReal(-1.00000000000000))*(pz)*(x1034)))+(((py)*(x1038)))+(((x1031)*(x1033)))); | |
evalcond[8]=((IkReal(0.270000000000000))+(((IkReal(0.0716559700000000))*(cj8)))+(((x1033)*(x1048)))+(((cj11)*(r20)*(x1027)))+(((IkReal(-1.00000000000000))*(x1027)*(x1028)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x1035)))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x1032)))+(((IkReal(-1.00000000000000))*(x1035)*(x1047)))+(((cj6)*(r00)*(sj7)*(x1033)))+(((IkReal(-1.00000000000000))*(pz)*(x1037)))+(((IkReal(-0.302000000000000))*(sj8)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x1034)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst3; | |
gconst3=IKsign((((cj8)*(cj8))+((sj8)*(sj8)))); | |
dummyeval[0]=(((cj8)*(cj8))+((sj8)*(sj8))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst4; | |
gconst4=IKsign(((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8)))))); | |
dummyeval[0]=((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8))))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
continue; | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1050=((sj7)*(sj8)); | |
IkReal x1051=((cj11)*(r21)); | |
IkReal x1052=((r20)*(sj11)); | |
IkReal x1053=((cj8)*(sj7)); | |
IkReal x1054=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1055=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1056=((cj7)*(sj6)*(sj8)); | |
IkReal x1057=((cj6)*(cj7)*(sj8)); | |
IkReal x1058=((cj7)*(cj8)*(sj6)); | |
IkReal x1059=((cj6)*(cj7)*(cj8)); | |
if( IKabs(((gconst4)*(((((r02)*(x1057)))+(((x1052)*(x1053)))+(((IkReal(-1.00000000000000))*(r00)*(x1054)*(x1059)))+(((IkReal(-1.00000000000000))*(r01)*(x1055)*(x1059)))+(((IkReal(-1.00000000000000))*(r11)*(x1055)*(x1058)))+(((x1051)*(x1053)))+(((IkReal(-1.00000000000000))*(r22)*(x1050)))+(((r12)*(x1056)))+(((IkReal(-1.00000000000000))*(r10)*(x1054)*(x1058))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst4)*(((((IkReal(-1.00000000000000))*(r01)*(x1055)*(x1057)))+(((IkReal(-1.00000000000000))*(r12)*(x1058)))+(((IkReal(-1.00000000000000))*(r00)*(x1054)*(x1057)))+(((IkReal(-1.00000000000000))*(r11)*(x1055)*(x1056)))+(((x1050)*(x1052)))+(((x1050)*(x1051)))+(((r22)*(x1053)))+(((IkReal(-1.00000000000000))*(r02)*(x1059)))+(((IkReal(-1.00000000000000))*(r10)*(x1054)*(x1056))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst4)*(((((r02)*(x1057)))+(((x1052)*(x1053)))+(((IkReal(-1.00000000000000))*(r00)*(x1054)*(x1059)))+(((IkReal(-1.00000000000000))*(r01)*(x1055)*(x1059)))+(((IkReal(-1.00000000000000))*(r11)*(x1055)*(x1058)))+(((x1051)*(x1053)))+(((IkReal(-1.00000000000000))*(r22)*(x1050)))+(((r12)*(x1056)))+(((IkReal(-1.00000000000000))*(r10)*(x1054)*(x1058)))))), ((gconst4)*(((((IkReal(-1.00000000000000))*(r01)*(x1055)*(x1057)))+(((IkReal(-1.00000000000000))*(r12)*(x1058)))+(((IkReal(-1.00000000000000))*(r00)*(x1054)*(x1057)))+(((IkReal(-1.00000000000000))*(r11)*(x1055)*(x1056)))+(((x1050)*(x1052)))+(((x1050)*(x1051)))+(((r22)*(x1053)))+(((IkReal(-1.00000000000000))*(r02)*(x1059)))+(((IkReal(-1.00000000000000))*(r10)*(x1054)*(x1056))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x1060=IKcos(j10); | |
IkReal x1061=IKsin(j10); | |
IkReal x1062=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1063=((cj6)*(r02)); | |
IkReal x1064=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1065=((r20)*(sj11)); | |
IkReal x1066=((cj11)*(r21)); | |
IkReal x1067=((r12)*(sj6)); | |
IkReal x1068=((sj8)*(x1061)); | |
IkReal x1069=((cj8)*(x1061)); | |
IkReal x1070=((r10)*(sj11)*(sj6)); | |
IkReal x1071=((IkReal(1.00000000000000))*(x1060)); | |
IkReal x1072=((cj11)*(cj6)*(r01)); | |
IkReal x1073=((cj11)*(r11)*(sj6)); | |
IkReal x1074=((cj6)*(r00)*(sj11)); | |
IkReal x1075=((cj8)*(x1071)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(r22)*(x1064)))+(((cj7)*(x1063)))+(((IkReal(-1.00000000000000))*(x1075)))+(x1068)+(((cj7)*(x1067)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1063)*(x1064)))+(((IkReal(-1.00000000000000))*(sj8)*(x1071)))+(((IkReal(-1.00000000000000))*(r22)*(x1062)))+(((IkReal(-1.00000000000000))*(x1064)*(x1067)))+(((IkReal(-1.00000000000000))*(x1069)))); | |
evalcond[2]=((((sj7)*(x1074)))+(((sj7)*(x1073)))+(((IkReal(-1.00000000000000))*(x1075)))+(((sj7)*(x1072)))+(x1068)+(((sj7)*(x1070)))+(((cj7)*(x1065)))+(((cj7)*(x1066)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1062)*(x1073)))+(((sj7)*(x1066)))+(((sj7)*(x1065)))+(((sj8)*(x1060)))+(x1069)+(((IkReal(-1.00000000000000))*(x1062)*(x1074)))+(((IkReal(-1.00000000000000))*(x1062)*(x1072)))+(((IkReal(-1.00000000000000))*(x1062)*(x1070)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1076=((cj7)*(cj8)); | |
IkReal x1077=((r12)*(sj6)); | |
IkReal x1078=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1079=((cj6)*(r02)); | |
IkReal x1080=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1081=((cj7)*(sj8)); | |
if( IKabs(((gconst3)*(((((IkReal(-1.00000000000000))*(x1076)*(x1080)))+(((IkReal(-1.00000000000000))*(x1077)*(x1081)))+(((IkReal(-1.00000000000000))*(x1079)*(x1081)))+(((r22)*(sj7)*(sj8)))+(((IkReal(-1.00000000000000))*(cj8)*(x1077)*(x1078)))+(((IkReal(-1.00000000000000))*(cj8)*(x1078)*(x1079))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst3)*(((((IkReal(-1.00000000000000))*(sj8)*(x1078)*(x1079)))+(((x1076)*(x1079)))+(((IkReal(-1.00000000000000))*(cj8)*(r22)*(x1078)))+(((IkReal(-1.00000000000000))*(x1080)*(x1081)))+(((x1076)*(x1077)))+(((IkReal(-1.00000000000000))*(sj8)*(x1077)*(x1078))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst3)*(((((IkReal(-1.00000000000000))*(x1076)*(x1080)))+(((IkReal(-1.00000000000000))*(x1077)*(x1081)))+(((IkReal(-1.00000000000000))*(x1079)*(x1081)))+(((r22)*(sj7)*(sj8)))+(((IkReal(-1.00000000000000))*(cj8)*(x1077)*(x1078)))+(((IkReal(-1.00000000000000))*(cj8)*(x1078)*(x1079)))))), ((gconst3)*(((((IkReal(-1.00000000000000))*(sj8)*(x1078)*(x1079)))+(((x1076)*(x1079)))+(((IkReal(-1.00000000000000))*(cj8)*(r22)*(x1078)))+(((IkReal(-1.00000000000000))*(x1080)*(x1081)))+(((x1076)*(x1077)))+(((IkReal(-1.00000000000000))*(sj8)*(x1077)*(x1078))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x1082=IKcos(j10); | |
IkReal x1083=IKsin(j10); | |
IkReal x1084=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1085=((cj6)*(r02)); | |
IkReal x1086=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1087=((r20)*(sj11)); | |
IkReal x1088=((cj11)*(r21)); | |
IkReal x1089=((r12)*(sj6)); | |
IkReal x1090=((sj8)*(x1083)); | |
IkReal x1091=((cj8)*(x1083)); | |
IkReal x1092=((r10)*(sj11)*(sj6)); | |
IkReal x1093=((IkReal(1.00000000000000))*(x1082)); | |
IkReal x1094=((cj11)*(cj6)*(r01)); | |
IkReal x1095=((cj11)*(r11)*(sj6)); | |
IkReal x1096=((cj6)*(r00)*(sj11)); | |
IkReal x1097=((cj8)*(x1093)); | |
evalcond[0]=((((cj7)*(x1089)))+(((IkReal(-1.00000000000000))*(x1097)))+(((cj7)*(x1085)))+(((IkReal(-1.00000000000000))*(r22)*(x1086)))+(x1090)); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r22)*(x1084)))+(((IkReal(-1.00000000000000))*(sj8)*(x1093)))+(((IkReal(-1.00000000000000))*(x1091)))+(((IkReal(-1.00000000000000))*(x1086)*(x1089)))+(((IkReal(-1.00000000000000))*(x1085)*(x1086)))); | |
evalcond[2]=((((cj7)*(x1088)))+(((sj7)*(x1092)))+(((sj7)*(x1096)))+(((IkReal(-1.00000000000000))*(x1097)))+(((sj7)*(x1095)))+(((cj7)*(x1087)))+(x1090)+(((sj7)*(x1094)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1084)*(x1092)))+(((IkReal(-1.00000000000000))*(x1084)*(x1094)))+(((sj8)*(x1082)))+(((sj7)*(x1088)))+(((IkReal(-1.00000000000000))*(x1084)*(x1095)))+(((IkReal(-1.00000000000000))*(x1084)*(x1096)))+(x1091)+(((sj7)*(x1087)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1098=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x1099=((r21)*(sj11)); | |
IkReal x1100=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1101=((r01)*(sj6)); | |
IkReal x1102=((r20)*(sj7)); | |
IkReal x1103=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1104=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1105=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1106=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1107=((cj6)*(r10)); | |
IkReal x1108=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1109=((cj7)*(sj6)); | |
IkReal x1110=((r00)*(sj6)); | |
IkReal x1111=((r11)*(sj11)); | |
IkReal x1112=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x1113=((cj11)*(r10)); | |
IkReal x1114=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1115=((cj6)*(r11)); | |
IkReal x1116=((r01)*(sj11)); | |
IkReal x1117=((cj11)*(cj6)*(r00)); | |
IkReal x1118=((r11)*(sj6)*(sj7)); | |
IkReal x1119=((r10)*(sj6)*(sj7)); | |
IkReal x1120=((cj6)*(sj7)*(x1116)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(j9, IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1103)))); | |
evalcond[2]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(x1100)*(x1107)))+(((cj6)*(x1111)))+(((IkReal(-1.00000000000000))*(x1101)*(x1114)))+(((cj11)*(x1110)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1100)*(x1101)))+(((IkReal(-1.00000000000000))*(x1110)*(x1114)))+(((cj11)*(x1115)))+(((sj11)*(x1107)))); | |
evalcond[4]=((IkReal(0.0515917000000000))+(((IkReal(-1.00000000000000))*(x1104)*(x1110)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(py)*(x1103)))+(((IkReal(-1.00000000000000))*(x1106)*(x1115)))+(((x1104)*(x1107)))+(((x1101)*(x1106)))); | |
evalcond[5]=((((sj6)*(sj7)*(x1111)))+(((IkReal(-1.00000000000000))*(x1100)*(x1119)))+(x1120)+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x1100)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x1100)))+(((cj7)*(x1099)))); | |
evalcond[6]=((((x1109)*(x1113)))+(((IkReal(-1.00000000000000))*(sj6)*(x1108)*(x1111)))+(((IkReal(-1.00000000000000))*(cj7)*(x1103)*(x1116)))+(((cj7)*(x1117)))+(((IkReal(-1.00000000000000))*(x1100)*(x1102)))+(((sj7)*(x1099)))); | |
evalcond[7]=((((IkReal(-1.00000000000000))*(x1099)*(x1112)))+(((IkReal(-1.00000000000000))*(pz)*(x1105)))+(((IkReal(-0.302000000000000))*(cj8)))+(((x1102)*(x1104)))+(((IkReal(-0.0686246300000000))*(sj8)))+(((cj6)*(x1098)*(x1116)))+(((py)*(x1109)))+(((cj6)*(cj7)*(px)))+(((sj6)*(x1098)*(x1111)))+(((IkReal(-1.00000000000000))*(sj6)*(x1098)*(x1113)))+(((IkReal(-1.00000000000000))*(x1098)*(x1117)))); | |
evalcond[8]=((IkReal(0.270000000000000))+(((cj6)*(r00)*(sj7)*(x1104)))+(((cj11)*(r20)*(x1098)))+(((IkReal(-1.00000000000000))*(pz)*(x1108)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x1105)))+(((IkReal(-1.00000000000000))*(x1106)*(x1118)))+(((x1104)*(x1119)))+(((IkReal(0.0686246300000000))*(cj8)))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x1103)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x1106)))+(((IkReal(-1.00000000000000))*(x1098)*(x1099)))+(((IkReal(-0.302000000000000))*(sj8)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst5; | |
gconst5=IKsign((((cj8)*(cj8))+((sj8)*(sj8)))); | |
dummyeval[0]=(((cj8)*(cj8))+((sj8)*(sj8))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst6; | |
gconst6=IKsign(((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8)))))); | |
dummyeval[0]=((((IkReal(-1.00000000000000))*((sj8)*(sj8))))+(((IkReal(-1.00000000000000))*((cj8)*(cj8))))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
continue; | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1121=((IkReal(1.00000000000000))*(cj8)); | |
IkReal x1122=((cj6)*(sj7)); | |
IkReal x1123=((cj8)*(sj11)); | |
IkReal x1124=((cj7)*(r20)); | |
IkReal x1125=((sj6)*(sj7)); | |
IkReal x1126=((sj11)*(sj8)); | |
IkReal x1127=((cj7)*(r22)); | |
IkReal x1128=((cj11)*(sj8)); | |
IkReal x1129=((cj11)*(cj8)); | |
IkReal x1130=((cj11)*(cj7)*(r21)); | |
if( IKabs(((gconst6)*(((((IkReal(-1.00000000000000))*(r12)*(x1121)*(x1125)))+(((cj7)*(r21)*(x1128)))+(((IkReal(-1.00000000000000))*(x1121)*(x1127)))+(((r00)*(x1122)*(x1126)))+(((x1124)*(x1126)))+(((IkReal(-1.00000000000000))*(r02)*(x1121)*(x1122)))+(((r11)*(x1125)*(x1128)))+(((r01)*(x1122)*(x1128)))+(((r10)*(x1125)*(x1126))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst6)*(((((r10)*(x1123)*(x1125)))+(((r01)*(x1122)*(x1129)))+(((r12)*(sj8)*(x1125)))+(((sj8)*(x1127)))+(((r02)*(sj8)*(x1122)))+(((x1123)*(x1124)))+(((r00)*(x1122)*(x1123)))+(((cj7)*(r21)*(x1129)))+(((r11)*(x1125)*(x1129))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst6)*(((((IkReal(-1.00000000000000))*(r12)*(x1121)*(x1125)))+(((cj7)*(r21)*(x1128)))+(((IkReal(-1.00000000000000))*(x1121)*(x1127)))+(((r00)*(x1122)*(x1126)))+(((x1124)*(x1126)))+(((IkReal(-1.00000000000000))*(r02)*(x1121)*(x1122)))+(((r11)*(x1125)*(x1128)))+(((r01)*(x1122)*(x1128)))+(((r10)*(x1125)*(x1126)))))), ((gconst6)*(((((r10)*(x1123)*(x1125)))+(((r01)*(x1122)*(x1129)))+(((r12)*(sj8)*(x1125)))+(((sj8)*(x1127)))+(((r02)*(sj8)*(x1122)))+(((x1123)*(x1124)))+(((r00)*(x1122)*(x1123)))+(((cj7)*(r21)*(x1129)))+(((r11)*(x1125)*(x1129))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x1131=IKsin(j10); | |
IkReal x1132=IKcos(j10); | |
IkReal x1133=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1134=((cj6)*(r02)); | |
IkReal x1135=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1136=((r20)*(sj11)); | |
IkReal x1137=((cj11)*(r21)); | |
IkReal x1138=((r12)*(sj6)); | |
IkReal x1139=((cj8)*(x1131)); | |
IkReal x1140=((r10)*(sj11)*(sj6)); | |
IkReal x1141=((IkReal(1.00000000000000))*(x1132)); | |
IkReal x1142=((cj11)*(cj6)*(r01)); | |
IkReal x1143=((sj8)*(x1131)); | |
IkReal x1144=((cj11)*(r11)*(sj6)); | |
IkReal x1145=((cj6)*(r00)*(sj11)); | |
IkReal x1146=((sj8)*(x1141)); | |
evalcond[0]=((((cj7)*(x1134)))+(((IkReal(-1.00000000000000))*(cj8)*(x1141)))+(((IkReal(-1.00000000000000))*(r22)*(x1135)))+(((cj7)*(x1138)))+(((IkReal(-1.00000000000000))*(x1143)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1134)*(x1135)))+(((IkReal(-1.00000000000000))*(r22)*(x1133)))+(x1139)+(((IkReal(-1.00000000000000))*(x1135)*(x1138)))+(((IkReal(-1.00000000000000))*(x1146)))); | |
evalcond[2]=((((cj8)*(x1132)))+(((sj7)*(x1145)))+(x1143)+(((sj7)*(x1144)))+(((sj7)*(x1142)))+(((cj7)*(x1136)))+(((cj7)*(x1137)))+(((sj7)*(x1140)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1133)*(x1142)))+(((IkReal(-1.00000000000000))*(x1133)*(x1140)))+(((sj7)*(x1136)))+(x1139)+(((sj7)*(x1137)))+(((IkReal(-1.00000000000000))*(x1133)*(x1145)))+(((IkReal(-1.00000000000000))*(x1133)*(x1144)))+(((IkReal(-1.00000000000000))*(x1146)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1147=((cj6)*(r02)); | |
IkReal x1148=((cj7)*(cj8)); | |
IkReal x1149=((r12)*(sj6)); | |
IkReal x1150=((cj8)*(sj7)); | |
IkReal x1151=((cj7)*(sj8)); | |
IkReal x1152=((cj7)*(x1149)); | |
IkReal x1153=((IkReal(1.00000000000000))*(r22)*(sj7)); | |
IkReal x1154=((IkReal(1.00000000000000))*(sj7)*(sj8)); | |
if( IKabs(((gconst5)*(((((x1147)*(x1151)))+(((r22)*(x1148)))+(((x1149)*(x1151)))+(((IkReal(-1.00000000000000))*(sj8)*(x1153)))+(((x1149)*(x1150)))+(((x1147)*(x1150))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst5)*(((((x1147)*(x1148)))+(((x1148)*(x1149)))+(((IkReal(-1.00000000000000))*(r22)*(x1151)))+(((IkReal(-1.00000000000000))*(x1149)*(x1154)))+(((IkReal(-1.00000000000000))*(r22)*(x1150)))+(((IkReal(-1.00000000000000))*(x1147)*(x1154))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst5)*(((((x1147)*(x1151)))+(((r22)*(x1148)))+(((x1149)*(x1151)))+(((IkReal(-1.00000000000000))*(sj8)*(x1153)))+(((x1149)*(x1150)))+(((x1147)*(x1150)))))), ((gconst5)*(((((x1147)*(x1148)))+(((x1148)*(x1149)))+(((IkReal(-1.00000000000000))*(r22)*(x1151)))+(((IkReal(-1.00000000000000))*(x1149)*(x1154)))+(((IkReal(-1.00000000000000))*(r22)*(x1150)))+(((IkReal(-1.00000000000000))*(x1147)*(x1154))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x1155=IKsin(j10); | |
IkReal x1156=IKcos(j10); | |
IkReal x1157=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1158=((cj6)*(r02)); | |
IkReal x1159=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1160=((r20)*(sj11)); | |
IkReal x1161=((cj11)*(r21)); | |
IkReal x1162=((r12)*(sj6)); | |
IkReal x1163=((cj8)*(x1155)); | |
IkReal x1164=((r10)*(sj11)*(sj6)); | |
IkReal x1165=((IkReal(1.00000000000000))*(x1156)); | |
IkReal x1166=((cj11)*(cj6)*(r01)); | |
IkReal x1167=((sj8)*(x1155)); | |
IkReal x1168=((cj11)*(r11)*(sj6)); | |
IkReal x1169=((cj6)*(r00)*(sj11)); | |
IkReal x1170=((sj8)*(x1165)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(r22)*(x1159)))+(((IkReal(-1.00000000000000))*(x1167)))+(((cj7)*(x1162)))+(((IkReal(-1.00000000000000))*(cj8)*(x1165)))+(((cj7)*(x1158)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r22)*(x1157)))+(x1163)+(((IkReal(-1.00000000000000))*(x1170)))+(((IkReal(-1.00000000000000))*(x1159)*(x1162)))+(((IkReal(-1.00000000000000))*(x1158)*(x1159)))); | |
evalcond[2]=((((cj7)*(x1161)))+(((cj7)*(x1160)))+(x1167)+(((sj7)*(x1166)))+(((cj8)*(x1156)))+(((sj7)*(x1168)))+(((sj7)*(x1169)))+(((sj7)*(x1164)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1157)*(x1169)))+(((IkReal(-1.00000000000000))*(x1157)*(x1168)))+(x1163)+(((IkReal(-1.00000000000000))*(x1170)))+(((IkReal(-1.00000000000000))*(x1157)*(x1164)))+(((sj7)*(x1160)))+(((sj7)*(x1161)))+(((IkReal(-1.00000000000000))*(x1157)*(x1166)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1171=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1172=((cj7)*(r21)); | |
IkReal x1173=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1174=((cj7)*(r20)); | |
IkReal x1175=((cj6)*(sj7)); | |
IkReal x1176=((r01)*(sj6)); | |
IkReal x1177=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1178=((cj6)*(r10)); | |
IkReal x1179=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1180=((cj7)*(sj6)); | |
IkReal x1181=((r00)*(sj6)); | |
IkReal x1182=((r11)*(sj11)); | |
IkReal x1183=((IkReal(1.00000000000000))*(py)); | |
IkReal x1184=((sj6)*(sj7)); | |
IkReal x1185=((r21)*(sj7)); | |
IkReal x1186=((cj6)*(cj7)); | |
IkReal x1187=((r01)*(x1175)); | |
IkReal x1188=((cj11)*(r20)*(sj7)); | |
IkReal x1189=((r11)*(x1184)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.57079632679490))+(j8)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((cj11)*(x1181)))+(((cj6)*(x1182)))+(((IkReal(-1.00000000000000))*(sj11)*(x1176)))+(cj9)+(((IkReal(-1.00000000000000))*(x1173)*(x1178)))); | |
evalcond[2]=((IkReal(-0.0100933000000000))+(((IkReal(-0.00151567000000000))*(sj9)))+(((IkReal(-0.0616850000000000))*(cj9)))+(((IkReal(-1.00000000000000))*(cj6)*(r11)*(x1171)))+(((x1177)*(x1178)))+(((px)*(sj6)))+(((x1171)*(x1176)))+(((IkReal(-1.00000000000000))*(cj6)*(x1183)))+(((IkReal(-1.00000000000000))*(x1177)*(x1181)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r00)*(x1173)*(x1175)))+(((sj11)*(x1172)))+(((IkReal(-1.00000000000000))*(r10)*(x1173)*(x1184)))+(((x1182)*(x1184)))+(((sj11)*(x1187)))+(((IkReal(-1.00000000000000))*(x1173)*(x1174)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj11)*(x1179)))+(((IkReal(-1.00000000000000))*(r20)*(sj7)*(x1173)))+(((IkReal(-1.00000000000000))*(sj9)))+(((cj11)*(r00)*(x1186)))+(((sj11)*(x1185)))+(((IkReal(-1.00000000000000))*(sj6)*(x1179)*(x1182)))+(((cj11)*(r10)*(x1180)))); | |
evalcond[5]=((IkReal(-0.0701403000000000))+(((r01)*(x1171)*(x1186)))+(((py)*(x1180)))+(((IkReal(-1.00000000000000))*(pz)*(sj7)))+(((r11)*(x1171)*(x1180)))+(((IkReal(0.0616850000000000))*(sj9)))+(((r20)*(sj7)*(x1177)))+(((IkReal(-1.00000000000000))*(r10)*(x1177)*(x1180)))+(((IkReal(-1.00000000000000))*(x1171)*(x1185)))+(((IkReal(-1.00000000000000))*(r00)*(x1177)*(x1186)))+(((px)*(x1186)))+(((IkReal(-0.00151567000000000))*(cj9)))); | |
evalcond[6]=((IkReal(-0.0320000000000000))+(((IkReal(-1.00000000000000))*(x1183)*(x1184)))+(((x1174)*(x1177)))+(((IkReal(-1.00000000000000))*(x1171)*(x1172)))+(((IkReal(-1.00000000000000))*(x1171)*(x1189)))+(((IkReal(-1.00000000000000))*(x1171)*(x1187)))+(((r10)*(x1177)*(x1184)))+(((r00)*(x1175)*(x1177)))+(((IkReal(-1.00000000000000))*(pz)*(x1179)))+(((IkReal(-1.00000000000000))*(px)*(x1175)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst7; | |
gconst7=IKsign(sj9); | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[9]; | |
IkReal x1190=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x1191=((r21)*(sj11)); | |
IkReal x1192=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1193=((r01)*(sj6)); | |
IkReal x1194=((r20)*(sj7)); | |
IkReal x1195=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1196=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1197=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1198=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1199=((cj6)*(r10)); | |
IkReal x1200=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1201=((cj7)*(sj6)); | |
IkReal x1202=((r00)*(sj6)); | |
IkReal x1203=((r11)*(sj11)); | |
IkReal x1204=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x1205=((cj11)*(r10)); | |
IkReal x1206=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1207=((cj6)*(r11)); | |
IkReal x1208=((r01)*(sj11)); | |
IkReal x1209=((cj11)*(cj6)*(r00)); | |
IkReal x1210=((r11)*(sj6)*(sj7)); | |
IkReal x1211=((r10)*(sj6)*(sj7)); | |
IkReal x1212=((cj6)*(sj7)*(x1208)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(3.14159265358979))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1195)))); | |
evalcond[2]=((IkReal(1.00000000000000))+(((IkReal(-1.00000000000000))*(x1192)*(x1199)))+(((cj11)*(x1202)))+(((IkReal(-1.00000000000000))*(x1193)*(x1206)))+(((cj6)*(x1203)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1202)*(x1206)))+(((cj11)*(x1207)))+(((IkReal(-1.00000000000000))*(x1192)*(x1193)))+(((sj11)*(x1199)))); | |
evalcond[4]=((IkReal(-0.0717783000000000))+(((x1196)*(x1199)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(x1198)*(x1207)))+(((IkReal(-1.00000000000000))*(x1196)*(x1202)))+(((IkReal(-1.00000000000000))*(py)*(x1195)))+(((x1193)*(x1198)))); | |
evalcond[5]=((((sj6)*(sj7)*(x1203)))+(((cj7)*(x1191)))+(((IkReal(-1.00000000000000))*(x1192)*(x1211)))+(x1212)+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x1192)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x1192)))); | |
evalcond[6]=((((x1201)*(x1205)))+(((sj7)*(x1191)))+(((IkReal(-1.00000000000000))*(x1192)*(x1194)))+(((IkReal(-1.00000000000000))*(cj7)*(x1195)*(x1208)))+(((IkReal(-1.00000000000000))*(sj6)*(x1200)*(x1203)))+(((cj7)*(x1209)))); | |
evalcond[7]=((IkReal(-0.0716559700000000))+(((sj6)*(x1190)*(x1203)))+(((IkReal(-1.00000000000000))*(x1191)*(x1204)))+(((cj6)*(x1190)*(x1208)))+(((cj6)*(cj7)*(px)))+(((IkReal(-1.00000000000000))*(sj6)*(x1190)*(x1205)))+(((IkReal(-1.00000000000000))*(pz)*(x1197)))+(((IkReal(-1.00000000000000))*(x1190)*(x1209)))+(((py)*(x1201)))+(((x1194)*(x1196)))); | |
evalcond[8]=((IkReal(-0.0320000000000000))+(((IkReal(-1.00000000000000))*(x1190)*(x1191)))+(((cj6)*(r00)*(sj7)*(x1196)))+(((IkReal(-1.00000000000000))*(x1198)*(x1210)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x1198)))+(((IkReal(-1.00000000000000))*(pz)*(x1200)))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x1195)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x1197)))+(((cj11)*(r20)*(x1190)))+(((x1196)*(x1211)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1213=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1214=((cj6)*(r02)); | |
IkReal x1215=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1216=((r12)*(sj6)); | |
if( IKabs(((((IkReal(-1.00000000000000))*(x1214)*(x1215)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x1215)*(x1216))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(x1213)*(x1214)))+(((IkReal(-1.00000000000000))*(x1213)*(x1216)))+(((IkReal(-1.00000000000000))*(r22)*(x1215))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IkReal(-1.00000000000000))*(x1214)*(x1215)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x1215)*(x1216)))))+IKsqr(((((IkReal(-1.00000000000000))*(x1213)*(x1214)))+(((IkReal(-1.00000000000000))*(x1213)*(x1216)))+(((IkReal(-1.00000000000000))*(r22)*(x1215)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((IkReal(-1.00000000000000))*(x1214)*(x1215)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x1215)*(x1216)))), ((((IkReal(-1.00000000000000))*(x1213)*(x1214)))+(((IkReal(-1.00000000000000))*(x1213)*(x1216)))+(((IkReal(-1.00000000000000))*(r22)*(x1215))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x1217=IKsin(j10); | |
IkReal x1218=IKcos(j10); | |
IkReal x1219=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1220=((cj7)*(sj11)); | |
IkReal x1221=((r10)*(sj6)); | |
IkReal x1222=((cj11)*(r21)); | |
IkReal x1223=((sj11)*(sj7)); | |
IkReal x1224=((cj6)*(r01)); | |
IkReal x1225=((r11)*(sj6)); | |
IkReal x1226=((cj6)*(r02)); | |
IkReal x1227=((r12)*(sj6)); | |
IkReal x1228=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1229=((cj11)*(sj7)); | |
IkReal x1230=((cj6)*(r00)); | |
IkReal x1231=((IkReal(1.00000000000000))*(cj11)*(cj7)); | |
evalcond[0]=((((cj7)*(x1226)))+(((cj7)*(x1227)))+(((IkReal(-1.00000000000000))*(sj7)*(x1219)))+(x1217)); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1227)*(x1228)))+(((IkReal(-1.00000000000000))*(x1226)*(x1228)))+(((IkReal(-1.00000000000000))*(x1218)))+(((IkReal(-1.00000000000000))*(cj7)*(x1219)))); | |
evalcond[2]=((((x1224)*(x1229)))+(((x1223)*(x1230)))+(((r20)*(x1220)))+(((cj7)*(x1222)))+(((x1221)*(x1223)))+(x1217)+(((x1225)*(x1229)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1220)*(x1221)))+(((IkReal(-1.00000000000000))*(x1224)*(x1231)))+(((r20)*(x1223)))+(((IkReal(-1.00000000000000))*(x1220)*(x1230)))+(((IkReal(-1.00000000000000))*(x1225)*(x1231)))+(((sj7)*(x1222)))+(x1218)); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1232=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x1233=((r21)*(sj11)); | |
IkReal x1234=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1235=((r01)*(sj6)); | |
IkReal x1236=((r20)*(sj7)); | |
IkReal x1237=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1238=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1239=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1240=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1241=((cj6)*(r10)); | |
IkReal x1242=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1243=((cj7)*(sj6)); | |
IkReal x1244=((r00)*(sj6)); | |
IkReal x1245=((r11)*(sj11)); | |
IkReal x1246=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x1247=((cj11)*(r10)); | |
IkReal x1248=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1249=((cj6)*(r11)); | |
IkReal x1250=((r01)*(sj11)); | |
IkReal x1251=((cj11)*(cj6)*(r00)); | |
IkReal x1252=((r11)*(sj6)*(sj7)); | |
IkReal x1253=((r10)*(sj6)*(sj7)); | |
IkReal x1254=((cj6)*(sj7)*(x1250)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(j9, IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1237)))); | |
evalcond[2]=((IkReal(-1.00000000000000))+(((cj6)*(x1245)))+(((cj11)*(x1244)))+(((IkReal(-1.00000000000000))*(x1235)*(x1248)))+(((IkReal(-1.00000000000000))*(x1234)*(x1241)))); | |
evalcond[3]=((((cj11)*(x1249)))+(((IkReal(-1.00000000000000))*(x1244)*(x1248)))+(((sj11)*(x1241)))+(((IkReal(-1.00000000000000))*(x1234)*(x1235)))); | |
evalcond[4]=((IkReal(0.0515917000000000))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(x1240)*(x1249)))+(((IkReal(-1.00000000000000))*(x1238)*(x1244)))+(((x1235)*(x1240)))+(((IkReal(-1.00000000000000))*(py)*(x1237)))+(((x1238)*(x1241)))); | |
evalcond[5]=((((sj6)*(sj7)*(x1245)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x1234)))+(x1254)+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x1234)))+(((cj7)*(x1233)))+(((IkReal(-1.00000000000000))*(x1234)*(x1253)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(cj7)*(x1237)*(x1250)))+(((x1243)*(x1247)))+(((cj7)*(x1251)))+(((IkReal(-1.00000000000000))*(sj6)*(x1242)*(x1245)))+(((sj7)*(x1233)))+(((IkReal(-1.00000000000000))*(x1234)*(x1236)))); | |
evalcond[7]=((IkReal(-0.0686246300000000))+(((IkReal(-1.00000000000000))*(sj6)*(x1232)*(x1247)))+(((IkReal(-1.00000000000000))*(x1232)*(x1251)))+(((IkReal(-1.00000000000000))*(pz)*(x1239)))+(((sj6)*(x1232)*(x1245)))+(((cj6)*(x1232)*(x1250)))+(((cj6)*(cj7)*(px)))+(((x1236)*(x1238)))+(((IkReal(-1.00000000000000))*(x1233)*(x1246)))+(((py)*(x1243)))); | |
evalcond[8]=((IkReal(-0.0320000000000000))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x1237)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x1239)))+(((x1238)*(x1253)))+(((IkReal(-1.00000000000000))*(pz)*(x1242)))+(((IkReal(-1.00000000000000))*(x1232)*(x1233)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x1240)))+(((cj11)*(r20)*(x1232)))+(((cj6)*(r00)*(sj7)*(x1238)))+(((IkReal(-1.00000000000000))*(x1240)*(x1252)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1255=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1256=((cj6)*(r02)); | |
IkReal x1257=((r12)*(sj6)); | |
IkReal x1258=((IkReal(1.00000000000000))*(sj7)); | |
if( IKabs(((((cj7)*(x1257)))+(((cj7)*(x1256)))+(((IkReal(-1.00000000000000))*(sj7)*(x1255))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(x1257)*(x1258)))+(((IkReal(-1.00000000000000))*(cj7)*(x1255)))+(((IkReal(-1.00000000000000))*(x1256)*(x1258))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((cj7)*(x1257)))+(((cj7)*(x1256)))+(((IkReal(-1.00000000000000))*(sj7)*(x1255)))))+IKsqr(((((IkReal(-1.00000000000000))*(x1257)*(x1258)))+(((IkReal(-1.00000000000000))*(cj7)*(x1255)))+(((IkReal(-1.00000000000000))*(x1256)*(x1258)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((cj7)*(x1257)))+(((cj7)*(x1256)))+(((IkReal(-1.00000000000000))*(sj7)*(x1255)))), ((((IkReal(-1.00000000000000))*(x1257)*(x1258)))+(((IkReal(-1.00000000000000))*(cj7)*(x1255)))+(((IkReal(-1.00000000000000))*(x1256)*(x1258))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x1259=IKsin(j10); | |
IkReal x1260=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1261=((cj7)*(sj11)); | |
IkReal x1262=((r10)*(sj6)); | |
IkReal x1263=((cj11)*(r21)); | |
IkReal x1264=((sj11)*(sj7)); | |
IkReal x1265=((cj11)*(cj7)); | |
IkReal x1266=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1267=((r11)*(sj6)); | |
IkReal x1268=((r12)*(sj6)); | |
IkReal x1269=((cj11)*(sj7)); | |
IkReal x1270=((IkReal(1.00000000000000))*(IKcos(j10))); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(r22)*(x1266)))+(((cj6)*(cj7)*(r02)))+(((cj7)*(x1268)))+(((IkReal(-1.00000000000000))*(x1259)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1260)))+(((IkReal(-1.00000000000000))*(x1270)))+(((IkReal(-1.00000000000000))*(cj7)*(r22)))+(((IkReal(-1.00000000000000))*(x1266)*(x1268)))); | |
evalcond[2]=((((r20)*(x1261)))+(((cj6)*(r00)*(x1264)))+(((x1262)*(x1264)))+(x1259)+(((x1267)*(x1269)))+(((cj6)*(r01)*(x1269)))+(((cj7)*(x1263)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r00)*(x1260)*(x1261)))+(((IkReal(-1.00000000000000))*(x1261)*(x1262)))+(((IkReal(-1.00000000000000))*(x1270)))+(((r20)*(x1264)))+(((sj7)*(x1263)))+(((IkReal(-1.00000000000000))*(x1265)*(x1267)))+(((IkReal(-1.00000000000000))*(r01)*(x1260)*(x1265)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1271=((IkReal(1.00000000000000))*(r02)); | |
if( IKabs(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(sj6)*(x1271))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(cj6)*(sj7)*(x1271)))+(((IkReal(-1.00000000000000))*(r12)*(sj6)*(sj7)))+(((IkReal(-1.00000000000000))*(cj7)*(r22))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(sj6)*(x1271)))))))+IKsqr(((((IkReal(-1.00000000000000))*(cj6)*(sj7)*(x1271)))+(((IkReal(-1.00000000000000))*(r12)*(sj6)*(sj7)))+(((IkReal(-1.00000000000000))*(cj7)*(r22)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(sj6)*(x1271)))))), ((((IkReal(-1.00000000000000))*(cj6)*(sj7)*(x1271)))+(((IkReal(-1.00000000000000))*(r12)*(sj6)*(sj7)))+(((IkReal(-1.00000000000000))*(cj7)*(r22))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1272=IKsin(j10); | |
IkReal x1273=IKcos(j10); | |
IkReal x1274=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x1275=((cj7)*(sj11)); | |
IkReal x1276=((cj11)*(r01)); | |
IkReal x1277=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1278=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1279=((cj11)*(r21)); | |
IkReal x1280=((r10)*(sj11)); | |
IkReal x1281=((sj6)*(sj7)); | |
IkReal x1282=((cj11)*(r11)); | |
IkReal x1283=((r00)*(sj11)); | |
IkReal x1284=((cj6)*(sj7)); | |
evalcond[0]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1278)))+(((sj9)*(x1272)))); | |
evalcond[1]=((((cj7)*(r12)*(sj6)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj9)*(x1272)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x1274)*(x1276)))+(((IkReal(-1.00000000000000))*(x1274)*(x1283)))+(((sj9)*(x1273)))+(((cj6)*(x1282)))+(((cj6)*(x1280)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r22)*(x1277)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1278)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x1274)))+(((IkReal(-1.00000000000000))*(x1273)))); | |
evalcond[4]=((((x1281)*(x1282)))+(((cj7)*(x1279)))+(x1272)+(((x1283)*(x1284)))+(((x1280)*(x1281)))+(((x1276)*(x1284)))+(((r20)*(x1275)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj6)*(x1276)*(x1277)))+(((cj9)*(x1273)))+(((IkReal(-1.00000000000000))*(r10)*(x1274)*(x1275)))+(((r20)*(sj11)*(sj7)))+(((IkReal(-1.00000000000000))*(cj7)*(x1274)*(x1282)))+(((sj7)*(x1279)))+(((IkReal(-1.00000000000000))*(r00)*(x1275)*(x1278)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1285=((IkReal(1.00000000000000))*(cj6)); | |
if( IKabs(((gconst7)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst7)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1285)))+(((r00)*(sj11)*(sj6)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1285))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst7)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))), ((gconst7)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1285)))+(((r00)*(sj11)*(sj6)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1285))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1286=IKsin(j10); | |
IkReal x1287=IKcos(j10); | |
IkReal x1288=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x1289=((cj7)*(sj11)); | |
IkReal x1290=((cj11)*(r01)); | |
IkReal x1291=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1292=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1293=((cj11)*(r21)); | |
IkReal x1294=((r10)*(sj11)); | |
IkReal x1295=((sj6)*(sj7)); | |
IkReal x1296=((cj11)*(r11)); | |
IkReal x1297=((r00)*(sj11)); | |
IkReal x1298=((cj6)*(sj7)); | |
evalcond[0]=((((r02)*(sj6)))+(((sj9)*(x1286)))+(((IkReal(-1.00000000000000))*(r12)*(x1292)))); | |
evalcond[1]=((((cj7)*(r12)*(sj6)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj9)*(x1286)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x1288)*(x1297)))+(((IkReal(-1.00000000000000))*(x1288)*(x1290)))+(((cj6)*(x1296)))+(((sj9)*(x1287)))+(((cj6)*(x1294)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1287)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1292)))+(((IkReal(-1.00000000000000))*(r22)*(x1291)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x1288)))); | |
evalcond[4]=((((r20)*(x1289)))+(((x1294)*(x1295)))+(((x1295)*(x1296)))+(((x1297)*(x1298)))+(((cj7)*(x1293)))+(x1286)+(((x1290)*(x1298)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj6)*(x1290)*(x1291)))+(((IkReal(-1.00000000000000))*(cj7)*(x1288)*(x1296)))+(((IkReal(-1.00000000000000))*(r10)*(x1288)*(x1289)))+(((cj9)*(x1287)))+(((IkReal(-1.00000000000000))*(r00)*(x1289)*(x1292)))+(((r20)*(sj11)*(sj7)))+(((sj7)*(x1293)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1299=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1300=((cj7)*(r21)); | |
IkReal x1301=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1302=((cj7)*(r20)); | |
IkReal x1303=((cj6)*(sj7)); | |
IkReal x1304=((r01)*(sj6)); | |
IkReal x1305=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1306=((cj6)*(r10)); | |
IkReal x1307=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1308=((cj7)*(sj6)); | |
IkReal x1309=((r00)*(sj6)); | |
IkReal x1310=((r11)*(sj11)); | |
IkReal x1311=((IkReal(1.00000000000000))*(py)); | |
IkReal x1312=((sj6)*(sj7)); | |
IkReal x1313=((r21)*(sj7)); | |
IkReal x1314=((cj6)*(cj7)); | |
IkReal x1315=((r01)*(x1303)); | |
IkReal x1316=((cj11)*(r20)*(sj7)); | |
IkReal x1317=((r11)*(x1312)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.71238898038469))+(j8)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1301)*(x1306)))+(((cj11)*(x1309)))+(cj9)+(((cj6)*(x1310)))+(((IkReal(-1.00000000000000))*(sj11)*(x1304)))); | |
evalcond[2]=((IkReal(-0.0100933000000000))+(((IkReal(-0.00151567000000000))*(sj9)))+(((IkReal(-0.0616850000000000))*(cj9)))+(((IkReal(-1.00000000000000))*(cj6)*(r11)*(x1299)))+(((x1305)*(x1306)))+(((x1299)*(x1304)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(cj6)*(x1311)))+(((IkReal(-1.00000000000000))*(x1305)*(x1309)))); | |
evalcond[3]=((((x1310)*(x1312)))+(((sj11)*(x1300)))+(((IkReal(-1.00000000000000))*(r10)*(x1301)*(x1312)))+(((IkReal(-1.00000000000000))*(r00)*(x1301)*(x1303)))+(((sj11)*(x1315)))+(((IkReal(-1.00000000000000))*(x1301)*(x1302)))); | |
evalcond[4]=((((sj11)*(x1313)))+(((cj11)*(r10)*(x1308)))+(sj9)+(((IkReal(-1.00000000000000))*(r20)*(sj7)*(x1301)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj11)*(x1307)))+(((IkReal(-1.00000000000000))*(sj6)*(x1307)*(x1310)))+(((cj11)*(r00)*(x1314)))); | |
evalcond[5]=((IkReal(0.0701403000000000))+(((px)*(x1314)))+(((IkReal(-1.00000000000000))*(pz)*(sj7)))+(((IkReal(-1.00000000000000))*(r00)*(x1305)*(x1314)))+(((IkReal(0.00151567000000000))*(cj9)))+(((r11)*(x1299)*(x1308)))+(((r01)*(x1299)*(x1314)))+(((r20)*(sj7)*(x1305)))+(((py)*(x1308)))+(((IkReal(-0.0616850000000000))*(sj9)))+(((IkReal(-1.00000000000000))*(r10)*(x1305)*(x1308)))+(((IkReal(-1.00000000000000))*(x1299)*(x1313)))); | |
evalcond[6]=((IkReal(0.572000000000000))+(((IkReal(-1.00000000000000))*(x1311)*(x1312)))+(((IkReal(-1.00000000000000))*(pz)*(x1307)))+(((r10)*(x1305)*(x1312)))+(((IkReal(-1.00000000000000))*(x1299)*(x1300)))+(((r00)*(x1303)*(x1305)))+(((IkReal(-1.00000000000000))*(px)*(x1303)))+(((x1302)*(x1305)))+(((IkReal(-1.00000000000000))*(x1299)*(x1315)))+(((IkReal(-1.00000000000000))*(x1299)*(x1317)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst8; | |
gconst8=IKsign(sj9); | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
dummyeval[0]=sj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[9]; | |
IkReal x1318=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x1319=((r21)*(sj11)); | |
IkReal x1320=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1321=((r01)*(sj6)); | |
IkReal x1322=((r20)*(sj7)); | |
IkReal x1323=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1324=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1325=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1326=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1327=((cj6)*(r10)); | |
IkReal x1328=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1329=((cj7)*(sj6)); | |
IkReal x1330=((r00)*(sj6)); | |
IkReal x1331=((r11)*(sj11)); | |
IkReal x1332=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x1333=((cj11)*(r10)); | |
IkReal x1334=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1335=((cj6)*(r11)); | |
IkReal x1336=((r01)*(sj11)); | |
IkReal x1337=((cj11)*(cj6)*(r00)); | |
IkReal x1338=((r11)*(sj6)*(sj7)); | |
IkReal x1339=((r10)*(sj6)*(sj7)); | |
IkReal x1340=((cj6)*(sj7)*(x1336)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(3.14159265358979))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r12)*(x1323)))+(((r02)*(sj6)))); | |
evalcond[2]=((IkReal(1.00000000000000))+(((cj11)*(x1330)))+(((IkReal(-1.00000000000000))*(x1321)*(x1334)))+(((IkReal(-1.00000000000000))*(x1320)*(x1327)))+(((cj6)*(x1331)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1330)*(x1334)))+(((sj11)*(x1327)))+(((cj11)*(x1335)))+(((IkReal(-1.00000000000000))*(x1320)*(x1321)))); | |
evalcond[4]=((IkReal(-0.0717783000000000))+(((IkReal(-1.00000000000000))*(x1326)*(x1335)))+(((IkReal(-1.00000000000000))*(x1324)*(x1330)))+(((px)*(sj6)))+(((x1321)*(x1326)))+(((IkReal(-1.00000000000000))*(py)*(x1323)))+(((x1324)*(x1327)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(x1320)*(x1339)))+(((cj7)*(x1319)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x1320)))+(((sj6)*(sj7)*(x1331)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x1320)))+(x1340)); | |
evalcond[6]=((((x1329)*(x1333)))+(((cj7)*(x1337)))+(((IkReal(-1.00000000000000))*(cj7)*(x1323)*(x1336)))+(((sj7)*(x1319)))+(((IkReal(-1.00000000000000))*(x1320)*(x1322)))+(((IkReal(-1.00000000000000))*(sj6)*(x1328)*(x1331)))); | |
evalcond[7]=((IkReal(0.0716559700000000))+(((cj6)*(x1318)*(x1336)))+(((cj6)*(cj7)*(px)))+(((py)*(x1329)))+(((IkReal(-1.00000000000000))*(x1318)*(x1337)))+(((IkReal(-1.00000000000000))*(pz)*(x1325)))+(((IkReal(-1.00000000000000))*(sj6)*(x1318)*(x1333)))+(((sj6)*(x1318)*(x1331)))+(((x1322)*(x1324)))+(((IkReal(-1.00000000000000))*(x1319)*(x1332)))); | |
evalcond[8]=((IkReal(0.572000000000000))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x1325)))+(((x1324)*(x1339)))+(((cj6)*(r00)*(sj7)*(x1324)))+(((IkReal(-1.00000000000000))*(pz)*(x1328)))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x1323)))+(((IkReal(-1.00000000000000))*(x1326)*(x1338)))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x1326)))+(((IkReal(-1.00000000000000))*(x1318)*(x1319)))+(((cj11)*(r20)*(x1318)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1341=((r12)*(sj6)); | |
IkReal x1342=((cj6)*(r02)); | |
if( IKabs(((((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj7)*(x1342)))+(((cj7)*(x1341))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((cj7)*(r22)))+(((sj7)*(x1341)))+(((sj7)*(x1342))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj7)*(x1342)))+(((cj7)*(x1341)))))+IKsqr(((((cj7)*(r22)))+(((sj7)*(x1341)))+(((sj7)*(x1342)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj7)*(x1342)))+(((cj7)*(x1341)))), ((((cj7)*(r22)))+(((sj7)*(x1341)))+(((sj7)*(x1342))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x1343=IKcos(j10); | |
IkReal x1344=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1345=((cj7)*(sj11)); | |
IkReal x1346=((r10)*(sj6)); | |
IkReal x1347=((cj11)*(r21)); | |
IkReal x1348=((sj11)*(sj7)); | |
IkReal x1349=((cj11)*(cj7)); | |
IkReal x1350=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1351=((r11)*(sj6)); | |
IkReal x1352=((r12)*(sj6)); | |
IkReal x1353=((cj11)*(sj7)); | |
IkReal x1354=((IkReal(1.00000000000000))*(IKsin(j10))); | |
evalcond[0]=((((cj6)*(cj7)*(r02)))+(((cj7)*(x1352)))+(((IkReal(-1.00000000000000))*(x1354)))+(((IkReal(-1.00000000000000))*(r22)*(x1350)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1350)*(x1352)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1344)))+(x1343)+(((IkReal(-1.00000000000000))*(cj7)*(r22)))); | |
evalcond[2]=((((r20)*(x1345)))+(((cj7)*(x1347)))+(((cj6)*(r01)*(x1353)))+(((cj6)*(r00)*(x1348)))+(((x1346)*(x1348)))+(((IkReal(-1.00000000000000))*(x1354)))+(((x1351)*(x1353)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1345)*(x1346)))+(((IkReal(-1.00000000000000))*(r00)*(x1344)*(x1345)))+(((r20)*(x1348)))+(((IkReal(-1.00000000000000))*(r01)*(x1344)*(x1349)))+(((IkReal(-1.00000000000000))*(x1343)))+(((sj7)*(x1347)))+(((IkReal(-1.00000000000000))*(x1349)*(x1351)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1355=((IkReal(0.0620002000000000))*(cj7)); | |
IkReal x1356=((r21)*(sj11)); | |
IkReal x1357=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1358=((r01)*(sj6)); | |
IkReal x1359=((r20)*(sj7)); | |
IkReal x1360=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1361=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1362=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1363=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1364=((cj6)*(r10)); | |
IkReal x1365=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1366=((cj7)*(sj6)); | |
IkReal x1367=((r00)*(sj6)); | |
IkReal x1368=((r11)*(sj11)); | |
IkReal x1369=((IkReal(0.0620002000000000))*(sj7)); | |
IkReal x1370=((cj11)*(r10)); | |
IkReal x1371=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1372=((cj6)*(r11)); | |
IkReal x1373=((r01)*(sj11)); | |
IkReal x1374=((cj11)*(cj6)*(r00)); | |
IkReal x1375=((r11)*(sj6)*(sj7)); | |
IkReal x1376=((r10)*(sj6)*(sj7)); | |
IkReal x1377=((cj6)*(sj7)*(x1373)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(j9, IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1360)))); | |
evalcond[2]=((IkReal(-1.00000000000000))+(((cj6)*(x1368)))+(((IkReal(-1.00000000000000))*(x1358)*(x1371)))+(((cj11)*(x1367)))+(((IkReal(-1.00000000000000))*(x1357)*(x1364)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1357)*(x1358)))+(((cj11)*(x1372)))+(((IkReal(-1.00000000000000))*(x1367)*(x1371)))+(((sj11)*(x1364)))); | |
evalcond[4]=((IkReal(0.0515917000000000))+(((IkReal(-1.00000000000000))*(x1361)*(x1367)))+(((x1361)*(x1364)))+(((IkReal(-1.00000000000000))*(py)*(x1360)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(x1363)*(x1372)))+(((x1358)*(x1363)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(x1357)*(x1376)))+(((sj6)*(sj7)*(x1368)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj7)*(x1357)))+(((cj7)*(x1356)))+(x1377)+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x1357)))); | |
evalcond[6]=((((x1366)*(x1370)))+(((IkReal(-1.00000000000000))*(sj6)*(x1365)*(x1368)))+(((cj7)*(x1374)))+(((sj7)*(x1356)))+(((IkReal(-1.00000000000000))*(x1357)*(x1359)))+(((IkReal(-1.00000000000000))*(cj7)*(x1360)*(x1373)))); | |
evalcond[7]=((IkReal(0.0686246300000000))+(((IkReal(-1.00000000000000))*(pz)*(x1362)))+(((py)*(x1366)))+(((cj6)*(cj7)*(px)))+(((x1359)*(x1361)))+(((IkReal(-1.00000000000000))*(sj6)*(x1355)*(x1370)))+(((cj6)*(x1355)*(x1373)))+(((IkReal(-1.00000000000000))*(x1355)*(x1374)))+(((IkReal(-1.00000000000000))*(x1356)*(x1369)))+(((sj6)*(x1355)*(x1368)))); | |
evalcond[8]=((IkReal(0.572000000000000))+(((IkReal(-1.00000000000000))*(cj6)*(r01)*(sj7)*(x1363)))+(((IkReal(-1.00000000000000))*(x1355)*(x1356)))+(((cj6)*(r00)*(sj7)*(x1361)))+(((cj11)*(r20)*(x1355)))+(((IkReal(-1.00000000000000))*(py)*(sj6)*(x1362)))+(((x1361)*(x1376)))+(((IkReal(-1.00000000000000))*(px)*(sj7)*(x1360)))+(((IkReal(-1.00000000000000))*(pz)*(x1365)))+(((IkReal(-1.00000000000000))*(x1363)*(x1375)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1378=((r12)*(sj6)); | |
IkReal x1379=((cj6)*(r02)); | |
IkReal x1380=((IkReal(1.00000000000000))*(cj7)); | |
if( IKabs(((((IkReal(-1.00000000000000))*(x1378)*(x1380)))+(((IkReal(-1.00000000000000))*(x1379)*(x1380)))+(((r22)*(sj7))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((sj7)*(x1378)))+(((cj7)*(r22)))+(((sj7)*(x1379))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IkReal(-1.00000000000000))*(x1378)*(x1380)))+(((IkReal(-1.00000000000000))*(x1379)*(x1380)))+(((r22)*(sj7)))))+IKsqr(((((sj7)*(x1378)))+(((cj7)*(r22)))+(((sj7)*(x1379)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((IkReal(-1.00000000000000))*(x1378)*(x1380)))+(((IkReal(-1.00000000000000))*(x1379)*(x1380)))+(((r22)*(sj7)))), ((((sj7)*(x1378)))+(((cj7)*(r22)))+(((sj7)*(x1379))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[4]; | |
IkReal x1381=IKsin(j10); | |
IkReal x1382=IKcos(j10); | |
IkReal x1383=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1384=((cj6)*(r00)); | |
IkReal x1385=((r10)*(sj6)); | |
IkReal x1386=((r20)*(sj11)); | |
IkReal x1387=((cj11)*(r21)); | |
IkReal x1388=((sj11)*(sj7)); | |
IkReal x1389=((cj6)*(r01)); | |
IkReal x1390=((r11)*(sj6)); | |
IkReal x1391=((cj6)*(r02)); | |
IkReal x1392=((r12)*(sj6)); | |
IkReal x1393=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1394=((cj11)*(sj7)); | |
IkReal x1395=((IkReal(1.00000000000000))*(cj7)*(sj11)); | |
IkReal x1396=((IkReal(1.00000000000000))*(cj11)*(cj7)); | |
evalcond[0]=((x1381)+(((cj7)*(x1392)))+(((cj7)*(x1391)))+(((IkReal(-1.00000000000000))*(sj7)*(x1383)))); | |
evalcond[1]=((x1382)+(((IkReal(-1.00000000000000))*(cj7)*(x1383)))+(((IkReal(-1.00000000000000))*(x1391)*(x1393)))+(((IkReal(-1.00000000000000))*(x1392)*(x1393)))); | |
evalcond[2]=((((x1389)*(x1394)))+(((x1384)*(x1388)))+(((IkReal(-1.00000000000000))*(x1381)))+(((x1390)*(x1394)))+(((x1385)*(x1388)))+(((cj7)*(x1387)))+(((cj7)*(x1386)))); | |
evalcond[3]=((x1382)+(((sj7)*(x1387)))+(((sj7)*(x1386)))+(((IkReal(-1.00000000000000))*(x1389)*(x1396)))+(((IkReal(-1.00000000000000))*(x1385)*(x1395)))+(((IkReal(-1.00000000000000))*(x1384)*(x1395)))+(((IkReal(-1.00000000000000))*(x1390)*(x1396)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
if( IKabs(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((cj7)*(r22)))+(((cj6)*(r02)*(sj7)))+(((r12)*(sj6)*(sj7))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))))+IKsqr(((((cj7)*(r22)))+(((cj6)*(r02)*(sj7)))+(((r12)*(sj6)*(sj7)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30))*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))), ((((cj7)*(r22)))+(((cj6)*(r02)*(sj7)))+(((r12)*(sj6)*(sj7))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1397=IKsin(j10); | |
IkReal x1398=IKcos(j10); | |
IkReal x1399=((IkReal(1.00000000000000))*(cj9)); | |
IkReal x1400=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x1401=((cj7)*(sj11)); | |
IkReal x1402=((cj11)*(r01)); | |
IkReal x1403=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1404=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1405=((cj11)*(r21)); | |
IkReal x1406=((r10)*(sj11)); | |
IkReal x1407=((sj6)*(sj7)); | |
IkReal x1408=((cj11)*(r11)); | |
IkReal x1409=((r00)*(sj11)); | |
IkReal x1410=((cj6)*(sj7)); | |
evalcond[0]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1404)))+(((sj9)*(x1397)))); | |
evalcond[1]=((((cj7)*(r12)*(sj6)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x1397)*(x1399)))); | |
evalcond[2]=((((cj6)*(x1408)))+(((cj6)*(x1406)))+(((IkReal(-1.00000000000000))*(x1400)*(x1402)))+(((sj9)*(x1398)))+(((IkReal(-1.00000000000000))*(x1400)*(x1409)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r12)*(sj7)*(x1400)))+(((IkReal(-1.00000000000000))*(r22)*(x1403)))+(x1398)+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1404)))); | |
evalcond[4]=((((r20)*(x1401)))+(((cj7)*(x1405)))+(((x1409)*(x1410)))+(((x1406)*(x1407)))+(((x1407)*(x1408)))+(((x1402)*(x1410)))+(((IkReal(-1.00000000000000))*(x1397)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj7)*(x1400)*(x1408)))+(((IkReal(-1.00000000000000))*(cj6)*(x1402)*(x1403)))+(((IkReal(-1.00000000000000))*(x1398)*(x1399)))+(((sj7)*(x1405)))+(((r20)*(sj11)*(sj7)))+(((IkReal(-1.00000000000000))*(r10)*(x1400)*(x1401)))+(((IkReal(-1.00000000000000))*(r00)*(x1401)*(x1404)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1411=((IkReal(1.00000000000000))*(cj6)); | |
if( IKabs(((gconst8)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst8)*(((((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1411)))+(((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1411)))+(((r00)*(sj11)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst8)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))), ((gconst8)*(((((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1411)))+(((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1411)))+(((r00)*(sj11)*(sj6))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1412=IKsin(j10); | |
IkReal x1413=IKcos(j10); | |
IkReal x1414=((IkReal(1.00000000000000))*(cj9)); | |
IkReal x1415=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x1416=((cj7)*(sj11)); | |
IkReal x1417=((cj11)*(r01)); | |
IkReal x1418=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1419=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1420=((cj11)*(r21)); | |
IkReal x1421=((r10)*(sj11)); | |
IkReal x1422=((sj6)*(sj7)); | |
IkReal x1423=((cj11)*(r11)); | |
IkReal x1424=((r00)*(sj11)); | |
IkReal x1425=((cj6)*(sj7)); | |
evalcond[0]=((((r02)*(sj6)))+(((sj9)*(x1412)))+(((IkReal(-1.00000000000000))*(r12)*(x1419)))); | |
evalcond[1]=((((cj7)*(r12)*(sj6)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x1412)*(x1414)))); | |
evalcond[2]=((((cj6)*(x1421)))+(((cj6)*(x1423)))+(((IkReal(-1.00000000000000))*(x1415)*(x1424)))+(((IkReal(-1.00000000000000))*(x1415)*(x1417)))+(((sj9)*(x1413)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1419)))+(x1413)+(((IkReal(-1.00000000000000))*(r22)*(x1418)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x1415)))); | |
evalcond[4]=((((cj7)*(x1420)))+(((x1424)*(x1425)))+(((x1422)*(x1423)))+(((x1421)*(x1422)))+(((r20)*(x1416)))+(((x1417)*(x1425)))+(((IkReal(-1.00000000000000))*(x1412)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj6)*(x1417)*(x1418)))+(((IkReal(-1.00000000000000))*(x1413)*(x1414)))+(((IkReal(-1.00000000000000))*(r10)*(x1415)*(x1416)))+(((IkReal(-1.00000000000000))*(r00)*(x1416)*(x1419)))+(((r20)*(sj11)*(sj7)))+(((IkReal(-1.00000000000000))*(cj7)*(x1415)*(x1423)))+(((sj7)*(x1420)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1426=((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30); | |
IkReal x1427=((cj9)*(sj8)); | |
IkReal x1428=((cj6)*(r12)); | |
IkReal x1429=((cj7)*(sj9)); | |
IkReal x1430=((IkReal(1.00000000000000))*(r02)*(sj6)); | |
if( IKabs(((x1426)*(((x1428)+(((IkReal(-1.00000000000000))*(x1430))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1426)*(((IKabs(cj8) != 0)?((IkReal)1/(cj8)):(IkReal)1.0e30))*(((((IkReal(-1.00000000000000))*(x1427)*(x1430)))+(((r12)*(sj6)*(x1429)))+(((x1427)*(x1428)))+(((cj6)*(r02)*(x1429)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)*(sj9))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x1426)*(((x1428)+(((IkReal(-1.00000000000000))*(x1430)))))))+IKsqr(((x1426)*(((IKabs(cj8) != 0)?((IkReal)1/(cj8)):(IkReal)1.0e30))*(((((IkReal(-1.00000000000000))*(x1427)*(x1430)))+(((r12)*(sj6)*(x1429)))+(((x1427)*(x1428)))+(((cj6)*(r02)*(x1429)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)*(sj9)))))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j10array[0]=IKatan2(((x1426)*(((x1428)+(((IkReal(-1.00000000000000))*(x1430)))))), ((x1426)*(((IKabs(cj8) != 0)?((IkReal)1/(cj8)):(IkReal)1.0e30))*(((((IkReal(-1.00000000000000))*(x1427)*(x1430)))+(((r12)*(sj6)*(x1429)))+(((x1427)*(x1428)))+(((cj6)*(r02)*(x1429)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)*(sj9))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1431=IKsin(j10); | |
IkReal x1432=IKcos(j10); | |
IkReal x1433=((cj9)*(sj8)); | |
IkReal x1434=((cj6)*(cj7)); | |
IkReal x1435=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1436=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1437=((r20)*(sj11)); | |
IkReal x1438=((cj11)*(r21)); | |
IkReal x1439=((cj6)*(sj11)); | |
IkReal x1440=((cj11)*(cj6)); | |
IkReal x1441=((r12)*(sj6)); | |
IkReal x1442=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1443=((cj8)*(x1431)); | |
IkReal x1444=((IkReal(1.00000000000000))*(cj11)*(r01)); | |
IkReal x1445=((r10)*(sj11)*(sj6)); | |
IkReal x1446=((cj11)*(r11)*(sj6)); | |
IkReal x1447=((IkReal(1.00000000000000))*(r00)*(sj11)); | |
IkReal x1448=((IkReal(1.00000000000000))*(cj8)*(x1432)); | |
evalcond[0]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1436)))+(((sj9)*(x1431)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r22)*(x1442)))+(((cj7)*(x1441)))+(((x1431)*(x1433)))+(((r02)*(x1434)))+(((IkReal(-1.00000000000000))*(x1448)))); | |
evalcond[2]=((((r10)*(x1439)))+(((r11)*(x1440)))+(((IkReal(-1.00000000000000))*(sj6)*(x1444)))+(((sj9)*(x1432)))+(((IkReal(-1.00000000000000))*(sj6)*(x1447)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(sj8)*(x1432)))+(((IkReal(-1.00000000000000))*(r22)*(x1435)))+(((IkReal(-1.00000000000000))*(cj9)*(x1443)))+(((IkReal(-1.00000000000000))*(x1441)*(x1442)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1436)))); | |
evalcond[4]=((((cj7)*(x1438)))+(((r01)*(sj7)*(x1440)))+(((r00)*(sj7)*(x1439)))+(((sj8)*(x1431)))+(((sj7)*(x1445)))+(((cj7)*(x1437)))+(((sj7)*(x1446)))+(((IkReal(-1.00000000000000))*(cj9)*(x1448)))); | |
evalcond[5]=((((x1432)*(x1433)))+(((IkReal(-1.00000000000000))*(x1434)*(x1447)))+(((IkReal(-1.00000000000000))*(x1435)*(x1445)))+(((IkReal(-1.00000000000000))*(x1435)*(x1446)))+(((sj7)*(x1438)))+(((sj7)*(x1437)))+(((IkReal(-1.00000000000000))*(x1434)*(x1444)))+(x1443)); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1449=((IkReal(1.00000000000000))*(cj6)); | |
if( IKabs(((gconst2)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst2)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1449)))+(((r00)*(sj11)*(sj6)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1449))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst2)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))), ((gconst2)*(((((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1449)))+(((r00)*(sj11)*(sj6)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1449))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1450=IKsin(j10); | |
IkReal x1451=IKcos(j10); | |
IkReal x1452=((cj9)*(sj8)); | |
IkReal x1453=((cj6)*(cj7)); | |
IkReal x1454=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1455=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1456=((r20)*(sj11)); | |
IkReal x1457=((cj11)*(r21)); | |
IkReal x1458=((cj6)*(sj11)); | |
IkReal x1459=((cj11)*(cj6)); | |
IkReal x1460=((r12)*(sj6)); | |
IkReal x1461=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1462=((cj8)*(x1450)); | |
IkReal x1463=((IkReal(1.00000000000000))*(cj11)*(r01)); | |
IkReal x1464=((r10)*(sj11)*(sj6)); | |
IkReal x1465=((cj11)*(r11)*(sj6)); | |
IkReal x1466=((IkReal(1.00000000000000))*(r00)*(sj11)); | |
IkReal x1467=((IkReal(1.00000000000000))*(cj8)*(x1451)); | |
evalcond[0]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1455)))+(((sj9)*(x1450)))); | |
evalcond[1]=((((x1450)*(x1452)))+(((cj7)*(x1460)))+(((IkReal(-1.00000000000000))*(x1467)))+(((r02)*(x1453)))+(((IkReal(-1.00000000000000))*(r22)*(x1461)))); | |
evalcond[2]=((((r10)*(x1458)))+(((sj9)*(x1451)))+(((r11)*(x1459)))+(((IkReal(-1.00000000000000))*(sj6)*(x1463)))+(((IkReal(-1.00000000000000))*(sj6)*(x1466)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1455)))+(((IkReal(-1.00000000000000))*(r22)*(x1454)))+(((IkReal(-1.00000000000000))*(sj8)*(x1451)))+(((IkReal(-1.00000000000000))*(x1460)*(x1461)))+(((IkReal(-1.00000000000000))*(cj9)*(x1462)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(cj9)*(x1467)))+(((sj7)*(x1465)))+(((sj7)*(x1464)))+(((cj7)*(x1456)))+(((cj7)*(x1457)))+(((sj8)*(x1450)))+(((r00)*(sj7)*(x1458)))+(((r01)*(sj7)*(x1459)))); | |
evalcond[5]=((((x1451)*(x1452)))+(((IkReal(-1.00000000000000))*(x1454)*(x1465)))+(x1462)+(((IkReal(-1.00000000000000))*(x1454)*(x1464)))+(((sj7)*(x1456)))+(((IkReal(-1.00000000000000))*(x1453)*(x1466)))+(((IkReal(-1.00000000000000))*(x1453)*(x1463)))+(((sj7)*(x1457)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j10array[1], cj10array[1], sj10array[1]; | |
bool j10valid[1]={false}; | |
_nj10 = 1; | |
IkReal x1468=((IkReal(1.00000000000000))*(cj6)); | |
if( IKabs(((gconst1)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst1)*(((((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1468)))+(((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1468)))+(((r00)*(sj11)*(sj6))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j10array[0]=IKatan2(((gconst1)*(((((cj6)*(r12)))+(((IkReal(-1.00000000000000))*(r02)*(sj6)))))), ((gconst1)*(((((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1468)))+(((cj11)*(r01)*(sj6)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1468)))+(((r00)*(sj11)*(sj6))))))); | |
sj10array[0]=IKsin(j10array[0]); | |
cj10array[0]=IKcos(j10array[0]); | |
if( j10array[0] > IKPI ) | |
{ | |
j10array[0]-=IK2PI; | |
} | |
else if( j10array[0] < -IKPI ) | |
{ j10array[0]+=IK2PI; | |
} | |
j10valid[0] = true; | |
for(int ij10 = 0; ij10 < 1; ++ij10) | |
{ | |
if( !j10valid[ij10] ) | |
{ | |
continue; | |
} | |
_ij10[0] = ij10; _ij10[1] = -1; | |
for(int iij10 = ij10+1; iij10 < 1; ++iij10) | |
{ | |
if( j10valid[iij10] && IKabs(cj10array[ij10]-cj10array[iij10]) < IKFAST_SOLUTION_THRESH && IKabs(sj10array[ij10]-sj10array[iij10]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j10valid[iij10]=false; _ij10[1] = iij10; break; | |
} | |
} | |
j10 = j10array[ij10]; cj10 = cj10array[ij10]; sj10 = sj10array[ij10]; | |
{ | |
IkReal evalcond[2]; | |
IkReal x1469=((IkReal(1.00000000000000))*(sj6)); | |
evalcond[0]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(cj6)*(r12)))+(((sj9)*(IKsin(j10))))); | |
evalcond[1]=((((cj11)*(cj6)*(r11)))+(((IkReal(-1.00000000000000))*(r00)*(sj11)*(x1469)))+(((cj6)*(r10)*(sj11)))+(((sj9)*(IKcos(j10))))+(((IkReal(-1.00000000000000))*(cj11)*(r01)*(x1469)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst9; | |
gconst9=IKsign((((cj10)*(cj10))+((((cj9)*(cj9))*((sj10)*(sj10)))))); | |
dummyeval[0]=(((cj10)*(cj10))+((((cj9)*(cj9))*((sj10)*(sj10))))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[2]; | |
IkReal x1470=(cj9)*(cj9); | |
dummyeval[0]=((((sj10)*(x1470)))+(((IkReal(-1.00000000000000))*(sj10)))); | |
dummyeval[1]=((((cj10)*(x1470)))+(((IkReal(-1.00000000000000))*(cj10)))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 || IKabs(dummyeval[1]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[2]; | |
dummyeval[0]=sj9; | |
dummyeval[1]=cj10; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 || IKabs(dummyeval[1]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[7]; | |
IkReal x1471=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1472=((r01)*(sj6)); | |
IkReal x1473=((cj6)*(sj7)); | |
IkReal x1474=((r01)*(sj11)); | |
IkReal x1475=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1476=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1477=((cj11)*(r10)); | |
IkReal x1478=((r11)*(sj11)); | |
IkReal x1479=((sj6)*(sj7)); | |
IkReal x1480=((r21)*(sj11)); | |
IkReal x1481=((r00)*(sj6)); | |
IkReal x1482=((cj7)*(sj6)); | |
IkReal x1483=((cj6)*(r10)); | |
IkReal x1484=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1485=((cj11)*(cj6)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(3.14159265358979))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1475)))); | |
evalcond[2]=((IkReal(1.00000000000000))+(((IkReal(-1.00000000000000))*(x1472)*(x1484)))+(((cj11)*(x1481)))+(((IkReal(-1.00000000000000))*(x1471)*(x1483)))+(((cj6)*(x1478)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1471)*(x1472)))+(((sj11)*(x1483)))+(((r11)*(x1485)))+(((IkReal(-1.00000000000000))*(x1481)*(x1484)))); | |
evalcond[4]=((IkReal(-0.0717783000000000))+(((IkReal(-0.0620002000000000))*(cj11)*(x1481)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(cj6)*(r11)*(x1476)))+(((IkReal(-1.00000000000000))*(py)*(x1475)))+(((x1472)*(x1476)))+(((IkReal(0.0620002000000000))*(cj6)*(x1477)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(r00)*(x1471)*(x1473)))+(((x1478)*(x1479)))+(((cj7)*(x1480)))+(((x1473)*(x1474)))+(((IkReal(-1.00000000000000))*(r10)*(x1471)*(x1479)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x1471)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(x1478)*(x1482)))+(((IkReal(-1.00000000000000))*(r20)*(sj7)*(x1471)))+(((cj7)*(r00)*(x1485)))+(((x1477)*(x1482)))+(((sj7)*(x1480)))+(((IkReal(-1.00000000000000))*(cj7)*(x1474)*(x1475)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst10; | |
gconst10=IKsign((((cj10)*(cj10))+((sj10)*(sj10)))); | |
dummyeval[0]=(((cj10)*(cj10))+((sj10)*(sj10))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst11; | |
gconst11=IKsign(((((IkReal(-1.00000000000000))*((sj10)*(sj10))))+(((IkReal(-1.00000000000000))*((cj10)*(cj10)))))); | |
dummyeval[0]=((((IkReal(-1.00000000000000))*((sj10)*(sj10))))+(((IkReal(-1.00000000000000))*((cj10)*(cj10))))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
continue; | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1486=((sj10)*(sj7)); | |
IkReal x1487=((cj11)*(r21)); | |
IkReal x1488=((cj6)*(r02)); | |
IkReal x1489=((cj7)*(sj10)); | |
IkReal x1490=((r12)*(sj6)); | |
IkReal x1491=((cj10)*(sj7)); | |
IkReal x1492=((r20)*(sj11)); | |
IkReal x1493=((IkReal(1.00000000000000))*(cj10)*(cj7)); | |
IkReal x1494=((cj11)*(r11)*(sj6)); | |
IkReal x1495=((r10)*(sj11)*(sj6)); | |
IkReal x1496=((cj11)*(cj6)*(r01)); | |
IkReal x1497=((cj6)*(r00)*(sj11)); | |
if( IKabs(((gconst11)*(((((IkReal(-1.00000000000000))*(r22)*(x1486)))+(((IkReal(-1.00000000000000))*(x1493)*(x1495)))+(((x1489)*(x1490)))+(((IkReal(-1.00000000000000))*(x1493)*(x1494)))+(((x1491)*(x1492)))+(((x1488)*(x1489)))+(((IkReal(-1.00000000000000))*(x1493)*(x1496)))+(((x1487)*(x1491)))+(((IkReal(-1.00000000000000))*(x1493)*(x1497))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst11)*(((((r22)*(x1491)))+(((IkReal(-1.00000000000000))*(x1489)*(x1496)))+(((IkReal(-1.00000000000000))*(x1489)*(x1495)))+(((IkReal(-1.00000000000000))*(x1489)*(x1494)))+(((IkReal(-1.00000000000000))*(x1489)*(x1497)))+(((x1486)*(x1492)))+(((IkReal(-1.00000000000000))*(x1490)*(x1493)))+(((x1486)*(x1487)))+(((IkReal(-1.00000000000000))*(x1488)*(x1493))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst11)*(((((IkReal(-1.00000000000000))*(r22)*(x1486)))+(((IkReal(-1.00000000000000))*(x1493)*(x1495)))+(((x1489)*(x1490)))+(((IkReal(-1.00000000000000))*(x1493)*(x1494)))+(((x1491)*(x1492)))+(((x1488)*(x1489)))+(((IkReal(-1.00000000000000))*(x1493)*(x1496)))+(((x1487)*(x1491)))+(((IkReal(-1.00000000000000))*(x1493)*(x1497)))))), ((gconst11)*(((((r22)*(x1491)))+(((IkReal(-1.00000000000000))*(x1489)*(x1496)))+(((IkReal(-1.00000000000000))*(x1489)*(x1495)))+(((IkReal(-1.00000000000000))*(x1489)*(x1494)))+(((IkReal(-1.00000000000000))*(x1489)*(x1497)))+(((x1486)*(x1492)))+(((IkReal(-1.00000000000000))*(x1490)*(x1493)))+(((x1486)*(x1487)))+(((IkReal(-1.00000000000000))*(x1488)*(x1493))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1498=IKsin(j8); | |
IkReal x1499=IKcos(j8); | |
IkReal x1500=((cj7)*(sj11)); | |
IkReal x1501=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1502=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x1503=((cj6)*(sj7)); | |
IkReal x1504=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1505=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1506=((r20)*(sj7)); | |
IkReal x1507=((cj11)*(cj7)); | |
IkReal x1508=((sj11)*(sj7)); | |
IkReal x1509=((r10)*(sj6)); | |
IkReal x1510=((cj11)*(r01)); | |
IkReal x1511=((cj6)*(cj7)); | |
IkReal x1512=((cj7)*(sj6)); | |
IkReal x1513=((r11)*(sj6)); | |
IkReal x1514=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1515=((IkReal(0.0620002000000000))*(r01)); | |
IkReal x1516=((cj11)*(sj7)); | |
IkReal x1517=((sj10)*(x1498)); | |
IkReal x1518=((IkReal(1.00000000000000))*(x1499)); | |
IkReal x1519=((cj10)*(x1498)); | |
IkReal x1520=((cj10)*(x1518)); | |
evalcond[0]=((((r02)*(x1511)))+(((IkReal(-1.00000000000000))*(x1520)))+(((r12)*(x1512)))+(((IkReal(-1.00000000000000))*(r22)*(x1514)))+(x1517)); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r12)*(sj7)*(x1502)))+(((IkReal(-1.00000000000000))*(sj10)*(x1518)))+(((IkReal(-1.00000000000000))*(r02)*(x1503)))+(((IkReal(-1.00000000000000))*(r22)*(x1505)))+(((IkReal(-1.00000000000000))*(x1519)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x1520)))+(((r21)*(x1507)))+(((x1508)*(x1509)))+(((r00)*(sj11)*(x1503)))+(((x1503)*(x1510)))+(((x1513)*(x1516)))+(((r20)*(x1500)))+(x1517)); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(cj6)*(r00)*(x1500)))+(((IkReal(-1.00000000000000))*(cj6)*(x1505)*(x1510)))+(((IkReal(-1.00000000000000))*(r10)*(x1500)*(x1502)))+(((r21)*(x1516)))+(((sj11)*(x1506)))+(((sj10)*(x1499)))+(((IkReal(-1.00000000000000))*(r11)*(x1502)*(x1507)))+(x1519)); | |
evalcond[4]=((((cj6)*(x1500)*(x1515)))+(((IkReal(-1.00000000000000))*(r00)*(x1504)*(x1511)))+(((IkReal(-0.302000000000000))*(x1499)))+(((x1504)*(x1506)))+(((IkReal(-1.00000000000000))*(cj7)*(x1504)*(x1509)))+(((IkReal(-0.0716559700000000))*(x1498)))+(((px)*(x1511)))+(((py)*(x1512)))+(((IkReal(-1.00000000000000))*(pz)*(x1514)))+(((IkReal(-1.00000000000000))*(x1501)*(x1508)))+(((IkReal(0.0620002000000000))*(x1500)*(x1513)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((IkReal(-1.00000000000000))*(pz)*(x1505)))+(((IkReal(-0.0620002000000000))*(x1508)*(x1513)))+(((IkReal(-0.302000000000000))*(x1498)))+(((IkReal(-1.00000000000000))*(x1500)*(x1501)))+(((IkReal(-1.00000000000000))*(px)*(x1503)))+(((r00)*(x1503)*(x1504)))+(((IkReal(-1.00000000000000))*(py)*(sj7)*(x1502)))+(((cj7)*(r20)*(x1504)))+(((IkReal(0.0716559700000000))*(x1499)))+(((IkReal(-1.00000000000000))*(sj11)*(x1503)*(x1515)))+(((sj7)*(x1504)*(x1509)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1521=((cj10)*(cj7)); | |
IkReal x1522=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1523=((r12)*(sj6)); | |
IkReal x1524=((IkReal(1.00000000000000))*(sj10)); | |
IkReal x1525=((cj6)*(r02)); | |
IkReal x1526=((cj10)*(sj7)); | |
if( IKabs(((gconst10)*(((((IkReal(-1.00000000000000))*(cj7)*(x1524)*(x1525)))+(((IkReal(-1.00000000000000))*(x1523)*(x1526)))+(((IkReal(-1.00000000000000))*(x1521)*(x1522)))+(((IkReal(-1.00000000000000))*(x1525)*(x1526)))+(((IkReal(-1.00000000000000))*(cj7)*(x1523)*(x1524)))+(((r22)*(sj10)*(sj7))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst10)*(((((x1521)*(x1525)))+(((IkReal(-1.00000000000000))*(cj7)*(sj10)*(x1522)))+(((x1521)*(x1523)))+(((IkReal(-1.00000000000000))*(sj7)*(x1523)*(x1524)))+(((IkReal(-1.00000000000000))*(sj7)*(x1524)*(x1525)))+(((IkReal(-1.00000000000000))*(x1522)*(x1526))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst10)*(((((IkReal(-1.00000000000000))*(cj7)*(x1524)*(x1525)))+(((IkReal(-1.00000000000000))*(x1523)*(x1526)))+(((IkReal(-1.00000000000000))*(x1521)*(x1522)))+(((IkReal(-1.00000000000000))*(x1525)*(x1526)))+(((IkReal(-1.00000000000000))*(cj7)*(x1523)*(x1524)))+(((r22)*(sj10)*(sj7)))))), ((gconst10)*(((((x1521)*(x1525)))+(((IkReal(-1.00000000000000))*(cj7)*(sj10)*(x1522)))+(((x1521)*(x1523)))+(((IkReal(-1.00000000000000))*(sj7)*(x1523)*(x1524)))+(((IkReal(-1.00000000000000))*(sj7)*(x1524)*(x1525)))+(((IkReal(-1.00000000000000))*(x1522)*(x1526))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1527=IKsin(j8); | |
IkReal x1528=IKcos(j8); | |
IkReal x1529=((cj7)*(sj11)); | |
IkReal x1530=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1531=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x1532=((cj6)*(sj7)); | |
IkReal x1533=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1534=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1535=((r20)*(sj7)); | |
IkReal x1536=((cj11)*(cj7)); | |
IkReal x1537=((sj11)*(sj7)); | |
IkReal x1538=((r10)*(sj6)); | |
IkReal x1539=((cj11)*(r01)); | |
IkReal x1540=((cj6)*(cj7)); | |
IkReal x1541=((cj7)*(sj6)); | |
IkReal x1542=((r11)*(sj6)); | |
IkReal x1543=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1544=((IkReal(0.0620002000000000))*(r01)); | |
IkReal x1545=((cj11)*(sj7)); | |
IkReal x1546=((sj10)*(x1527)); | |
IkReal x1547=((IkReal(1.00000000000000))*(x1528)); | |
IkReal x1548=((cj10)*(x1527)); | |
IkReal x1549=((cj10)*(x1547)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(r22)*(x1543)))+(((r12)*(x1541)))+(x1546)+(((IkReal(-1.00000000000000))*(x1549)))+(((r02)*(x1540)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1548)))+(((IkReal(-1.00000000000000))*(r22)*(x1534)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x1531)))+(((IkReal(-1.00000000000000))*(r02)*(x1532)))+(((IkReal(-1.00000000000000))*(sj10)*(x1547)))); | |
evalcond[2]=((((x1537)*(x1538)))+(x1546)+(((x1532)*(x1539)))+(((IkReal(-1.00000000000000))*(x1549)))+(((r21)*(x1536)))+(((r00)*(sj11)*(x1532)))+(((x1542)*(x1545)))+(((r20)*(x1529)))); | |
evalcond[3]=((((r21)*(x1545)))+(((IkReal(-1.00000000000000))*(r10)*(x1529)*(x1531)))+(((sj11)*(x1535)))+(x1548)+(((IkReal(-1.00000000000000))*(cj6)*(x1534)*(x1539)))+(((sj10)*(x1528)))+(((IkReal(-1.00000000000000))*(r11)*(x1531)*(x1536)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(x1529)))); | |
evalcond[4]=((((cj6)*(x1529)*(x1544)))+(((IkReal(-1.00000000000000))*(r00)*(x1533)*(x1540)))+(((px)*(x1540)))+(((IkReal(-1.00000000000000))*(cj7)*(x1533)*(x1538)))+(((IkReal(-0.0716559700000000))*(x1527)))+(((IkReal(-1.00000000000000))*(x1530)*(x1537)))+(((IkReal(-1.00000000000000))*(pz)*(x1543)))+(((x1533)*(x1535)))+(((py)*(x1541)))+(((IkReal(0.0620002000000000))*(x1529)*(x1542)))+(((IkReal(-0.302000000000000))*(x1528)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((cj7)*(r20)*(x1533)))+(((sj7)*(x1533)*(x1538)))+(((IkReal(-1.00000000000000))*(pz)*(x1534)))+(((IkReal(-1.00000000000000))*(sj11)*(x1532)*(x1544)))+(((r00)*(x1532)*(x1533)))+(((IkReal(-1.00000000000000))*(px)*(x1532)))+(((IkReal(-0.0620002000000000))*(x1537)*(x1542)))+(((IkReal(-0.302000000000000))*(x1527)))+(((IkReal(-1.00000000000000))*(x1529)*(x1530)))+(((IkReal(0.0716559700000000))*(x1528)))+(((IkReal(-1.00000000000000))*(py)*(sj7)*(x1531)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1550=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1551=((r01)*(sj6)); | |
IkReal x1552=((cj6)*(sj7)); | |
IkReal x1553=((r01)*(sj11)); | |
IkReal x1554=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1555=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1556=((cj11)*(r10)); | |
IkReal x1557=((r11)*(sj11)); | |
IkReal x1558=((sj6)*(sj7)); | |
IkReal x1559=((r21)*(sj11)); | |
IkReal x1560=((r00)*(sj6)); | |
IkReal x1561=((cj7)*(sj6)); | |
IkReal x1562=((cj6)*(r10)); | |
IkReal x1563=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1564=((cj11)*(cj6)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(j9, IkReal(6.28318530717959)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r12)*(x1554)))+(((r02)*(sj6)))); | |
evalcond[2]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(x1550)*(x1562)))+(((cj11)*(x1560)))+(((IkReal(-1.00000000000000))*(x1551)*(x1563)))+(((cj6)*(x1557)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1550)*(x1551)))+(((r11)*(x1564)))+(((IkReal(-1.00000000000000))*(x1560)*(x1563)))+(((sj11)*(x1562)))); | |
evalcond[4]=((IkReal(0.0515917000000000))+(((IkReal(-1.00000000000000))*(cj6)*(r11)*(x1555)))+(((IkReal(-0.0620002000000000))*(cj11)*(x1560)))+(((px)*(sj6)))+(((x1551)*(x1555)))+(((IkReal(-1.00000000000000))*(py)*(x1554)))+(((IkReal(0.0620002000000000))*(cj6)*(x1556)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj7)*(r20)*(x1550)))+(((IkReal(-1.00000000000000))*(r10)*(x1550)*(x1558)))+(((IkReal(-1.00000000000000))*(r00)*(x1550)*(x1552)))+(((cj7)*(x1559)))+(((x1552)*(x1553)))+(((x1557)*(x1558)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(r20)*(sj7)*(x1550)))+(((IkReal(-1.00000000000000))*(x1557)*(x1561)))+(((x1556)*(x1561)))+(((IkReal(-1.00000000000000))*(cj7)*(x1553)*(x1554)))+(((sj7)*(x1559)))+(((cj7)*(r00)*(x1564)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst12; | |
gconst12=IKsign((((cj10)*(cj10))+((sj10)*(sj10)))); | |
dummyeval[0]=(((cj10)*(cj10))+((sj10)*(sj10))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst13; | |
gconst13=IKsign((((cj10)*(cj10))+((sj10)*(sj10)))); | |
dummyeval[0]=(((cj10)*(cj10))+((sj10)*(sj10))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
continue; | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1565=((r20)*(sj11)); | |
IkReal x1566=((r10)*(sj6)); | |
IkReal x1567=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1568=((sj10)*(sj7)); | |
IkReal x1569=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1570=((r11)*(sj6)); | |
IkReal x1571=((r12)*(sj6)); | |
IkReal x1572=((cj7)*(sj10)); | |
IkReal x1573=((cj10)*(sj7)); | |
IkReal x1574=((IkReal(1.00000000000000))*(cj10)*(cj7)); | |
IkReal x1575=((cj6)*(x1568)); | |
IkReal x1576=((r01)*(x1569)); | |
IkReal x1577=((cj6)*(x1573)); | |
IkReal x1578=((x1567)*(x1573)); | |
if( IKabs(((gconst13)*(((((IkReal(-1.00000000000000))*(r02)*(x1577)))+(((IkReal(-1.00000000000000))*(r00)*(x1567)*(x1575)))+(((IkReal(-1.00000000000000))*(r21)*(x1569)*(x1572)))+(((IkReal(-1.00000000000000))*(x1565)*(x1572)))+(((IkReal(-1.00000000000000))*(x1571)*(x1573)))+(((IkReal(-1.00000000000000))*(x1575)*(x1576)))+(((IkReal(-1.00000000000000))*(r22)*(x1574)))+(((IkReal(-1.00000000000000))*(x1568)*(x1569)*(x1570)))+(((IkReal(-1.00000000000000))*(x1566)*(x1567)*(x1568))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst13)*(((((IkReal(-1.00000000000000))*(x1566)*(x1578)))+(((IkReal(-1.00000000000000))*(x1565)*(x1574)))+(((IkReal(-1.00000000000000))*(r00)*(x1567)*(x1577)))+(((IkReal(-1.00000000000000))*(x1569)*(x1570)*(x1573)))+(((x1568)*(x1571)))+(((r22)*(x1572)))+(((IkReal(-1.00000000000000))*(cj10)*(cj7)*(r21)*(x1569)))+(((r02)*(x1575)))+(((IkReal(-1.00000000000000))*(x1576)*(x1577))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst13)*(((((IkReal(-1.00000000000000))*(r02)*(x1577)))+(((IkReal(-1.00000000000000))*(r00)*(x1567)*(x1575)))+(((IkReal(-1.00000000000000))*(r21)*(x1569)*(x1572)))+(((IkReal(-1.00000000000000))*(x1565)*(x1572)))+(((IkReal(-1.00000000000000))*(x1571)*(x1573)))+(((IkReal(-1.00000000000000))*(x1575)*(x1576)))+(((IkReal(-1.00000000000000))*(r22)*(x1574)))+(((IkReal(-1.00000000000000))*(x1568)*(x1569)*(x1570)))+(((IkReal(-1.00000000000000))*(x1566)*(x1567)*(x1568)))))), ((gconst13)*(((((IkReal(-1.00000000000000))*(x1566)*(x1578)))+(((IkReal(-1.00000000000000))*(x1565)*(x1574)))+(((IkReal(-1.00000000000000))*(r00)*(x1567)*(x1577)))+(((IkReal(-1.00000000000000))*(x1569)*(x1570)*(x1573)))+(((x1568)*(x1571)))+(((r22)*(x1572)))+(((IkReal(-1.00000000000000))*(cj10)*(cj7)*(r21)*(x1569)))+(((r02)*(x1575)))+(((IkReal(-1.00000000000000))*(x1576)*(x1577))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1579=IKcos(j8); | |
IkReal x1580=IKsin(j8); | |
IkReal x1581=((cj7)*(sj11)); | |
IkReal x1582=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1583=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x1584=((cj6)*(sj7)); | |
IkReal x1585=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1586=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1587=((r20)*(sj7)); | |
IkReal x1588=((cj11)*(cj7)); | |
IkReal x1589=((sj11)*(sj7)); | |
IkReal x1590=((r10)*(sj6)); | |
IkReal x1591=((cj11)*(r01)); | |
IkReal x1592=((cj6)*(cj7)); | |
IkReal x1593=((cj7)*(sj6)); | |
IkReal x1594=((IkReal(1.00000000000000))*(cj10)); | |
IkReal x1595=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1596=((IkReal(0.0620002000000000))*(r01)); | |
IkReal x1597=((r11)*(sj6)); | |
IkReal x1598=((cj11)*(sj7)); | |
IkReal x1599=((sj10)*(x1579)); | |
IkReal x1600=((sj10)*(x1580)); | |
IkReal x1601=((x1580)*(x1594)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(x1600)))+(((IkReal(-1.00000000000000))*(r22)*(x1595)))+(((IkReal(-1.00000000000000))*(x1579)*(x1594)))+(((r12)*(x1593)))+(((r02)*(x1592)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r02)*(x1584)))+(x1599)+(((IkReal(-1.00000000000000))*(x1601)))+(((IkReal(-1.00000000000000))*(r22)*(x1586)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x1583)))); | |
evalcond[2]=((((x1584)*(x1591)))+(((r00)*(sj11)*(x1584)))+(((cj10)*(x1579)))+(((r21)*(x1588)))+(((x1597)*(x1598)))+(x1600)+(((r20)*(x1581)))+(((x1589)*(x1590)))); | |
evalcond[3]=((x1599)+(((IkReal(-1.00000000000000))*(r10)*(x1581)*(x1583)))+(((sj11)*(x1587)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(x1581)))+(((IkReal(-1.00000000000000))*(x1601)))+(((IkReal(-1.00000000000000))*(cj6)*(x1586)*(x1591)))+(((r21)*(x1598)))+(((IkReal(-1.00000000000000))*(r11)*(x1583)*(x1588)))); | |
evalcond[4]=((((x1585)*(x1587)))+(((py)*(x1593)))+(((IkReal(-0.302000000000000))*(x1579)))+(((IkReal(-1.00000000000000))*(r00)*(x1585)*(x1592)))+(((IkReal(-1.00000000000000))*(cj7)*(x1585)*(x1590)))+(((px)*(x1592)))+(((IkReal(-0.0686246300000000))*(x1580)))+(((IkReal(-1.00000000000000))*(pz)*(x1595)))+(((IkReal(-1.00000000000000))*(x1582)*(x1589)))+(((cj6)*(x1581)*(x1596)))+(((IkReal(0.0620002000000000))*(x1581)*(x1597)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((IkReal(-1.00000000000000))*(px)*(x1584)))+(((IkReal(-1.00000000000000))*(x1581)*(x1582)))+(((r00)*(x1584)*(x1585)))+(((sj7)*(x1585)*(x1590)))+(((IkReal(-0.302000000000000))*(x1580)))+(((IkReal(-0.0620002000000000))*(x1589)*(x1597)))+(((IkReal(0.0686246300000000))*(x1579)))+(((cj7)*(r20)*(x1585)))+(((IkReal(-1.00000000000000))*(pz)*(x1586)))+(((IkReal(-1.00000000000000))*(py)*(sj7)*(x1583)))+(((IkReal(-1.00000000000000))*(sj11)*(x1584)*(x1596)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1602=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1603=((sj10)*(sj7)); | |
IkReal x1604=((cj10)*(cj7)); | |
IkReal x1605=((cj6)*(r02)); | |
IkReal x1606=((r12)*(sj6)); | |
IkReal x1607=((cj7)*(sj10)); | |
IkReal x1608=((cj10)*(sj7)); | |
if( IKabs(((gconst12)*(((((x1605)*(x1607)))+(((IkReal(-1.00000000000000))*(x1602)*(x1603)))+(((IkReal(-1.00000000000000))*(x1606)*(x1608)))+(((IkReal(-1.00000000000000))*(x1602)*(x1604)))+(((IkReal(-1.00000000000000))*(x1605)*(x1608)))+(((x1606)*(x1607))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst12)*(((((x1604)*(x1605)))+(((x1604)*(x1606)))+(((r22)*(x1607)))+(((x1603)*(x1605)))+(((x1603)*(x1606)))+(((IkReal(-1.00000000000000))*(x1602)*(x1608))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst12)*(((((x1605)*(x1607)))+(((IkReal(-1.00000000000000))*(x1602)*(x1603)))+(((IkReal(-1.00000000000000))*(x1606)*(x1608)))+(((IkReal(-1.00000000000000))*(x1602)*(x1604)))+(((IkReal(-1.00000000000000))*(x1605)*(x1608)))+(((x1606)*(x1607)))))), ((gconst12)*(((((x1604)*(x1605)))+(((x1604)*(x1606)))+(((r22)*(x1607)))+(((x1603)*(x1605)))+(((x1603)*(x1606)))+(((IkReal(-1.00000000000000))*(x1602)*(x1608))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1609=IKcos(j8); | |
IkReal x1610=IKsin(j8); | |
IkReal x1611=((cj7)*(sj11)); | |
IkReal x1612=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1613=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x1614=((cj6)*(sj7)); | |
IkReal x1615=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1616=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1617=((r20)*(sj7)); | |
IkReal x1618=((cj11)*(cj7)); | |
IkReal x1619=((sj11)*(sj7)); | |
IkReal x1620=((r10)*(sj6)); | |
IkReal x1621=((cj11)*(r01)); | |
IkReal x1622=((cj6)*(cj7)); | |
IkReal x1623=((cj7)*(sj6)); | |
IkReal x1624=((IkReal(1.00000000000000))*(cj10)); | |
IkReal x1625=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1626=((IkReal(0.0620002000000000))*(r01)); | |
IkReal x1627=((r11)*(sj6)); | |
IkReal x1628=((cj11)*(sj7)); | |
IkReal x1629=((sj10)*(x1609)); | |
IkReal x1630=((sj10)*(x1610)); | |
IkReal x1631=((x1610)*(x1624)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(x1609)*(x1624)))+(((IkReal(-1.00000000000000))*(x1630)))+(((IkReal(-1.00000000000000))*(r22)*(x1625)))+(((r02)*(x1622)))+(((r12)*(x1623)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r22)*(x1616)))+(x1629)+(((IkReal(-1.00000000000000))*(x1631)))+(((IkReal(-1.00000000000000))*(r02)*(x1614)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x1613)))); | |
evalcond[2]=((((r21)*(x1618)))+(((r00)*(sj11)*(x1614)))+(((x1627)*(x1628)))+(x1630)+(((x1614)*(x1621)))+(((x1619)*(x1620)))+(((cj10)*(x1609)))+(((r20)*(x1611)))); | |
evalcond[3]=((((r21)*(x1628)))+(x1629)+(((IkReal(-1.00000000000000))*(x1631)))+(((sj11)*(x1617)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(x1611)))+(((IkReal(-1.00000000000000))*(cj6)*(x1616)*(x1621)))+(((IkReal(-1.00000000000000))*(r10)*(x1611)*(x1613)))+(((IkReal(-1.00000000000000))*(r11)*(x1613)*(x1618)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(r00)*(x1615)*(x1622)))+(((IkReal(-1.00000000000000))*(pz)*(x1625)))+(((IkReal(-0.302000000000000))*(x1609)))+(((IkReal(-0.0686246300000000))*(x1610)))+(((cj6)*(x1611)*(x1626)))+(((IkReal(0.0620002000000000))*(x1611)*(x1627)))+(((IkReal(-1.00000000000000))*(x1612)*(x1619)))+(((py)*(x1623)))+(((x1615)*(x1617)))+(((IkReal(-1.00000000000000))*(cj7)*(x1615)*(x1620)))+(((px)*(x1622)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((sj7)*(x1615)*(x1620)))+(((IkReal(-1.00000000000000))*(sj11)*(x1614)*(x1626)))+(((IkReal(0.0686246300000000))*(x1609)))+(((IkReal(-1.00000000000000))*(px)*(x1614)))+(((IkReal(-0.0620002000000000))*(x1619)*(x1627)))+(((IkReal(-1.00000000000000))*(pz)*(x1616)))+(((IkReal(-1.00000000000000))*(x1611)*(x1612)))+(((r00)*(x1614)*(x1615)))+(((IkReal(-0.302000000000000))*(x1610)))+(((IkReal(-1.00000000000000))*(py)*(sj7)*(x1613)))+(((cj7)*(r20)*(x1615)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1632=((cj6)*(r10)); | |
IkReal x1633=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1634=((cj6)*(r11)); | |
IkReal x1635=((r01)*(sj6)); | |
IkReal x1636=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1637=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1638=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1639=((r00)*(sj6)); | |
IkReal x1640=((IkReal(1.00000000000000))*(sj11)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.57079632679490))+(j10)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(sj9)+(((IkReal(-1.00000000000000))*(r12)*(x1633)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x1635)*(x1640)))+(((IkReal(-1.00000000000000))*(x1632)*(x1638)))+(((sj11)*(x1634)))+(((cj11)*(x1639)))+(cj9)); | |
evalcond[3]=((((sj11)*(x1632)))+(((cj11)*(x1634)))+(((IkReal(-1.00000000000000))*(x1635)*(x1638)))+(((IkReal(-1.00000000000000))*(x1639)*(x1640)))); | |
evalcond[4]=((IkReal(-0.0100933000000000))+(((IkReal(-0.00151567000000000))*(sj9)))+(((IkReal(-1.00000000000000))*(x1637)*(x1639)))+(((IkReal(-0.0616850000000000))*(cj9)))+(((x1635)*(x1636)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(py)*(x1633)))+(((IkReal(-1.00000000000000))*(x1634)*(x1636)))+(((x1632)*(x1637)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst14; | |
gconst14=IKsign(cj9); | |
dummyeval[0]=cj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
dummyeval[0]=cj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
dummyeval[0]=cj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[7]; | |
IkReal x1641=((r01)*(sj6)); | |
IkReal x1642=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1643=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1644=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1645=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1646=((cj6)*(r10)); | |
IkReal x1647=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1648=((r00)*(sj6)); | |
IkReal x1649=((cj6)*(r11)); | |
IkReal x1650=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1651=((r12)*(sj6)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.57079632679490))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((IkReal(1.00000000000000))+(((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1644)))); | |
evalcond[2]=((((sj11)*(x1649)))+(((cj11)*(x1648)))+(((IkReal(-1.00000000000000))*(x1642)*(x1646)))+(((IkReal(-1.00000000000000))*(x1641)*(x1650)))); | |
evalcond[3]=((((cj6)*(cj7)*(r02)))+(((cj7)*(x1651)))+(((IkReal(-1.00000000000000))*(sj7)*(x1643)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(x1641)*(x1642)))+(((cj11)*(x1649)))+(((sj11)*(x1646)))+(((IkReal(-1.00000000000000))*(x1648)*(x1650)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj7)*(x1643)))+(((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1644)))+(((IkReal(-1.00000000000000))*(sj7)*(x1651)))); | |
evalcond[6]=((IkReal(-0.0116089700000000))+(((IkReal(-1.00000000000000))*(x1647)*(x1648)))+(((x1641)*(x1645)))+(((x1646)*(x1647)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(x1645)*(x1649)))+(((IkReal(-1.00000000000000))*(py)*(x1644)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1652=((cj7)*(sj11)); | |
IkReal x1653=((r10)*(sj6)); | |
IkReal x1654=((cj6)*(r00)); | |
IkReal x1655=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1656=((cj11)*(r21)); | |
IkReal x1657=((cj11)*(cj6)*(r01)); | |
IkReal x1658=((cj11)*(r11)*(sj6)); | |
if( IKabs(((((IkReal(-1.00000000000000))*(x1655)*(x1657)))+(((IkReal(-1.00000000000000))*(r20)*(x1652)))+(((IkReal(-1.00000000000000))*(x1655)*(x1658)))+(((IkReal(-1.00000000000000))*(cj7)*(x1656)))+(((IkReal(-1.00000000000000))*(sj11)*(x1653)*(x1655)))+(((IkReal(-1.00000000000000))*(sj11)*(x1654)*(x1655))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((cj7)*(x1657)))+(((x1652)*(x1654)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1655)))+(((cj7)*(x1658)))+(((x1652)*(x1653)))+(((IkReal(-1.00000000000000))*(x1655)*(x1656))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IkReal(-1.00000000000000))*(x1655)*(x1657)))+(((IkReal(-1.00000000000000))*(r20)*(x1652)))+(((IkReal(-1.00000000000000))*(x1655)*(x1658)))+(((IkReal(-1.00000000000000))*(cj7)*(x1656)))+(((IkReal(-1.00000000000000))*(sj11)*(x1653)*(x1655)))+(((IkReal(-1.00000000000000))*(sj11)*(x1654)*(x1655)))))+IKsqr(((((cj7)*(x1657)))+(((x1652)*(x1654)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1655)))+(((cj7)*(x1658)))+(((x1652)*(x1653)))+(((IkReal(-1.00000000000000))*(x1655)*(x1656)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((IkReal(-1.00000000000000))*(x1655)*(x1657)))+(((IkReal(-1.00000000000000))*(r20)*(x1652)))+(((IkReal(-1.00000000000000))*(x1655)*(x1658)))+(((IkReal(-1.00000000000000))*(cj7)*(x1656)))+(((IkReal(-1.00000000000000))*(sj11)*(x1653)*(x1655)))+(((IkReal(-1.00000000000000))*(sj11)*(x1654)*(x1655)))), ((((cj7)*(x1657)))+(((x1652)*(x1654)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1655)))+(((cj7)*(x1658)))+(((x1652)*(x1653)))+(((IkReal(-1.00000000000000))*(x1655)*(x1656))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1659=IKsin(j8); | |
IkReal x1660=IKcos(j8); | |
IkReal x1661=((cj7)*(sj11)); | |
IkReal x1662=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1663=((r10)*(sj6)); | |
IkReal x1664=((cj11)*(sj7)); | |
IkReal x1665=((cj6)*(r00)); | |
IkReal x1666=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1667=((sj11)*(sj7)); | |
IkReal x1668=((cj6)*(r01)); | |
IkReal x1669=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1670=((cj11)*(cj7)); | |
IkReal x1671=((IkReal(1.00000000000000))*(pz)); | |
IkReal x1672=((py)*(sj6)); | |
IkReal x1673=((r11)*(sj6)); | |
IkReal x1674=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1675=((cj6)*(px)); | |
evalcond[0]=((((r21)*(x1661)))+(((IkReal(-1.00000000000000))*(x1663)*(x1664)))+(((IkReal(-1.00000000000000))*(x1666)*(x1670)))+(((x1667)*(x1668)))+(x1660)+(((IkReal(-1.00000000000000))*(x1664)*(x1665)))+(((x1667)*(x1673)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1661)*(x1668)))+(((IkReal(-1.00000000000000))*(x1661)*(x1673)))+(((IkReal(-1.00000000000000))*(x1659)))+(((r21)*(x1667)))+(((x1663)*(x1670)))+(((x1665)*(x1670)))+(((IkReal(-1.00000000000000))*(x1664)*(x1666)))); | |
evalcond[2]=((((r21)*(x1670)))+(((x1665)*(x1667)))+(((x1664)*(x1668)))+(((r20)*(x1661)))+(((x1663)*(x1667)))+(((x1664)*(x1673)))+(x1659)); | |
evalcond[3]=((x1660)+(((IkReal(-1.00000000000000))*(x1670)*(x1673)))+(((IkReal(-1.00000000000000))*(x1661)*(x1665)))+(((r20)*(x1667)))+(((IkReal(-1.00000000000000))*(x1661)*(x1663)))+(((r21)*(x1664)))+(((IkReal(-1.00000000000000))*(x1668)*(x1670)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(sj7)*(x1671)))+(((IkReal(-0.0620002000000000))*(x1663)*(x1670)))+(((IkReal(0.0620002000000000))*(x1661)*(x1673)))+(((IkReal(-0.0620002000000000))*(x1665)*(x1670)))+(((cj7)*(x1675)))+(((IkReal(-0.00845530000000000))*(x1659)))+(((IkReal(-0.302000000000000))*(x1660)))+(((x1664)*(x1669)))+(((IkReal(-1.00000000000000))*(x1662)*(x1667)))+(((cj7)*(x1672)))+(((IkReal(0.0620002000000000))*(x1661)*(x1668)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((IkReal(0.0620002000000000))*(x1664)*(x1665)))+(((IkReal(0.0620002000000000))*(x1663)*(x1664)))+(((IkReal(0.00845530000000000))*(x1660)))+(((IkReal(-1.00000000000000))*(x1672)*(x1674)))+(((IkReal(-1.00000000000000))*(x1661)*(x1662)))+(((IkReal(-0.0620002000000000))*(x1667)*(x1668)))+(((IkReal(-1.00000000000000))*(cj7)*(x1671)))+(((IkReal(-0.0620002000000000))*(x1667)*(x1673)))+(((x1669)*(x1670)))+(((IkReal(-1.00000000000000))*(x1674)*(x1675)))+(((IkReal(-0.302000000000000))*(x1659)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1676=((r01)*(sj6)); | |
IkReal x1677=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1678=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1679=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1680=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1681=((cj6)*(r10)); | |
IkReal x1682=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1683=((r00)*(sj6)); | |
IkReal x1684=((cj6)*(r11)); | |
IkReal x1685=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1686=((r12)*(sj6)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.71238898038469))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((IkReal(-1.00000000000000))+(((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1679)))); | |
evalcond[2]=((((cj11)*(x1683)))+(((IkReal(-1.00000000000000))*(x1676)*(x1685)))+(((IkReal(-1.00000000000000))*(x1677)*(x1681)))+(((sj11)*(x1684)))); | |
evalcond[3]=((((cj7)*(x1686)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(sj7)*(x1678)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(x1683)*(x1685)))+(((cj11)*(x1684)))+(((IkReal(-1.00000000000000))*(x1676)*(x1677)))+(((sj11)*(x1681)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1679)))+(((IkReal(-1.00000000000000))*(sj7)*(x1686)))+(((IkReal(-1.00000000000000))*(cj7)*(x1678)))); | |
evalcond[6]=((IkReal(-0.00857763000000000))+(((IkReal(-1.00000000000000))*(py)*(x1679)))+(((x1681)*(x1682)))+(((IkReal(-1.00000000000000))*(x1682)*(x1683)))+(((px)*(sj6)))+(((x1676)*(x1680)))+(((IkReal(-1.00000000000000))*(x1680)*(x1684)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1687=((cj7)*(sj11)); | |
IkReal x1688=((r10)*(sj6)); | |
IkReal x1689=((cj6)*(r00)); | |
IkReal x1690=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1691=((cj11)*(r21)); | |
IkReal x1692=((cj11)*(cj6)*(r01)); | |
IkReal x1693=((cj11)*(r11)*(sj6)); | |
if( IKabs(((((IkReal(-1.00000000000000))*(x1690)*(x1692)))+(((IkReal(-1.00000000000000))*(x1690)*(x1693)))+(((IkReal(-1.00000000000000))*(r20)*(x1687)))+(((IkReal(-1.00000000000000))*(cj7)*(x1691)))+(((IkReal(-1.00000000000000))*(sj11)*(x1689)*(x1690)))+(((IkReal(-1.00000000000000))*(sj11)*(x1688)*(x1690))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(x1690)*(x1691)))+(((x1687)*(x1688)))+(((x1687)*(x1689)))+(((cj7)*(x1692)))+(((cj7)*(x1693)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1690))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IkReal(-1.00000000000000))*(x1690)*(x1692)))+(((IkReal(-1.00000000000000))*(x1690)*(x1693)))+(((IkReal(-1.00000000000000))*(r20)*(x1687)))+(((IkReal(-1.00000000000000))*(cj7)*(x1691)))+(((IkReal(-1.00000000000000))*(sj11)*(x1689)*(x1690)))+(((IkReal(-1.00000000000000))*(sj11)*(x1688)*(x1690)))))+IKsqr(((((IkReal(-1.00000000000000))*(x1690)*(x1691)))+(((x1687)*(x1688)))+(((x1687)*(x1689)))+(((cj7)*(x1692)))+(((cj7)*(x1693)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1690)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((IkReal(-1.00000000000000))*(x1690)*(x1692)))+(((IkReal(-1.00000000000000))*(x1690)*(x1693)))+(((IkReal(-1.00000000000000))*(r20)*(x1687)))+(((IkReal(-1.00000000000000))*(cj7)*(x1691)))+(((IkReal(-1.00000000000000))*(sj11)*(x1689)*(x1690)))+(((IkReal(-1.00000000000000))*(sj11)*(x1688)*(x1690)))), ((((IkReal(-1.00000000000000))*(x1690)*(x1691)))+(((x1687)*(x1688)))+(((x1687)*(x1689)))+(((cj7)*(x1692)))+(((cj7)*(x1693)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1690))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1694=IKsin(j8); | |
IkReal x1695=IKcos(j8); | |
IkReal x1696=((cj7)*(sj11)); | |
IkReal x1697=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1698=((r10)*(sj6)); | |
IkReal x1699=((cj11)*(sj7)); | |
IkReal x1700=((cj6)*(r00)); | |
IkReal x1701=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1702=((sj11)*(sj7)); | |
IkReal x1703=((cj6)*(r01)); | |
IkReal x1704=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1705=((cj11)*(cj7)); | |
IkReal x1706=((IkReal(1.00000000000000))*(pz)); | |
IkReal x1707=((py)*(sj6)); | |
IkReal x1708=((r11)*(sj6)); | |
IkReal x1709=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1710=((cj6)*(px)); | |
evalcond[0]=((((x1702)*(x1708)))+(((IkReal(-1.00000000000000))*(x1699)*(x1700)))+(((IkReal(-1.00000000000000))*(x1701)*(x1705)))+(((IkReal(-1.00000000000000))*(x1695)))+(((IkReal(-1.00000000000000))*(x1698)*(x1699)))+(((r21)*(x1696)))+(((x1702)*(x1703)))); | |
evalcond[1]=((((x1698)*(x1705)))+(((IkReal(-1.00000000000000))*(x1696)*(x1708)))+(((IkReal(-1.00000000000000))*(x1696)*(x1703)))+(((x1700)*(x1705)))+(x1694)+(((r21)*(x1702)))+(((IkReal(-1.00000000000000))*(x1699)*(x1701)))); | |
evalcond[2]=((((x1699)*(x1708)))+(((x1700)*(x1702)))+(((x1699)*(x1703)))+(((x1698)*(x1702)))+(((r21)*(x1705)))+(x1694)+(((r20)*(x1696)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1696)*(x1698)))+(((r20)*(x1702)))+(((r21)*(x1699)))+(x1695)+(((IkReal(-1.00000000000000))*(x1705)*(x1708)))+(((IkReal(-1.00000000000000))*(x1696)*(x1700)))+(((IkReal(-1.00000000000000))*(x1703)*(x1705)))); | |
evalcond[4]=((((IkReal(-0.0620002000000000))*(x1698)*(x1705)))+(((x1699)*(x1704)))+(((IkReal(-0.0620002000000000))*(x1700)*(x1705)))+(((IkReal(-1.00000000000000))*(x1697)*(x1702)))+(((IkReal(-0.131825300000000))*(x1694)))+(((IkReal(-0.302000000000000))*(x1695)))+(((IkReal(-1.00000000000000))*(sj7)*(x1706)))+(((cj7)*(x1707)))+(((cj7)*(x1710)))+(((IkReal(0.0620002000000000))*(x1696)*(x1703)))+(((IkReal(0.0620002000000000))*(x1696)*(x1708)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((IkReal(-0.302000000000000))*(x1694)))+(((IkReal(0.131825300000000))*(x1695)))+(((IkReal(-1.00000000000000))*(cj7)*(x1706)))+(((IkReal(-1.00000000000000))*(x1696)*(x1697)))+(((IkReal(-0.0620002000000000))*(x1702)*(x1708)))+(((IkReal(-0.0620002000000000))*(x1702)*(x1703)))+(((IkReal(0.0620002000000000))*(x1698)*(x1699)))+(((IkReal(0.0620002000000000))*(x1699)*(x1700)))+(((x1704)*(x1705)))+(((IkReal(-1.00000000000000))*(x1709)*(x1710)))+(((IkReal(-1.00000000000000))*(x1707)*(x1709)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1711=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1712=((IkReal(1.00000000000000))*(cj6)*(sj7)); | |
IkReal x1713=((IkReal(1.00000000000000))*(sj6)*(sj7)); | |
if( IKabs(((((IkReal(-1.00000000000000))*(r00)*(sj11)*(x1712)))+(((IkReal(-1.00000000000000))*(cj11)*(r01)*(x1712)))+(((IkReal(-1.00000000000000))*(cj11)*(r21)*(x1711)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1713)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1711)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1713))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((IkReal(-1.00000000000000))*(r02)*(x1712)))+(((IkReal(-1.00000000000000))*(r22)*(x1711)))+(((IkReal(-1.00000000000000))*(r12)*(x1713))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IkReal(-1.00000000000000))*(r00)*(sj11)*(x1712)))+(((IkReal(-1.00000000000000))*(cj11)*(r01)*(x1712)))+(((IkReal(-1.00000000000000))*(cj11)*(r21)*(x1711)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1713)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1711)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1713)))))+IKsqr(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((IkReal(-1.00000000000000))*(r02)*(x1712)))+(((IkReal(-1.00000000000000))*(r22)*(x1711)))+(((IkReal(-1.00000000000000))*(r12)*(x1713)))))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((IkReal(-1.00000000000000))*(r00)*(sj11)*(x1712)))+(((IkReal(-1.00000000000000))*(cj11)*(r01)*(x1712)))+(((IkReal(-1.00000000000000))*(cj11)*(r21)*(x1711)))+(((IkReal(-1.00000000000000))*(cj11)*(r11)*(x1713)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1711)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(x1713)))), ((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((IkReal(-1.00000000000000))*(r02)*(x1712)))+(((IkReal(-1.00000000000000))*(r22)*(x1711)))+(((IkReal(-1.00000000000000))*(r12)*(x1713))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x1714=IKcos(j8); | |
IkReal x1715=IKsin(j8); | |
IkReal x1716=((cj7)*(sj11)); | |
IkReal x1717=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1718=((r10)*(sj6)); | |
IkReal x1719=((cj11)*(sj7)); | |
IkReal x1720=((cj6)*(r00)); | |
IkReal x1721=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1722=((sj11)*(sj7)); | |
IkReal x1723=((cj6)*(r01)); | |
IkReal x1724=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1725=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1726=((cj11)*(cj7)); | |
IkReal x1727=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1728=((cj6)*(r02)); | |
IkReal x1729=((py)*(sj6)); | |
IkReal x1730=((r11)*(sj6)); | |
IkReal x1731=((cj6)*(px)); | |
IkReal x1732=((r12)*(sj6)); | |
IkReal x1733=((cj9)*(x1715)); | |
IkReal x1734=((sj9)*(x1714)); | |
IkReal x1735=((cj9)*(x1714)); | |
IkReal x1736=((sj9)*(x1715)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(r22)*(x1727)))+(((cj7)*(x1728)))+(x1733)+(((cj7)*(x1732)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r22)*(x1724)))+(((IkReal(-1.00000000000000))*(x1735)))+(((IkReal(-1.00000000000000))*(x1727)*(x1732)))+(((IkReal(-1.00000000000000))*(x1727)*(x1728)))); | |
evalcond[2]=((((x1722)*(x1723)))+(((r21)*(x1716)))+(((x1722)*(x1730)))+(((IkReal(-1.00000000000000))*(x1719)*(x1720)))+(((IkReal(-1.00000000000000))*(x1721)*(x1726)))+(x1734)+(((IkReal(-1.00000000000000))*(x1718)*(x1719)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1716)*(x1723)))+(((x1720)*(x1726)))+(((IkReal(-1.00000000000000))*(x1736)))+(((IkReal(-1.00000000000000))*(x1716)*(x1730)))+(((r21)*(x1722)))+(((IkReal(-1.00000000000000))*(x1719)*(x1721)))+(((x1718)*(x1726)))); | |
evalcond[4]=((((r21)*(x1726)))+(((x1718)*(x1722)))+(x1715)+(((x1719)*(x1730)))+(((x1720)*(x1722)))+(((x1719)*(x1723)))+(((r20)*(x1716)))); | |
evalcond[5]=((x1714)+(((r20)*(x1722)))+(((r21)*(x1719)))+(((IkReal(-1.00000000000000))*(x1716)*(x1718)))+(((IkReal(-1.00000000000000))*(cj11)*(x1724)*(x1730)))+(((IkReal(-1.00000000000000))*(cj11)*(x1723)*(x1724)))+(((IkReal(-1.00000000000000))*(x1716)*(x1720)))); | |
evalcond[6]=((((IkReal(-0.0701403000000000))*(x1715)))+(((IkReal(-0.0620002000000000))*(x1720)*(x1726)))+(((IkReal(-0.0620002000000000))*(x1718)*(x1726)))+(((IkReal(0.0616850000000000))*(x1736)))+(((IkReal(-1.00000000000000))*(x1717)*(x1722)))+(((IkReal(-0.302000000000000))*(x1714)))+(((cj7)*(x1731)))+(((x1719)*(x1725)))+(((IkReal(0.0620002000000000))*(x1716)*(x1723)))+(((IkReal(0.0620002000000000))*(x1716)*(x1730)))+(((IkReal(-1.00000000000000))*(pz)*(x1727)))+(((IkReal(-0.00151567000000000))*(x1733)))+(((cj7)*(x1729)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(-0.0620002000000000))*(x1722)*(x1723)))+(((IkReal(-1.00000000000000))*(x1727)*(x1731)))+(((IkReal(0.0620002000000000))*(x1719)*(x1720)))+(((IkReal(0.0701403000000000))*(x1714)))+(((IkReal(-1.00000000000000))*(pz)*(x1724)))+(((x1725)*(x1726)))+(((IkReal(-0.302000000000000))*(x1715)))+(((IkReal(-0.0616850000000000))*(x1734)))+(((IkReal(-1.00000000000000))*(x1716)*(x1717)))+(((IkReal(0.00151567000000000))*(x1735)))+(((IkReal(-1.00000000000000))*(x1727)*(x1729)))+(((IkReal(-0.0620002000000000))*(x1722)*(x1730)))+(((IkReal(0.0620002000000000))*(x1718)*(x1719)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1737=((cj7)*(sj11)); | |
IkReal x1738=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1739=((cj11)*(cj7)); | |
IkReal x1740=((IkReal(1.00000000000000))*(cj7)); | |
if( IKabs(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(cj6)*(r02)*(x1740)))+(((IkReal(-1.00000000000000))*(r12)*(sj6)*(x1740))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(cj11)*(r21)*(x1738)))+(((r11)*(sj6)*(x1739)))+(((cj6)*(r00)*(x1737)))+(((cj6)*(r01)*(x1739)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1738)))+(((r10)*(sj6)*(x1737))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(cj6)*(r02)*(x1740)))+(((IkReal(-1.00000000000000))*(r12)*(sj6)*(x1740)))))))+IKsqr(((((IkReal(-1.00000000000000))*(cj11)*(r21)*(x1738)))+(((r11)*(sj6)*(x1739)))+(((cj6)*(r00)*(x1737)))+(((cj6)*(r01)*(x1739)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1738)))+(((r10)*(sj6)*(x1737)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(cj6)*(r02)*(x1740)))+(((IkReal(-1.00000000000000))*(r12)*(sj6)*(x1740)))))), ((((IkReal(-1.00000000000000))*(cj11)*(r21)*(x1738)))+(((r11)*(sj6)*(x1739)))+(((cj6)*(r00)*(x1737)))+(((cj6)*(r01)*(x1739)))+(((IkReal(-1.00000000000000))*(r20)*(sj11)*(x1738)))+(((r10)*(sj6)*(x1737))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x1741=IKcos(j8); | |
IkReal x1742=IKsin(j8); | |
IkReal x1743=((cj7)*(sj11)); | |
IkReal x1744=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1745=((r10)*(sj6)); | |
IkReal x1746=((cj11)*(sj7)); | |
IkReal x1747=((cj6)*(r00)); | |
IkReal x1748=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1749=((sj11)*(sj7)); | |
IkReal x1750=((cj6)*(r01)); | |
IkReal x1751=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1752=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1753=((cj11)*(cj7)); | |
IkReal x1754=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1755=((cj6)*(r02)); | |
IkReal x1756=((py)*(sj6)); | |
IkReal x1757=((r11)*(sj6)); | |
IkReal x1758=((cj6)*(px)); | |
IkReal x1759=((r12)*(sj6)); | |
IkReal x1760=((cj9)*(x1742)); | |
IkReal x1761=((sj9)*(x1741)); | |
IkReal x1762=((cj9)*(x1741)); | |
IkReal x1763=((sj9)*(x1742)); | |
evalcond[0]=((x1760)+(((IkReal(-1.00000000000000))*(r22)*(x1754)))+(((cj7)*(x1755)))+(((cj7)*(x1759)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1762)))+(((IkReal(-1.00000000000000))*(r22)*(x1751)))+(((IkReal(-1.00000000000000))*(x1754)*(x1759)))+(((IkReal(-1.00000000000000))*(x1754)*(x1755)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x1746)*(x1747)))+(x1761)+(((r21)*(x1743)))+(((x1749)*(x1750)))+(((x1749)*(x1757)))+(((IkReal(-1.00000000000000))*(x1745)*(x1746)))+(((IkReal(-1.00000000000000))*(x1748)*(x1753)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1746)*(x1748)))+(((IkReal(-1.00000000000000))*(x1743)*(x1750)))+(((x1745)*(x1753)))+(((IkReal(-1.00000000000000))*(x1763)))+(((r21)*(x1749)))+(((x1747)*(x1753)))+(((IkReal(-1.00000000000000))*(x1743)*(x1757)))); | |
evalcond[4]=((((x1745)*(x1749)))+(((x1747)*(x1749)))+(((x1746)*(x1757)))+(x1742)+(((r20)*(x1743)))+(((r21)*(x1753)))+(((x1746)*(x1750)))); | |
evalcond[5]=((((r20)*(x1749)))+(((IkReal(-1.00000000000000))*(cj11)*(x1750)*(x1751)))+(((r21)*(x1746)))+(x1741)+(((IkReal(-1.00000000000000))*(x1743)*(x1747)))+(((IkReal(-1.00000000000000))*(cj11)*(x1751)*(x1757)))+(((IkReal(-1.00000000000000))*(x1743)*(x1745)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(pz)*(x1754)))+(((IkReal(-0.00151567000000000))*(x1760)))+(((IkReal(0.0620002000000000))*(x1743)*(x1750)))+(((IkReal(-0.0701403000000000))*(x1742)))+(((IkReal(-0.0620002000000000))*(x1745)*(x1753)))+(((IkReal(-0.0620002000000000))*(x1747)*(x1753)))+(((cj7)*(x1756)))+(((IkReal(0.0620002000000000))*(x1743)*(x1757)))+(((IkReal(-0.302000000000000))*(x1741)))+(((IkReal(0.0616850000000000))*(x1763)))+(((cj7)*(x1758)))+(((x1746)*(x1752)))+(((IkReal(-1.00000000000000))*(x1744)*(x1749)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((x1752)*(x1753)))+(((IkReal(-0.0620002000000000))*(x1749)*(x1757)))+(((IkReal(-1.00000000000000))*(x1743)*(x1744)))+(((IkReal(-1.00000000000000))*(pz)*(x1751)))+(((IkReal(0.0620002000000000))*(x1745)*(x1746)))+(((IkReal(0.00151567000000000))*(x1762)))+(((IkReal(-0.302000000000000))*(x1742)))+(((IkReal(0.0701403000000000))*(x1741)))+(((IkReal(0.0620002000000000))*(x1746)*(x1747)))+(((IkReal(-1.00000000000000))*(x1754)*(x1758)))+(((IkReal(-1.00000000000000))*(x1754)*(x1756)))+(((IkReal(-0.0620002000000000))*(x1749)*(x1750)))+(((IkReal(-0.0616850000000000))*(x1761)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1764=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1765=((cj6)*(r02)); | |
IkReal x1766=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1767=((r12)*(sj6)); | |
if( IKabs(((gconst14)*(((((IkReal(-1.00000000000000))*(x1766)*(x1767)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x1765)*(x1766))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst14)*(((((IkReal(-1.00000000000000))*(x1764)*(x1767)))+(((IkReal(-1.00000000000000))*(x1764)*(x1765)))+(((IkReal(-1.00000000000000))*(r22)*(x1766))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst14)*(((((IkReal(-1.00000000000000))*(x1766)*(x1767)))+(((r22)*(sj7)))+(((IkReal(-1.00000000000000))*(x1765)*(x1766)))))), ((gconst14)*(((((IkReal(-1.00000000000000))*(x1764)*(x1767)))+(((IkReal(-1.00000000000000))*(x1764)*(x1765)))+(((IkReal(-1.00000000000000))*(r22)*(x1766))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x1768=IKcos(j8); | |
IkReal x1769=IKsin(j8); | |
IkReal x1770=((cj7)*(sj11)); | |
IkReal x1771=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1772=((r10)*(sj6)); | |
IkReal x1773=((cj11)*(sj7)); | |
IkReal x1774=((cj6)*(r00)); | |
IkReal x1775=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1776=((sj11)*(sj7)); | |
IkReal x1777=((cj6)*(r01)); | |
IkReal x1778=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1779=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1780=((cj11)*(cj7)); | |
IkReal x1781=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1782=((cj6)*(r02)); | |
IkReal x1783=((py)*(sj6)); | |
IkReal x1784=((r11)*(sj6)); | |
IkReal x1785=((cj6)*(px)); | |
IkReal x1786=((r12)*(sj6)); | |
IkReal x1787=((cj9)*(x1769)); | |
IkReal x1788=((sj9)*(x1768)); | |
IkReal x1789=((cj9)*(x1768)); | |
IkReal x1790=((sj9)*(x1769)); | |
evalcond[0]=((x1787)+(((cj7)*(x1786)))+(((cj7)*(x1782)))+(((IkReal(-1.00000000000000))*(r22)*(x1781)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1781)*(x1786)))+(((IkReal(-1.00000000000000))*(x1781)*(x1782)))+(((IkReal(-1.00000000000000))*(r22)*(x1778)))+(((IkReal(-1.00000000000000))*(x1789)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x1775)*(x1780)))+(((x1776)*(x1777)))+(x1788)+(((x1776)*(x1784)))+(((r21)*(x1770)))+(((IkReal(-1.00000000000000))*(x1773)*(x1774)))+(((IkReal(-1.00000000000000))*(x1772)*(x1773)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1790)))+(((IkReal(-1.00000000000000))*(x1770)*(x1784)))+(((r21)*(x1776)))+(((IkReal(-1.00000000000000))*(x1770)*(x1777)))+(((x1772)*(x1780)))+(((x1774)*(x1780)))+(((IkReal(-1.00000000000000))*(x1773)*(x1775)))); | |
evalcond[4]=((((r20)*(x1770)))+(((x1773)*(x1784)))+(x1769)+(((x1773)*(x1777)))+(((r21)*(x1780)))+(((x1774)*(x1776)))+(((x1772)*(x1776)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(x1770)*(x1774)))+(((IkReal(-1.00000000000000))*(cj11)*(x1777)*(x1778)))+(x1768)+(((IkReal(-1.00000000000000))*(cj11)*(x1778)*(x1784)))+(((r21)*(x1773)))+(((IkReal(-1.00000000000000))*(x1770)*(x1772)))+(((r20)*(x1776)))); | |
evalcond[6]=((((cj7)*(x1783)))+(((IkReal(0.0616850000000000))*(x1790)))+(((x1773)*(x1779)))+(((IkReal(-0.0620002000000000))*(x1774)*(x1780)))+(((IkReal(0.0620002000000000))*(x1770)*(x1784)))+(((IkReal(-0.302000000000000))*(x1768)))+(((IkReal(-0.00151567000000000))*(x1787)))+(((IkReal(-1.00000000000000))*(x1771)*(x1776)))+(((cj7)*(x1785)))+(((IkReal(-0.0701403000000000))*(x1769)))+(((IkReal(-0.0620002000000000))*(x1772)*(x1780)))+(((IkReal(0.0620002000000000))*(x1770)*(x1777)))+(((IkReal(-1.00000000000000))*(pz)*(x1781)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(-0.302000000000000))*(x1769)))+(((IkReal(-0.0620002000000000))*(x1776)*(x1784)))+(((IkReal(-0.0620002000000000))*(x1776)*(x1777)))+(((IkReal(-1.00000000000000))*(pz)*(x1778)))+(((IkReal(-1.00000000000000))*(x1770)*(x1771)))+(((IkReal(-1.00000000000000))*(x1781)*(x1785)))+(((IkReal(0.00151567000000000))*(x1789)))+(((x1779)*(x1780)))+(((IkReal(0.0620002000000000))*(x1772)*(x1773)))+(((IkReal(-1.00000000000000))*(x1781)*(x1783)))+(((IkReal(-0.0616850000000000))*(x1788)))+(((IkReal(0.0620002000000000))*(x1773)*(x1774)))+(((IkReal(0.0701403000000000))*(x1768)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1791=((cj6)*(r10)); | |
IkReal x1792=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1793=((cj6)*(r11)); | |
IkReal x1794=((r01)*(sj6)); | |
IkReal x1795=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1796=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1797=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1798=((r00)*(sj6)); | |
IkReal x1799=((IkReal(1.00000000000000))*(sj11)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.71238898038469))+(j10)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(sj9)))+(((IkReal(-1.00000000000000))*(r12)*(x1792)))); | |
evalcond[2]=((((sj11)*(x1793)))+(cj9)+(((cj11)*(x1798)))+(((IkReal(-1.00000000000000))*(x1791)*(x1797)))+(((IkReal(-1.00000000000000))*(x1794)*(x1799)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1798)*(x1799)))+(((IkReal(-1.00000000000000))*(x1794)*(x1797)))+(((cj11)*(x1793)))+(((sj11)*(x1791)))); | |
evalcond[4]=((IkReal(-0.0100933000000000))+(((IkReal(-0.00151567000000000))*(sj9)))+(((IkReal(-0.0616850000000000))*(cj9)))+(((IkReal(-1.00000000000000))*(py)*(x1792)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(x1793)*(x1795)))+(((x1794)*(x1795)))+(((IkReal(-1.00000000000000))*(x1796)*(x1798)))+(((x1791)*(x1796)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst15; | |
gconst15=IKsign(cj9); | |
dummyeval[0]=cj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
dummyeval[0]=cj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
dummyeval[0]=cj9; | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal evalcond[7]; | |
IkReal x1800=((r01)*(sj6)); | |
IkReal x1801=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1802=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1803=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1804=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1805=((cj6)*(r10)); | |
IkReal x1806=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1807=((r00)*(sj6)); | |
IkReal x1808=((cj6)*(r11)); | |
IkReal x1809=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1810=((r12)*(sj6)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.57079632679490))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(r12)*(x1803)))+(((r02)*(sj6)))); | |
evalcond[2]=((((cj11)*(x1807)))+(((IkReal(-1.00000000000000))*(x1800)*(x1809)))+(((IkReal(-1.00000000000000))*(x1801)*(x1805)))+(((sj11)*(x1808)))); | |
evalcond[3]=((((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(sj7)*(x1802)))+(((cj7)*(x1810)))); | |
evalcond[4]=((((sj11)*(x1805)))+(((IkReal(-1.00000000000000))*(x1807)*(x1809)))+(((IkReal(-1.00000000000000))*(x1800)*(x1801)))+(((cj11)*(x1808)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1803)))+(((IkReal(-1.00000000000000))*(cj7)*(x1802)))+(((IkReal(-1.00000000000000))*(sj7)*(x1810)))); | |
evalcond[6]=((IkReal(-0.0116089700000000))+(((IkReal(-1.00000000000000))*(py)*(x1803)))+(((x1805)*(x1806)))+(((IkReal(-1.00000000000000))*(x1806)*(x1807)))+(((px)*(sj6)))+(((x1800)*(x1804)))+(((IkReal(-1.00000000000000))*(x1804)*(x1808)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1811=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1812=((sj6)*(sj7)); | |
IkReal x1813=((cj7)*(r21)); | |
IkReal x1814=((cj7)*(r20)); | |
IkReal x1815=((cj6)*(sj7)); | |
if( IKabs(((((r10)*(sj11)*(x1812)))+(((cj11)*(r01)*(x1815)))+(((r00)*(sj11)*(x1815)))+(((sj11)*(x1814)))+(((cj11)*(x1813)))+(((cj11)*(r11)*(x1812))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((cj11)*(x1814)))+(((IkReal(-1.00000000000000))*(r11)*(x1811)*(x1812)))+(((IkReal(-1.00000000000000))*(x1811)*(x1813)))+(((cj11)*(r10)*(x1812)))+(((cj11)*(r00)*(x1815)))+(((IkReal(-1.00000000000000))*(r01)*(x1811)*(x1815))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((r10)*(sj11)*(x1812)))+(((cj11)*(r01)*(x1815)))+(((r00)*(sj11)*(x1815)))+(((sj11)*(x1814)))+(((cj11)*(x1813)))+(((cj11)*(r11)*(x1812)))))+IKsqr(((((cj11)*(x1814)))+(((IkReal(-1.00000000000000))*(r11)*(x1811)*(x1812)))+(((IkReal(-1.00000000000000))*(x1811)*(x1813)))+(((cj11)*(r10)*(x1812)))+(((cj11)*(r00)*(x1815)))+(((IkReal(-1.00000000000000))*(r01)*(x1811)*(x1815)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((r10)*(sj11)*(x1812)))+(((cj11)*(r01)*(x1815)))+(((r00)*(sj11)*(x1815)))+(((sj11)*(x1814)))+(((cj11)*(x1813)))+(((cj11)*(r11)*(x1812)))), ((((cj11)*(x1814)))+(((IkReal(-1.00000000000000))*(r11)*(x1811)*(x1812)))+(((IkReal(-1.00000000000000))*(x1811)*(x1813)))+(((cj11)*(r10)*(x1812)))+(((cj11)*(r00)*(x1815)))+(((IkReal(-1.00000000000000))*(r01)*(x1811)*(x1815))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1816=IKcos(j8); | |
IkReal x1817=IKsin(j8); | |
IkReal x1818=((cj7)*(sj11)); | |
IkReal x1819=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1820=((r10)*(sj6)); | |
IkReal x1821=((cj11)*(sj7)); | |
IkReal x1822=((cj6)*(r00)); | |
IkReal x1823=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1824=((sj11)*(sj7)); | |
IkReal x1825=((cj6)*(r01)); | |
IkReal x1826=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1827=((cj11)*(cj7)); | |
IkReal x1828=((IkReal(1.00000000000000))*(pz)); | |
IkReal x1829=((py)*(sj6)); | |
IkReal x1830=((r11)*(sj6)); | |
IkReal x1831=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1832=((cj6)*(px)); | |
IkReal x1833=((IkReal(1.00000000000000))*(x1817)); | |
evalcond[0]=((((x1824)*(x1830)))+(((IkReal(-1.00000000000000))*(x1823)*(x1827)))+(x1816)+(((x1824)*(x1825)))+(((IkReal(-1.00000000000000))*(x1821)*(x1822)))+(((IkReal(-1.00000000000000))*(x1820)*(x1821)))+(((r21)*(x1818)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1833)))+(((IkReal(-1.00000000000000))*(x1818)*(x1830)))+(((x1822)*(x1827)))+(((IkReal(-1.00000000000000))*(x1821)*(x1823)))+(((IkReal(-1.00000000000000))*(x1818)*(x1825)))+(((r21)*(x1824)))+(((x1820)*(x1827)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x1833)))+(((x1821)*(x1830)))+(((x1821)*(x1825)))+(((x1822)*(x1824)))+(((r20)*(x1818)))+(((x1820)*(x1824)))+(((r21)*(x1827)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1816)))+(((IkReal(-1.00000000000000))*(x1825)*(x1827)))+(((IkReal(-1.00000000000000))*(x1818)*(x1822)))+(((r21)*(x1821)))+(((IkReal(-1.00000000000000))*(x1818)*(x1820)))+(((IkReal(-1.00000000000000))*(x1827)*(x1830)))+(((r20)*(x1824)))); | |
evalcond[4]=((((IkReal(-0.00845530000000000))*(x1817)))+(((IkReal(0.0620002000000000))*(x1818)*(x1825)))+(((cj7)*(x1829)))+(((IkReal(-0.0620002000000000))*(x1820)*(x1827)))+(((cj7)*(x1832)))+(((IkReal(-1.00000000000000))*(x1819)*(x1824)))+(((IkReal(-0.0620002000000000))*(x1822)*(x1827)))+(((IkReal(-1.00000000000000))*(sj7)*(x1828)))+(((IkReal(-0.302000000000000))*(x1816)))+(((x1821)*(x1826)))+(((IkReal(0.0620002000000000))*(x1818)*(x1830)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((IkReal(-1.00000000000000))*(cj7)*(x1828)))+(((IkReal(-1.00000000000000))*(x1831)*(x1832)))+(((IkReal(-1.00000000000000))*(x1818)*(x1819)))+(((IkReal(-0.0620002000000000))*(x1824)*(x1825)))+(((IkReal(-1.00000000000000))*(x1829)*(x1831)))+(((IkReal(-0.302000000000000))*(x1817)))+(((IkReal(0.0620002000000000))*(x1820)*(x1821)))+(((IkReal(-0.0620002000000000))*(x1824)*(x1830)))+(((IkReal(0.0620002000000000))*(x1821)*(x1822)))+(((IkReal(0.00845530000000000))*(x1816)))+(((x1826)*(x1827)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1834=((r01)*(sj6)); | |
IkReal x1835=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1836=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1837=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1838=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1839=((cj6)*(r10)); | |
IkReal x1840=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1841=((r00)*(sj6)); | |
IkReal x1842=((cj6)*(r11)); | |
IkReal x1843=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1844=((r12)*(sj6)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.71238898038469))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((IkReal(1.00000000000000))+(((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1837)))); | |
evalcond[2]=((((cj11)*(x1841)))+(((sj11)*(x1842)))+(((IkReal(-1.00000000000000))*(x1835)*(x1839)))+(((IkReal(-1.00000000000000))*(x1834)*(x1843)))); | |
evalcond[3]=((((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(sj7)*(x1836)))+(((cj7)*(x1844)))); | |
evalcond[4]=((((cj11)*(x1842)))+(((IkReal(-1.00000000000000))*(x1841)*(x1843)))+(((IkReal(-1.00000000000000))*(x1834)*(x1835)))+(((sj11)*(x1839)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(r02)*(sj7)*(x1837)))+(((IkReal(-1.00000000000000))*(cj7)*(x1836)))+(((IkReal(-1.00000000000000))*(sj7)*(x1844)))); | |
evalcond[6]=((IkReal(-0.00857763000000000))+(((x1834)*(x1838)))+(((IkReal(-1.00000000000000))*(x1840)*(x1841)))+(((x1839)*(x1840)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(py)*(x1837)))+(((IkReal(-1.00000000000000))*(x1838)*(x1842)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1845=((cj7)*(r20)); | |
IkReal x1846=((cj7)*(r21)); | |
IkReal x1847=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1848=((sj11)*(sj7)); | |
IkReal x1849=((cj6)*(r01)); | |
IkReal x1850=((r11)*(sj6)); | |
IkReal x1851=((cj11)*(sj7)); | |
IkReal x1852=((cj6)*(r00)); | |
IkReal x1853=((r10)*(sj6)*(sj7)); | |
if( IKabs(((((x1850)*(x1851)))+(((x1849)*(x1851)))+(((sj11)*(x1845)))+(((cj11)*(x1846)))+(((r10)*(sj6)*(x1848)))+(((x1848)*(x1852))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((x1848)*(x1850)))+(((IkReal(-1.00000000000000))*(sj7)*(x1847)*(x1852)))+(((IkReal(-1.00000000000000))*(x1847)*(x1853)))+(((sj11)*(x1846)))+(((IkReal(-1.00000000000000))*(x1845)*(x1847)))+(((x1848)*(x1849))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((x1850)*(x1851)))+(((x1849)*(x1851)))+(((sj11)*(x1845)))+(((cj11)*(x1846)))+(((r10)*(sj6)*(x1848)))+(((x1848)*(x1852)))))+IKsqr(((((x1848)*(x1850)))+(((IkReal(-1.00000000000000))*(sj7)*(x1847)*(x1852)))+(((IkReal(-1.00000000000000))*(x1847)*(x1853)))+(((sj11)*(x1846)))+(((IkReal(-1.00000000000000))*(x1845)*(x1847)))+(((x1848)*(x1849)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((x1850)*(x1851)))+(((x1849)*(x1851)))+(((sj11)*(x1845)))+(((cj11)*(x1846)))+(((r10)*(sj6)*(x1848)))+(((x1848)*(x1852)))), ((((x1848)*(x1850)))+(((IkReal(-1.00000000000000))*(sj7)*(x1847)*(x1852)))+(((IkReal(-1.00000000000000))*(x1847)*(x1853)))+(((sj11)*(x1846)))+(((IkReal(-1.00000000000000))*(x1845)*(x1847)))+(((x1848)*(x1849))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1854=IKsin(j8); | |
IkReal x1855=IKcos(j8); | |
IkReal x1856=((cj7)*(sj11)); | |
IkReal x1857=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1858=((r10)*(sj6)); | |
IkReal x1859=((cj11)*(sj7)); | |
IkReal x1860=((cj6)*(r00)); | |
IkReal x1861=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1862=((sj11)*(sj7)); | |
IkReal x1863=((cj6)*(r01)); | |
IkReal x1864=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1865=((cj11)*(cj7)); | |
IkReal x1866=((IkReal(1.00000000000000))*(pz)); | |
IkReal x1867=((py)*(sj6)); | |
IkReal x1868=((r11)*(sj6)); | |
IkReal x1869=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1870=((cj6)*(px)); | |
IkReal x1871=((IkReal(1.00000000000000))*(x1855)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(x1861)*(x1865)))+(((IkReal(-1.00000000000000))*(x1858)*(x1859)))+(((r21)*(x1856)))+(((x1862)*(x1868)))+(((IkReal(-1.00000000000000))*(x1871)))+(((IkReal(-1.00000000000000))*(x1859)*(x1860)))+(((x1862)*(x1863)))); | |
evalcond[1]=((((x1860)*(x1865)))+(((IkReal(-1.00000000000000))*(x1856)*(x1863)))+(x1854)+(((x1858)*(x1865)))+(((r21)*(x1862)))+(((IkReal(-1.00000000000000))*(x1859)*(x1861)))+(((IkReal(-1.00000000000000))*(x1856)*(x1868)))); | |
evalcond[2]=((((x1858)*(x1862)))+(((x1860)*(x1862)))+(((r21)*(x1865)))+(((x1859)*(x1863)))+(((r20)*(x1856)))+(((x1859)*(x1868)))+(((IkReal(-1.00000000000000))*(x1854)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1865)*(x1868)))+(((IkReal(-1.00000000000000))*(x1863)*(x1865)))+(((IkReal(-1.00000000000000))*(x1856)*(x1858)))+(((IkReal(-1.00000000000000))*(x1856)*(x1860)))+(((r20)*(x1862)))+(((IkReal(-1.00000000000000))*(x1871)))+(((r21)*(x1859)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(sj7)*(x1866)))+(((IkReal(-0.302000000000000))*(x1855)))+(((IkReal(-0.0620002000000000))*(x1860)*(x1865)))+(((cj7)*(x1867)))+(((IkReal(-0.0620002000000000))*(x1858)*(x1865)))+(((IkReal(-0.131825300000000))*(x1854)))+(((IkReal(-1.00000000000000))*(x1857)*(x1862)))+(((cj7)*(x1870)))+(((IkReal(0.0620002000000000))*(x1856)*(x1868)))+(((IkReal(0.0620002000000000))*(x1856)*(x1863)))+(((x1859)*(x1864)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((x1864)*(x1865)))+(((IkReal(0.0620002000000000))*(x1858)*(x1859)))+(((IkReal(-0.0620002000000000))*(x1862)*(x1863)))+(((IkReal(0.131825300000000))*(x1855)))+(((IkReal(-0.302000000000000))*(x1854)))+(((IkReal(-1.00000000000000))*(x1869)*(x1870)))+(((IkReal(-0.0620002000000000))*(x1862)*(x1868)))+(((IkReal(-1.00000000000000))*(x1856)*(x1857)))+(((IkReal(0.0620002000000000))*(x1859)*(x1860)))+(((IkReal(-1.00000000000000))*(cj7)*(x1866)))+(((IkReal(-1.00000000000000))*(x1867)*(x1869)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1872=((IkReal(1.00000000000000))*(cj7)); | |
if( IKabs(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((cj7)*(r12)*(sj6)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(cj11)*(r11)*(sj6)*(x1872)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(sj6)*(x1872)))+(((cj11)*(r21)*(sj7)))+(((r20)*(sj11)*(sj7)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj11)*(x1872)))+(((IkReal(-1.00000000000000))*(cj11)*(cj6)*(r01)*(x1872))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((cj7)*(r12)*(sj6)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))))))+IKsqr(((((IkReal(-1.00000000000000))*(cj11)*(r11)*(sj6)*(x1872)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(sj6)*(x1872)))+(((cj11)*(r21)*(sj7)))+(((r20)*(sj11)*(sj7)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj11)*(x1872)))+(((IkReal(-1.00000000000000))*(cj11)*(cj6)*(r01)*(x1872)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((cj7)*(r12)*(sj6)))+(((cj6)*(cj7)*(r02)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))))), ((((IkReal(-1.00000000000000))*(cj11)*(r11)*(sj6)*(x1872)))+(((IkReal(-1.00000000000000))*(r10)*(sj11)*(sj6)*(x1872)))+(((cj11)*(r21)*(sj7)))+(((r20)*(sj11)*(sj7)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(sj11)*(x1872)))+(((IkReal(-1.00000000000000))*(cj11)*(cj6)*(r01)*(x1872))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x1873=IKcos(j8); | |
IkReal x1874=IKsin(j8); | |
IkReal x1875=((cj7)*(sj11)); | |
IkReal x1876=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1877=((r10)*(sj6)); | |
IkReal x1878=((cj11)*(sj7)); | |
IkReal x1879=((cj6)*(r00)); | |
IkReal x1880=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1881=((sj11)*(sj7)); | |
IkReal x1882=((cj6)*(r01)); | |
IkReal x1883=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1884=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1885=((cj11)*(cj7)); | |
IkReal x1886=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1887=((cj6)*(r02)); | |
IkReal x1888=((py)*(sj6)); | |
IkReal x1889=((r11)*(sj6)); | |
IkReal x1890=((cj6)*(px)); | |
IkReal x1891=((r12)*(sj6)); | |
IkReal x1892=((IkReal(1.00000000000000))*(x1874)); | |
IkReal x1893=((sj9)*(x1873)); | |
IkReal x1894=((cj9)*(x1873)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(cj9)*(x1892)))+(((cj7)*(x1891)))+(((cj7)*(x1887)))+(((IkReal(-1.00000000000000))*(r22)*(x1886)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r22)*(x1883)))+(((IkReal(-1.00000000000000))*(x1886)*(x1891)))+(((IkReal(-1.00000000000000))*(x1886)*(x1887)))+(x1894)); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x1877)*(x1878)))+(((IkReal(-1.00000000000000))*(x1878)*(x1879)))+(((x1881)*(x1882)))+(((r21)*(x1875)))+(((IkReal(-1.00000000000000))*(x1880)*(x1885)))+(x1893)+(((x1881)*(x1889)))); | |
evalcond[3]=((((r21)*(x1881)))+(((IkReal(-1.00000000000000))*(x1875)*(x1889)))+(((IkReal(-1.00000000000000))*(sj9)*(x1892)))+(((x1877)*(x1885)))+(((IkReal(-1.00000000000000))*(x1875)*(x1882)))+(((x1879)*(x1885)))+(((IkReal(-1.00000000000000))*(x1878)*(x1880)))); | |
evalcond[4]=((((x1879)*(x1881)))+(((IkReal(-1.00000000000000))*(x1892)))+(((r20)*(x1875)))+(((r21)*(x1885)))+(((x1878)*(x1889)))+(((x1877)*(x1881)))+(((x1878)*(x1882)))); | |
evalcond[5]=((((r20)*(x1881)))+(((IkReal(-1.00000000000000))*(x1875)*(x1879)))+(((IkReal(-1.00000000000000))*(x1873)))+(((IkReal(-1.00000000000000))*(cj11)*(x1882)*(x1883)))+(((IkReal(-1.00000000000000))*(x1875)*(x1877)))+(((r21)*(x1878)))+(((IkReal(-1.00000000000000))*(cj11)*(x1883)*(x1889)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(x1876)*(x1881)))+(((IkReal(-0.00151567000000000))*(cj9)*(x1874)))+(((IkReal(0.0616850000000000))*(sj9)*(x1874)))+(((IkReal(-0.302000000000000))*(x1873)))+(((IkReal(-0.0620002000000000))*(x1879)*(x1885)))+(((cj7)*(x1888)))+(((IkReal(0.0620002000000000))*(x1875)*(x1882)))+(((x1878)*(x1884)))+(((IkReal(-0.0701403000000000))*(x1874)))+(((IkReal(-0.0620002000000000))*(x1877)*(x1885)))+(((cj7)*(x1890)))+(((IkReal(-1.00000000000000))*(pz)*(x1886)))+(((IkReal(0.0620002000000000))*(x1875)*(x1889)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(-0.0620002000000000))*(x1881)*(x1889)))+(((IkReal(0.0701403000000000))*(x1873)))+(((IkReal(-1.00000000000000))*(pz)*(x1883)))+(((x1884)*(x1885)))+(((IkReal(-0.302000000000000))*(x1874)))+(((IkReal(-1.00000000000000))*(x1886)*(x1890)))+(((IkReal(-1.00000000000000))*(x1886)*(x1888)))+(((IkReal(-0.0620002000000000))*(x1881)*(x1882)))+(((IkReal(0.00151567000000000))*(x1894)))+(((IkReal(0.0620002000000000))*(x1878)*(x1879)))+(((IkReal(-0.0616850000000000))*(x1893)))+(((IkReal(0.0620002000000000))*(x1877)*(x1878)))+(((IkReal(-1.00000000000000))*(x1875)*(x1876)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1895=((sj6)*(sj7)); | |
IkReal x1896=((cj6)*(sj7)); | |
if( IKabs(((((cj11)*(cj7)*(r21)))+(((r00)*(sj11)*(x1896)))+(((cj11)*(r11)*(x1895)))+(((cj7)*(r20)*(sj11)))+(((r10)*(sj11)*(x1895)))+(((cj11)*(r01)*(x1896))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((cj7)*(r22)))+(((r02)*(x1896)))+(((r12)*(x1895))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((cj11)*(cj7)*(r21)))+(((r00)*(sj11)*(x1896)))+(((cj11)*(r11)*(x1895)))+(((cj7)*(r20)*(sj11)))+(((r10)*(sj11)*(x1895)))+(((cj11)*(r01)*(x1896)))))+IKsqr(((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((cj7)*(r22)))+(((r02)*(x1896)))+(((r12)*(x1895)))))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((cj11)*(cj7)*(r21)))+(((r00)*(sj11)*(x1896)))+(((cj11)*(r11)*(x1895)))+(((cj7)*(r20)*(sj11)))+(((r10)*(sj11)*(x1895)))+(((cj11)*(r01)*(x1896)))), ((((IKabs(cj9) != 0)?((IkReal)1/(cj9)):(IkReal)1.0e30))*(((((cj7)*(r22)))+(((r02)*(x1896)))+(((r12)*(x1895))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x1897=IKcos(j8); | |
IkReal x1898=IKsin(j8); | |
IkReal x1899=((cj7)*(sj11)); | |
IkReal x1900=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1901=((r10)*(sj6)); | |
IkReal x1902=((cj11)*(sj7)); | |
IkReal x1903=((cj6)*(r00)); | |
IkReal x1904=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1905=((sj11)*(sj7)); | |
IkReal x1906=((cj6)*(r01)); | |
IkReal x1907=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1908=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1909=((cj11)*(cj7)); | |
IkReal x1910=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1911=((cj6)*(r02)); | |
IkReal x1912=((py)*(sj6)); | |
IkReal x1913=((r11)*(sj6)); | |
IkReal x1914=((cj6)*(px)); | |
IkReal x1915=((r12)*(sj6)); | |
IkReal x1916=((IkReal(1.00000000000000))*(x1898)); | |
IkReal x1917=((sj9)*(x1897)); | |
IkReal x1918=((cj9)*(x1897)); | |
evalcond[0]=((((cj7)*(x1911)))+(((IkReal(-1.00000000000000))*(cj9)*(x1916)))+(((cj7)*(x1915)))+(((IkReal(-1.00000000000000))*(r22)*(x1910)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1910)*(x1915)))+(((IkReal(-1.00000000000000))*(x1910)*(x1911)))+(((IkReal(-1.00000000000000))*(r22)*(x1907)))+(x1918)); | |
evalcond[2]=((((x1905)*(x1906)))+(((r21)*(x1899)))+(x1917)+(((IkReal(-1.00000000000000))*(x1904)*(x1909)))+(((x1905)*(x1913)))+(((IkReal(-1.00000000000000))*(x1902)*(x1903)))+(((IkReal(-1.00000000000000))*(x1901)*(x1902)))); | |
evalcond[3]=((((x1903)*(x1909)))+(((IkReal(-1.00000000000000))*(sj9)*(x1916)))+(((IkReal(-1.00000000000000))*(x1899)*(x1913)))+(((IkReal(-1.00000000000000))*(x1902)*(x1904)))+(((r21)*(x1905)))+(((IkReal(-1.00000000000000))*(x1899)*(x1906)))+(((x1901)*(x1909)))); | |
evalcond[4]=((((x1902)*(x1906)))+(((x1903)*(x1905)))+(((r20)*(x1899)))+(((x1901)*(x1905)))+(((IkReal(-1.00000000000000))*(x1916)))+(((r21)*(x1909)))+(((x1902)*(x1913)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj11)*(x1906)*(x1907)))+(((IkReal(-1.00000000000000))*(x1899)*(x1901)))+(((r21)*(x1902)))+(((IkReal(-1.00000000000000))*(x1897)))+(((IkReal(-1.00000000000000))*(x1899)*(x1903)))+(((IkReal(-1.00000000000000))*(cj11)*(x1907)*(x1913)))+(((r20)*(x1905)))); | |
evalcond[6]=((((IkReal(-0.00151567000000000))*(cj9)*(x1898)))+(((IkReal(0.0616850000000000))*(sj9)*(x1898)))+(((cj7)*(x1912)))+(((IkReal(-1.00000000000000))*(pz)*(x1910)))+(((IkReal(0.0620002000000000))*(x1899)*(x1913)))+(((IkReal(-0.0620002000000000))*(x1903)*(x1909)))+(((IkReal(0.0620002000000000))*(x1899)*(x1906)))+(((IkReal(-0.302000000000000))*(x1897)))+(((cj7)*(x1914)))+(((x1902)*(x1908)))+(((IkReal(-0.0701403000000000))*(x1898)))+(((IkReal(-0.0620002000000000))*(x1901)*(x1909)))+(((IkReal(-1.00000000000000))*(x1900)*(x1905)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(-0.0620002000000000))*(x1905)*(x1906)))+(((IkReal(0.00151567000000000))*(x1918)))+(((IkReal(-1.00000000000000))*(pz)*(x1907)))+(((IkReal(-0.0620002000000000))*(x1905)*(x1913)))+(((IkReal(0.0620002000000000))*(x1901)*(x1902)))+(((x1908)*(x1909)))+(((IkReal(-1.00000000000000))*(x1899)*(x1900)))+(((IkReal(0.0620002000000000))*(x1902)*(x1903)))+(((IkReal(-0.0616850000000000))*(x1917)))+(((IkReal(-0.302000000000000))*(x1898)))+(((IkReal(-1.00000000000000))*(x1910)*(x1914)))+(((IkReal(-1.00000000000000))*(x1910)*(x1912)))+(((IkReal(0.0701403000000000))*(x1897)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1919=((r12)*(sj6)); | |
IkReal x1920=((cj6)*(r02)); | |
if( IKabs(((gconst15)*(((((cj7)*(x1919)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj7)*(x1920))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst15)*(((((cj7)*(r22)))+(((sj7)*(x1919)))+(((sj7)*(x1920))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst15)*(((((cj7)*(x1919)))+(((IkReal(-1.00000000000000))*(r22)*(sj7)))+(((cj7)*(x1920)))))), ((gconst15)*(((((cj7)*(r22)))+(((sj7)*(x1919)))+(((sj7)*(x1920))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x1921=IKcos(j8); | |
IkReal x1922=IKsin(j8); | |
IkReal x1923=((cj7)*(sj11)); | |
IkReal x1924=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1925=((r10)*(sj6)); | |
IkReal x1926=((cj11)*(sj7)); | |
IkReal x1927=((cj6)*(r00)); | |
IkReal x1928=((IkReal(1.00000000000000))*(r20)); | |
IkReal x1929=((sj11)*(sj7)); | |
IkReal x1930=((cj6)*(r01)); | |
IkReal x1931=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1932=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x1933=((cj11)*(cj7)); | |
IkReal x1934=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1935=((cj6)*(r02)); | |
IkReal x1936=((py)*(sj6)); | |
IkReal x1937=((r11)*(sj6)); | |
IkReal x1938=((cj6)*(px)); | |
IkReal x1939=((r12)*(sj6)); | |
IkReal x1940=((IkReal(1.00000000000000))*(x1922)); | |
IkReal x1941=((sj9)*(x1921)); | |
IkReal x1942=((cj9)*(x1921)); | |
evalcond[0]=((((cj7)*(x1939)))+(((IkReal(-1.00000000000000))*(cj9)*(x1940)))+(((IkReal(-1.00000000000000))*(r22)*(x1934)))+(((cj7)*(x1935)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x1934)*(x1939)))+(x1942)+(((IkReal(-1.00000000000000))*(r22)*(x1931)))+(((IkReal(-1.00000000000000))*(x1934)*(x1935)))); | |
evalcond[2]=((x1941)+(((IkReal(-1.00000000000000))*(x1926)*(x1927)))+(((IkReal(-1.00000000000000))*(x1928)*(x1933)))+(((x1929)*(x1937)))+(((x1929)*(x1930)))+(((IkReal(-1.00000000000000))*(x1925)*(x1926)))+(((r21)*(x1923)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x1923)*(x1930)))+(((x1925)*(x1933)))+(((IkReal(-1.00000000000000))*(x1926)*(x1928)))+(((IkReal(-1.00000000000000))*(x1923)*(x1937)))+(((x1927)*(x1933)))+(((IkReal(-1.00000000000000))*(sj9)*(x1940)))+(((r21)*(x1929)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(x1940)))+(((r21)*(x1933)))+(((x1925)*(x1929)))+(((r20)*(x1923)))+(((x1927)*(x1929)))+(((x1926)*(x1930)))+(((x1926)*(x1937)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(x1923)*(x1927)))+(((r21)*(x1926)))+(((IkReal(-1.00000000000000))*(x1921)))+(((IkReal(-1.00000000000000))*(cj11)*(x1930)*(x1931)))+(((IkReal(-1.00000000000000))*(x1923)*(x1925)))+(((r20)*(x1929)))+(((IkReal(-1.00000000000000))*(cj11)*(x1931)*(x1937)))); | |
evalcond[6]=((((IkReal(0.0620002000000000))*(x1923)*(x1930)))+(((IkReal(-1.00000000000000))*(x1924)*(x1929)))+(((IkReal(0.0616850000000000))*(sj9)*(x1922)))+(((IkReal(-0.302000000000000))*(x1921)))+(((IkReal(0.0620002000000000))*(x1923)*(x1937)))+(((cj7)*(x1936)))+(((IkReal(-1.00000000000000))*(pz)*(x1934)))+(((IkReal(-0.0620002000000000))*(x1925)*(x1933)))+(((IkReal(-0.0701403000000000))*(x1922)))+(((cj7)*(x1938)))+(((x1926)*(x1932)))+(((IkReal(-0.0620002000000000))*(x1927)*(x1933)))+(((IkReal(-0.00151567000000000))*(cj9)*(x1922)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(-1.00000000000000))*(x1934)*(x1936)))+(((x1932)*(x1933)))+(((IkReal(0.0620002000000000))*(x1925)*(x1926)))+(((IkReal(-1.00000000000000))*(x1934)*(x1938)))+(((IkReal(-1.00000000000000))*(x1923)*(x1924)))+(((IkReal(-1.00000000000000))*(pz)*(x1931)))+(((IkReal(-0.0616850000000000))*(x1941)))+(((IkReal(0.0701403000000000))*(x1921)))+(((IkReal(0.00151567000000000))*(x1942)))+(((IkReal(-0.0620002000000000))*(x1929)*(x1937)))+(((IkReal(-0.0620002000000000))*(x1929)*(x1930)))+(((IkReal(-0.302000000000000))*(x1922)))+(((IkReal(0.0620002000000000))*(x1926)*(x1927)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x1943=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x1944=((r01)*(sj6)); | |
IkReal x1945=((cj6)*(sj7)); | |
IkReal x1946=((r01)*(sj11)); | |
IkReal x1947=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x1948=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x1949=((cj11)*(r10)); | |
IkReal x1950=((r11)*(sj11)); | |
IkReal x1951=((sj6)*(sj7)); | |
IkReal x1952=((r21)*(sj11)); | |
IkReal x1953=((r00)*(sj6)); | |
IkReal x1954=((cj7)*(sj6)); | |
IkReal x1955=((cj6)*(r10)); | |
IkReal x1956=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1957=((cj11)*(cj6)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(6.28318530717959))+(j9)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x1947)))); | |
evalcond[2]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(x1943)*(x1955)))+(((cj6)*(x1950)))+(((IkReal(-1.00000000000000))*(x1944)*(x1956)))+(((cj11)*(x1953)))); | |
evalcond[3]=((((sj11)*(x1955)))+(((r11)*(x1957)))+(((IkReal(-1.00000000000000))*(x1943)*(x1944)))+(((IkReal(-1.00000000000000))*(x1953)*(x1956)))); | |
evalcond[4]=((IkReal(0.0515917000000000))+(((IkReal(0.0620002000000000))*(cj6)*(x1949)))+(((IkReal(-0.0620002000000000))*(cj11)*(x1953)))+(((IkReal(-1.00000000000000))*(py)*(x1947)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(cj6)*(r11)*(x1948)))+(((x1944)*(x1948)))); | |
evalcond[5]=((((x1945)*(x1946)))+(((x1950)*(x1951)))+(((IkReal(-1.00000000000000))*(r10)*(x1943)*(x1951)))+(((IkReal(-1.00000000000000))*(r00)*(x1943)*(x1945)))+(((cj7)*(x1952)))+(((IkReal(-1.00000000000000))*(cj7)*(r20)*(x1943)))); | |
evalcond[6]=((((IkReal(-1.00000000000000))*(cj7)*(x1946)*(x1947)))+(((x1949)*(x1954)))+(((IkReal(-1.00000000000000))*(r20)*(sj7)*(x1943)))+(((IkReal(-1.00000000000000))*(x1950)*(x1954)))+(((sj7)*(x1952)))+(((cj7)*(r00)*(x1957)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst16; | |
gconst16=IKsign((((cj10)*(cj10))+((sj10)*(sj10)))); | |
dummyeval[0]=(((cj10)*(cj10))+((sj10)*(sj10))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal dummyeval[1]; | |
IkReal gconst17; | |
gconst17=IKsign((((cj10)*(cj10))+((sj10)*(sj10)))); | |
dummyeval[0]=(((cj10)*(cj10))+((sj10)*(sj10))); | |
if( IKabs(dummyeval[0]) < 0.0000010000000000 ) | |
{ | |
continue; | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1958=((r20)*(sj11)); | |
IkReal x1959=((sj6)*(sj7)); | |
IkReal x1960=((IkReal(1.00000000000000))*(sj11)); | |
IkReal x1961=((IkReal(1.00000000000000))*(sj10)); | |
IkReal x1962=((cj11)*(r11)); | |
IkReal x1963=((cj11)*(r21)); | |
IkReal x1964=((IkReal(1.00000000000000))*(cj10)); | |
IkReal x1965=((cj7)*(x1964)); | |
IkReal x1966=((cj6)*(sj10)*(sj7)); | |
IkReal x1967=((IkReal(1.00000000000000))*(cj11)*(r01)); | |
IkReal x1968=((cj10)*(cj6)*(sj7)); | |
if( IKabs(((gconst17)*(((((IkReal(-1.00000000000000))*(r22)*(x1965)))+(((IkReal(-1.00000000000000))*(x1959)*(x1961)*(x1962)))+(((IkReal(-1.00000000000000))*(cj7)*(x1961)*(x1963)))+(((IkReal(-1.00000000000000))*(r00)*(x1960)*(x1966)))+(((IkReal(-1.00000000000000))*(cj6)*(r02)*(sj7)*(x1964)))+(((IkReal(-1.00000000000000))*(cj11)*(cj6)*(r01)*(sj7)*(x1961)))+(((IkReal(-1.00000000000000))*(r10)*(sj10)*(x1959)*(x1960)))+(((IkReal(-1.00000000000000))*(r12)*(x1959)*(x1964)))+(((IkReal(-1.00000000000000))*(cj7)*(x1958)*(x1961))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst17)*(((((r02)*(x1966)))+(((r12)*(sj10)*(x1959)))+(((IkReal(-1.00000000000000))*(cj11)*(cj6)*(r01)*(sj7)*(x1964)))+(((IkReal(-1.00000000000000))*(x1963)*(x1965)))+(((IkReal(-1.00000000000000))*(x1958)*(x1965)))+(((IkReal(-1.00000000000000))*(r00)*(x1960)*(x1968)))+(((cj7)*(r22)*(sj10)))+(((IkReal(-1.00000000000000))*(x1959)*(x1962)*(x1964)))+(((IkReal(-1.00000000000000))*(cj10)*(r10)*(x1959)*(x1960))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst17)*(((((IkReal(-1.00000000000000))*(r22)*(x1965)))+(((IkReal(-1.00000000000000))*(x1959)*(x1961)*(x1962)))+(((IkReal(-1.00000000000000))*(cj7)*(x1961)*(x1963)))+(((IkReal(-1.00000000000000))*(r00)*(x1960)*(x1966)))+(((IkReal(-1.00000000000000))*(cj6)*(r02)*(sj7)*(x1964)))+(((IkReal(-1.00000000000000))*(cj11)*(cj6)*(r01)*(sj7)*(x1961)))+(((IkReal(-1.00000000000000))*(r10)*(sj10)*(x1959)*(x1960)))+(((IkReal(-1.00000000000000))*(r12)*(x1959)*(x1964)))+(((IkReal(-1.00000000000000))*(cj7)*(x1958)*(x1961)))))), ((gconst17)*(((((r02)*(x1966)))+(((r12)*(sj10)*(x1959)))+(((IkReal(-1.00000000000000))*(cj11)*(cj6)*(r01)*(sj7)*(x1964)))+(((IkReal(-1.00000000000000))*(x1963)*(x1965)))+(((IkReal(-1.00000000000000))*(x1958)*(x1965)))+(((IkReal(-1.00000000000000))*(r00)*(x1960)*(x1968)))+(((cj7)*(r22)*(sj10)))+(((IkReal(-1.00000000000000))*(x1959)*(x1962)*(x1964)))+(((IkReal(-1.00000000000000))*(cj10)*(r10)*(x1959)*(x1960))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1969=IKcos(j8); | |
IkReal x1970=IKsin(j8); | |
IkReal x1971=((cj7)*(sj11)); | |
IkReal x1972=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x1973=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x1974=((cj6)*(sj7)); | |
IkReal x1975=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x1976=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x1977=((r20)*(sj7)); | |
IkReal x1978=((cj11)*(cj7)); | |
IkReal x1979=((sj11)*(sj7)); | |
IkReal x1980=((r10)*(sj6)); | |
IkReal x1981=((cj11)*(r01)); | |
IkReal x1982=((cj6)*(cj7)); | |
IkReal x1983=((cj7)*(sj6)); | |
IkReal x1984=((IkReal(1.00000000000000))*(cj10)); | |
IkReal x1985=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x1986=((IkReal(0.0620002000000000))*(r01)); | |
IkReal x1987=((r11)*(sj6)); | |
IkReal x1988=((cj11)*(sj7)); | |
IkReal x1989=((sj10)*(x1969)); | |
IkReal x1990=((sj10)*(x1970)); | |
IkReal x1991=((x1970)*(x1984)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(x1969)*(x1984)))+(((IkReal(-1.00000000000000))*(x1990)))+(((IkReal(-1.00000000000000))*(r22)*(x1985)))+(((r12)*(x1983)))+(((r02)*(x1982)))); | |
evalcond[1]=((x1989)+(((IkReal(-1.00000000000000))*(r02)*(x1974)))+(((IkReal(-1.00000000000000))*(x1991)))+(((IkReal(-1.00000000000000))*(r22)*(x1976)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x1973)))); | |
evalcond[2]=((((r00)*(sj11)*(x1974)))+(((cj10)*(x1969)))+(((x1974)*(x1981)))+(((r20)*(x1971)))+(((x1979)*(x1980)))+(((r21)*(x1978)))+(((x1987)*(x1988)))+(x1990)); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r11)*(x1973)*(x1978)))+(x1989)+(((IkReal(-1.00000000000000))*(r10)*(x1971)*(x1973)))+(((IkReal(-1.00000000000000))*(x1991)))+(((r21)*(x1988)))+(((sj11)*(x1977)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(x1971)))+(((IkReal(-1.00000000000000))*(cj6)*(x1976)*(x1981)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(pz)*(x1985)))+(((IkReal(-0.302000000000000))*(x1969)))+(((py)*(x1983)))+(((IkReal(-1.00000000000000))*(cj7)*(x1975)*(x1980)))+(((cj6)*(x1971)*(x1986)))+(((IkReal(-1.00000000000000))*(r00)*(x1975)*(x1982)))+(((IkReal(0.0620002000000000))*(x1971)*(x1987)))+(((px)*(x1982)))+(((x1975)*(x1977)))+(((IkReal(-1.00000000000000))*(x1972)*(x1979)))+(((IkReal(-0.0686246300000000))*(x1970)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((IkReal(0.0686246300000000))*(x1969)))+(((r00)*(x1974)*(x1975)))+(((IkReal(-1.00000000000000))*(sj11)*(x1974)*(x1986)))+(((cj7)*(r20)*(x1975)))+(((IkReal(-0.0620002000000000))*(x1979)*(x1987)))+(((sj7)*(x1975)*(x1980)))+(((IkReal(-1.00000000000000))*(px)*(x1974)))+(((IkReal(-1.00000000000000))*(pz)*(x1976)))+(((IkReal(-1.00000000000000))*(py)*(sj7)*(x1973)))+(((IkReal(-1.00000000000000))*(x1971)*(x1972)))+(((IkReal(-0.302000000000000))*(x1970)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x1992=((IkReal(1.00000000000000))*(r22)); | |
IkReal x1993=((sj10)*(sj7)); | |
IkReal x1994=((cj10)*(cj7)); | |
IkReal x1995=((cj7)*(sj10)); | |
IkReal x1996=((r12)*(sj6)); | |
IkReal x1997=((cj6)*(r02)); | |
IkReal x1998=((cj10)*(sj7)); | |
if( IKabs(((gconst16)*(((((x1995)*(x1997)))+(((IkReal(-1.00000000000000))*(x1996)*(x1998)))+(((IkReal(-1.00000000000000))*(x1992)*(x1994)))+(((IkReal(-1.00000000000000))*(x1992)*(x1993)))+(((x1995)*(x1996)))+(((IkReal(-1.00000000000000))*(x1997)*(x1998))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst16)*(((((IkReal(-1.00000000000000))*(x1992)*(x1998)))+(((x1994)*(x1997)))+(((x1994)*(x1996)))+(((r22)*(x1995)))+(((x1993)*(x1997)))+(((x1993)*(x1996))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst16)*(((((x1995)*(x1997)))+(((IkReal(-1.00000000000000))*(x1996)*(x1998)))+(((IkReal(-1.00000000000000))*(x1992)*(x1994)))+(((IkReal(-1.00000000000000))*(x1992)*(x1993)))+(((x1995)*(x1996)))+(((IkReal(-1.00000000000000))*(x1997)*(x1998)))))), ((gconst16)*(((((IkReal(-1.00000000000000))*(x1992)*(x1998)))+(((x1994)*(x1997)))+(((x1994)*(x1996)))+(((r22)*(x1995)))+(((x1993)*(x1997)))+(((x1993)*(x1996))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[6]; | |
IkReal x1999=IKcos(j8); | |
IkReal x2000=IKsin(j8); | |
IkReal x2001=((cj7)*(sj11)); | |
IkReal x2002=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x2003=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x2004=((cj6)*(sj7)); | |
IkReal x2005=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x2006=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x2007=((r20)*(sj7)); | |
IkReal x2008=((cj11)*(cj7)); | |
IkReal x2009=((sj11)*(sj7)); | |
IkReal x2010=((r10)*(sj6)); | |
IkReal x2011=((cj11)*(r01)); | |
IkReal x2012=((cj6)*(cj7)); | |
IkReal x2013=((cj7)*(sj6)); | |
IkReal x2014=((IkReal(1.00000000000000))*(cj10)); | |
IkReal x2015=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x2016=((IkReal(0.0620002000000000))*(r01)); | |
IkReal x2017=((r11)*(sj6)); | |
IkReal x2018=((cj11)*(sj7)); | |
IkReal x2019=((sj10)*(x1999)); | |
IkReal x2020=((sj10)*(x2000)); | |
IkReal x2021=((x2000)*(x2014)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(x2020)))+(((r12)*(x2013)))+(((IkReal(-1.00000000000000))*(r22)*(x2015)))+(((r02)*(x2012)))+(((IkReal(-1.00000000000000))*(x1999)*(x2014)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r02)*(x2004)))+(((IkReal(-1.00000000000000))*(x2021)))+(((IkReal(-1.00000000000000))*(r22)*(x2006)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x2003)))+(x2019)); | |
evalcond[2]=((((r00)*(sj11)*(x2004)))+(x2020)+(((r20)*(x2001)))+(((x2017)*(x2018)))+(((cj10)*(x1999)))+(((x2009)*(x2010)))+(((x2004)*(x2011)))+(((r21)*(x2008)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(r11)*(x2003)*(x2008)))+(((IkReal(-1.00000000000000))*(x2021)))+(((sj11)*(x2007)))+(((IkReal(-1.00000000000000))*(r10)*(x2001)*(x2003)))+(((IkReal(-1.00000000000000))*(cj6)*(x2006)*(x2011)))+(((IkReal(-1.00000000000000))*(cj6)*(r00)*(x2001)))+(((r21)*(x2018)))+(x2019)); | |
evalcond[4]=((((px)*(x2012)))+(((IkReal(-1.00000000000000))*(cj7)*(x2005)*(x2010)))+(((IkReal(0.0620002000000000))*(x2001)*(x2017)))+(((IkReal(-0.0686246300000000))*(x2000)))+(((cj6)*(x2001)*(x2016)))+(((x2005)*(x2007)))+(((IkReal(-0.302000000000000))*(x1999)))+(((py)*(x2013)))+(((IkReal(-1.00000000000000))*(x2002)*(x2009)))+(((IkReal(-1.00000000000000))*(r00)*(x2005)*(x2012)))+(((IkReal(-1.00000000000000))*(pz)*(x2015)))); | |
evalcond[5]=((IkReal(0.270000000000000))+(((IkReal(-0.0620002000000000))*(x2009)*(x2017)))+(((IkReal(-1.00000000000000))*(py)*(sj7)*(x2003)))+(((IkReal(-1.00000000000000))*(px)*(x2004)))+(((IkReal(-1.00000000000000))*(x2001)*(x2002)))+(((r00)*(x2004)*(x2005)))+(((IkReal(-1.00000000000000))*(sj11)*(x2004)*(x2016)))+(((sj7)*(x2005)*(x2010)))+(((IkReal(-0.302000000000000))*(x2000)))+(((IkReal(0.0686246300000000))*(x1999)))+(((IkReal(-1.00000000000000))*(pz)*(x2006)))+(((cj7)*(r20)*(x2005)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x2022=((cj6)*(r10)); | |
IkReal x2023=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x2024=((cj6)*(r11)); | |
IkReal x2025=((r01)*(sj6)); | |
IkReal x2026=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x2027=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x2028=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x2029=((r00)*(sj6)); | |
IkReal x2030=((IkReal(1.00000000000000))*(sj11)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(3.14159265358979))+(j10)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((r02)*(sj6)))+(((IkReal(-1.00000000000000))*(r12)*(x2023)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x2025)*(x2030)))+(((IkReal(-1.00000000000000))*(x2022)*(x2028)))+(cj9)+(((cj11)*(x2029)))+(((sj11)*(x2024)))); | |
evalcond[3]=((sj9)+(((IkReal(-1.00000000000000))*(x2025)*(x2028)))+(((cj11)*(x2024)))+(((sj11)*(x2022)))+(((IkReal(-1.00000000000000))*(x2029)*(x2030)))); | |
evalcond[4]=((IkReal(-0.0100933000000000))+(((x2025)*(x2026)))+(((IkReal(-0.00151567000000000))*(sj9)))+(((IkReal(-0.0616850000000000))*(cj9)))+(((IkReal(-1.00000000000000))*(x2024)*(x2026)))+(((x2022)*(x2027)))+(((px)*(sj6)))+(((IkReal(-1.00000000000000))*(py)*(x2023)))+(((IkReal(-1.00000000000000))*(x2027)*(x2029)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x2031=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x2032=((r12)*(sj6)); | |
IkReal x2033=((cj6)*(r02)); | |
if( IKabs(((((IkReal(-1.00000000000000))*(x2031)*(x2032)))+(((IkReal(-1.00000000000000))*(x2031)*(x2033)))+(((IkReal(-1.00000000000000))*(cj7)*(r22))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(r22)*(x2031)))+(((cj7)*(x2032)))+(((cj7)*(x2033))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IkReal(-1.00000000000000))*(x2031)*(x2032)))+(((IkReal(-1.00000000000000))*(x2031)*(x2033)))+(((IkReal(-1.00000000000000))*(cj7)*(r22)))))+IKsqr(((((IkReal(-1.00000000000000))*(r22)*(x2031)))+(((cj7)*(x2032)))+(((cj7)*(x2033)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((IkReal(-1.00000000000000))*(x2031)*(x2032)))+(((IkReal(-1.00000000000000))*(x2031)*(x2033)))+(((IkReal(-1.00000000000000))*(cj7)*(r22)))), ((((IkReal(-1.00000000000000))*(r22)*(x2031)))+(((cj7)*(x2032)))+(((cj7)*(x2033))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x2034=IKcos(j8); | |
IkReal x2035=IKsin(j8); | |
IkReal x2036=((cj7)*(sj11)); | |
IkReal x2037=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x2038=((r10)*(sj6)); | |
IkReal x2039=((cj11)*(sj7)); | |
IkReal x2040=((cj6)*(r00)); | |
IkReal x2041=((IkReal(1.00000000000000))*(r20)); | |
IkReal x2042=((sj11)*(sj7)); | |
IkReal x2043=((cj6)*(r01)); | |
IkReal x2044=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x2045=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x2046=((cj11)*(cj7)); | |
IkReal x2047=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x2048=((cj6)*(r02)); | |
IkReal x2049=((py)*(sj6)); | |
IkReal x2050=((r11)*(sj6)); | |
IkReal x2051=((cj6)*(px)); | |
IkReal x2052=((r12)*(sj6)); | |
IkReal x2053=((IkReal(1.00000000000000))*(x2035)); | |
IkReal x2054=((cj9)*(x2035)); | |
IkReal x2055=((sj9)*(x2034)); | |
IkReal x2056=((cj9)*(x2034)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(x2034)))+(((IkReal(-1.00000000000000))*(r22)*(x2047)))+(((cj7)*(x2048)))+(((cj7)*(x2052)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x2047)*(x2048)))+(((IkReal(-1.00000000000000))*(x2053)))+(((IkReal(-1.00000000000000))*(x2047)*(x2052)))+(((IkReal(-1.00000000000000))*(r22)*(x2044)))); | |
evalcond[2]=((((x2042)*(x2043)))+(x2055)+(((IkReal(-1.00000000000000))*(x2039)*(x2040)))+(((IkReal(-1.00000000000000))*(x2041)*(x2046)))+(((IkReal(-1.00000000000000))*(x2038)*(x2039)))+(((r21)*(x2036)))+(((x2042)*(x2050)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x2036)*(x2043)))+(((IkReal(-1.00000000000000))*(x2039)*(x2041)))+(((IkReal(-1.00000000000000))*(x2036)*(x2050)))+(((x2038)*(x2046)))+(((IkReal(-1.00000000000000))*(sj9)*(x2053)))+(((x2040)*(x2046)))+(((r21)*(x2042)))); | |
evalcond[4]=((((IkReal(-1.00000000000000))*(x2056)))+(((r21)*(x2046)))+(((x2040)*(x2042)))+(((x2038)*(x2042)))+(((x2039)*(x2043)))+(((r20)*(x2036)))+(((x2039)*(x2050)))); | |
evalcond[5]=((x2054)+(((r21)*(x2039)))+(((IkReal(-1.00000000000000))*(cj11)*(x2043)*(x2044)))+(((IkReal(-1.00000000000000))*(cj11)*(x2044)*(x2050)))+(((IkReal(-1.00000000000000))*(x2036)*(x2038)))+(((IkReal(-1.00000000000000))*(x2036)*(x2040)))+(((r20)*(x2042)))); | |
evalcond[6]=((((x2039)*(x2045)))+(((IkReal(-0.00151567000000000))*(x2054)))+(((IkReal(-1.00000000000000))*(x2037)*(x2042)))+(((IkReal(-0.0701403000000000))*(x2035)))+(((IkReal(-0.0620002000000000))*(x2038)*(x2046)))+(((cj7)*(x2051)))+(((IkReal(-0.302000000000000))*(x2034)))+(((IkReal(-0.0620002000000000))*(x2040)*(x2046)))+(((IkReal(-1.00000000000000))*(pz)*(x2047)))+(((IkReal(0.0620002000000000))*(x2036)*(x2043)))+(((IkReal(0.0616850000000000))*(sj9)*(x2035)))+(((cj7)*(x2049)))+(((IkReal(0.0620002000000000))*(x2036)*(x2050)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(0.0620002000000000))*(x2039)*(x2040)))+(((IkReal(-1.00000000000000))*(pz)*(x2044)))+(((IkReal(-1.00000000000000))*(x2047)*(x2049)))+(((IkReal(-0.0616850000000000))*(x2055)))+(((IkReal(0.0701403000000000))*(x2034)))+(((IkReal(0.0620002000000000))*(x2038)*(x2039)))+(((IkReal(-0.0620002000000000))*(x2042)*(x2050)))+(((x2045)*(x2046)))+(((IkReal(-0.302000000000000))*(x2035)))+(((IkReal(-1.00000000000000))*(x2047)*(x2051)))+(((IkReal(-0.0620002000000000))*(x2042)*(x2043)))+(((IkReal(-1.00000000000000))*(x2036)*(x2037)))+(((IkReal(0.00151567000000000))*(x2056)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
IkReal x2057=((cj6)*(r10)); | |
IkReal x2058=((IkReal(1.00000000000000))*(cj6)); | |
IkReal x2059=((cj6)*(r11)); | |
IkReal x2060=((r01)*(sj6)); | |
IkReal x2061=((IkReal(0.0620002000000000))*(sj11)); | |
IkReal x2062=((IkReal(0.0620002000000000))*(cj11)); | |
IkReal x2063=((IkReal(1.00000000000000))*(cj11)); | |
IkReal x2064=((r00)*(sj6)); | |
IkReal x2065=((IkReal(1.00000000000000))*(sj11)); | |
evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.11022302462516e-16))+(j10)), IkReal(6.28318530717959)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(r12)*(x2058)))+(((r02)*(sj6)))); | |
evalcond[2]=((cj9)+(((sj11)*(x2059)))+(((cj11)*(x2064)))+(((IkReal(-1.00000000000000))*(x2060)*(x2065)))+(((IkReal(-1.00000000000000))*(x2057)*(x2063)))); | |
evalcond[3]=((((cj11)*(x2059)))+(((IkReal(-1.00000000000000))*(sj9)))+(((sj11)*(x2057)))+(((IkReal(-1.00000000000000))*(x2064)*(x2065)))+(((IkReal(-1.00000000000000))*(x2060)*(x2063)))); | |
evalcond[4]=((IkReal(-0.0100933000000000))+(((x2060)*(x2061)))+(((IkReal(-1.00000000000000))*(py)*(x2058)))+(((IkReal(-1.00000000000000))*(x2059)*(x2061)))+(((IkReal(-0.00151567000000000))*(sj9)))+(((IkReal(-0.0616850000000000))*(cj9)))+(((IkReal(-1.00000000000000))*(x2062)*(x2064)))+(((px)*(sj6)))+(((x2057)*(x2062)))); | |
if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 ) | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x2066=((r12)*(sj6)); | |
IkReal x2067=((cj6)*(r02)); | |
IkReal x2068=((IkReal(1.00000000000000))*(cj7)); | |
if( IKabs(((((cj7)*(r22)))+(((sj7)*(x2066)))+(((sj7)*(x2067))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IkReal(-1.00000000000000))*(x2067)*(x2068)))+(((IkReal(-1.00000000000000))*(x2066)*(x2068)))+(((r22)*(sj7))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((cj7)*(r22)))+(((sj7)*(x2066)))+(((sj7)*(x2067)))))+IKsqr(((((IkReal(-1.00000000000000))*(x2067)*(x2068)))+(((IkReal(-1.00000000000000))*(x2066)*(x2068)))+(((r22)*(sj7)))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((cj7)*(r22)))+(((sj7)*(x2066)))+(((sj7)*(x2067)))), ((((IkReal(-1.00000000000000))*(x2067)*(x2068)))+(((IkReal(-1.00000000000000))*(x2066)*(x2068)))+(((r22)*(sj7))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x2069=IKcos(j8); | |
IkReal x2070=IKsin(j8); | |
IkReal x2071=((cj7)*(sj11)); | |
IkReal x2072=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x2073=((r10)*(sj6)); | |
IkReal x2074=((cj11)*(sj7)); | |
IkReal x2075=((cj6)*(r00)); | |
IkReal x2076=((IkReal(1.00000000000000))*(r20)); | |
IkReal x2077=((sj11)*(sj7)); | |
IkReal x2078=((cj6)*(r01)); | |
IkReal x2079=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x2080=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x2081=((cj11)*(cj7)); | |
IkReal x2082=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x2083=((cj6)*(r02)); | |
IkReal x2084=((py)*(sj6)); | |
IkReal x2085=((r11)*(sj6)); | |
IkReal x2086=((cj6)*(px)); | |
IkReal x2087=((r12)*(sj6)); | |
IkReal x2088=((sj9)*(x2069)); | |
IkReal x2089=((cj9)*(x2069)); | |
IkReal x2090=((IkReal(1.00000000000000))*(x2070)); | |
evalcond[0]=((x2069)+(((cj7)*(x2083)))+(((cj7)*(x2087)))+(((IkReal(-1.00000000000000))*(r22)*(x2082)))); | |
evalcond[1]=((x2070)+(((IkReal(-1.00000000000000))*(r22)*(x2079)))+(((IkReal(-1.00000000000000))*(x2082)*(x2087)))+(((IkReal(-1.00000000000000))*(x2082)*(x2083)))); | |
evalcond[2]=((((x2077)*(x2085)))+(((IkReal(-1.00000000000000))*(x2074)*(x2075)))+(((r21)*(x2071)))+(x2088)+(((IkReal(-1.00000000000000))*(x2076)*(x2081)))+(((IkReal(-1.00000000000000))*(x2073)*(x2074)))+(((x2077)*(x2078)))); | |
evalcond[3]=((((x2073)*(x2081)))+(((IkReal(-1.00000000000000))*(x2071)*(x2078)))+(((r21)*(x2077)))+(((x2075)*(x2081)))+(((IkReal(-1.00000000000000))*(sj9)*(x2090)))+(((IkReal(-1.00000000000000))*(x2074)*(x2076)))+(((IkReal(-1.00000000000000))*(x2071)*(x2085)))); | |
evalcond[4]=((((x2074)*(x2085)))+(((x2075)*(x2077)))+(x2089)+(((r21)*(x2081)))+(((r20)*(x2071)))+(((x2073)*(x2077)))+(((x2074)*(x2078)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(cj11)*(x2079)*(x2085)))+(((r20)*(x2077)))+(((r21)*(x2074)))+(((IkReal(-1.00000000000000))*(cj11)*(x2078)*(x2079)))+(((IkReal(-1.00000000000000))*(cj9)*(x2090)))+(((IkReal(-1.00000000000000))*(x2071)*(x2073)))+(((IkReal(-1.00000000000000))*(x2071)*(x2075)))); | |
evalcond[6]=((((IkReal(0.0620002000000000))*(x2071)*(x2085)))+(((IkReal(-1.00000000000000))*(pz)*(x2082)))+(((IkReal(0.0620002000000000))*(x2071)*(x2078)))+(((IkReal(-0.00151567000000000))*(cj9)*(x2070)))+(((x2074)*(x2080)))+(((IkReal(-0.0701403000000000))*(x2070)))+(((IkReal(-0.0620002000000000))*(x2075)*(x2081)))+(((cj7)*(x2086)))+(((IkReal(-0.302000000000000))*(x2069)))+(((cj7)*(x2084)))+(((IkReal(0.0616850000000000))*(sj9)*(x2070)))+(((IkReal(-0.0620002000000000))*(x2073)*(x2081)))+(((IkReal(-1.00000000000000))*(x2072)*(x2077)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(0.0701403000000000))*(x2069)))+(((IkReal(-1.00000000000000))*(x2082)*(x2086)))+(((IkReal(0.0620002000000000))*(x2073)*(x2074)))+(((IkReal(-0.0620002000000000))*(x2077)*(x2085)))+(((IkReal(-0.302000000000000))*(x2070)))+(((IkReal(-0.0616850000000000))*(x2088)))+(((IkReal(-1.00000000000000))*(x2071)*(x2072)))+(((IkReal(-1.00000000000000))*(x2082)*(x2084)))+(((IkReal(0.0620002000000000))*(x2074)*(x2075)))+(((IkReal(-1.00000000000000))*(pz)*(x2079)))+(((x2080)*(x2081)))+(((IkReal(0.00151567000000000))*(x2089)))+(((IkReal(-0.0620002000000000))*(x2077)*(x2078)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} else | |
{ | |
if( 1 ) | |
{ | |
continue; | |
} else | |
{ | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x2091=((IKabs(sj9) != 0)?((IkReal)1/(sj9)):(IkReal)1.0e30); | |
IkReal x2092=((cj6)*(cj7)); | |
IkReal x2093=((IkReal(1.00000000000000))*(r01)); | |
IkReal x2094=((r21)*(sj7)); | |
IkReal x2095=((cj7)*(sj6)); | |
IkReal x2096=((cj11)*(r10)); | |
IkReal x2097=((cj11)*(r00)); | |
IkReal x2098=((cj9)*(sj10)); | |
IkReal x2099=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x2100=((cj11)*(r20)); | |
IkReal x2101=((IkReal(1.00000000000000))*(r11)); | |
IkReal x2102=((sj11)*(x2098)); | |
if( IKabs(((x2091)*(((((IkReal(-1.00000000000000))*(sj11)*(x2092)*(x2093)))+(((IkReal(-1.00000000000000))*(x2099)*(x2100)))+(((x2095)*(x2096)))+(((sj11)*(x2094)))+(((IkReal(-1.00000000000000))*(sj11)*(x2095)*(x2101)))+(((x2092)*(x2097))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x2091)*(((IKabs(cj10) != 0)?((IkReal)1/(cj10)):(IkReal)1.0e30))*(((((r02)*(sj9)*(x2092)))+(((IkReal(-1.00000000000000))*(x2098)*(x2099)*(x2100)))+(((r12)*(sj9)*(x2095)))+(((IkReal(-1.00000000000000))*(x2092)*(x2093)*(x2102)))+(((x2094)*(x2102)))+(((x2095)*(x2096)*(x2098)))+(((IkReal(-1.00000000000000))*(x2095)*(x2101)*(x2102)))+(((IkReal(-1.00000000000000))*(r22)*(sj9)*(x2099)))+(((x2092)*(x2097)*(x2098))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x2091)*(((((IkReal(-1.00000000000000))*(sj11)*(x2092)*(x2093)))+(((IkReal(-1.00000000000000))*(x2099)*(x2100)))+(((x2095)*(x2096)))+(((sj11)*(x2094)))+(((IkReal(-1.00000000000000))*(sj11)*(x2095)*(x2101)))+(((x2092)*(x2097)))))))+IKsqr(((x2091)*(((IKabs(cj10) != 0)?((IkReal)1/(cj10)):(IkReal)1.0e30))*(((((r02)*(sj9)*(x2092)))+(((IkReal(-1.00000000000000))*(x2098)*(x2099)*(x2100)))+(((r12)*(sj9)*(x2095)))+(((IkReal(-1.00000000000000))*(x2092)*(x2093)*(x2102)))+(((x2094)*(x2102)))+(((x2095)*(x2096)*(x2098)))+(((IkReal(-1.00000000000000))*(x2095)*(x2101)*(x2102)))+(((IkReal(-1.00000000000000))*(r22)*(sj9)*(x2099)))+(((x2092)*(x2097)*(x2098)))))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((x2091)*(((((IkReal(-1.00000000000000))*(sj11)*(x2092)*(x2093)))+(((IkReal(-1.00000000000000))*(x2099)*(x2100)))+(((x2095)*(x2096)))+(((sj11)*(x2094)))+(((IkReal(-1.00000000000000))*(sj11)*(x2095)*(x2101)))+(((x2092)*(x2097)))))), ((x2091)*(((IKabs(cj10) != 0)?((IkReal)1/(cj10)):(IkReal)1.0e30))*(((((r02)*(sj9)*(x2092)))+(((IkReal(-1.00000000000000))*(x2098)*(x2099)*(x2100)))+(((r12)*(sj9)*(x2095)))+(((IkReal(-1.00000000000000))*(x2092)*(x2093)*(x2102)))+(((x2094)*(x2102)))+(((x2095)*(x2096)*(x2098)))+(((IkReal(-1.00000000000000))*(x2095)*(x2101)*(x2102)))+(((IkReal(-1.00000000000000))*(r22)*(sj9)*(x2099)))+(((x2092)*(x2097)*(x2098))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x2103=IKsin(j8); | |
IkReal x2104=IKcos(j8); | |
IkReal x2105=((cj7)*(sj11)); | |
IkReal x2106=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x2107=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x2108=((cj11)*(sj7)); | |
IkReal x2109=((cj6)*(r00)); | |
IkReal x2110=((IkReal(1.00000000000000))*(r20)); | |
IkReal x2111=((cj6)*(r01)); | |
IkReal x2112=((sj11)*(sj7)); | |
IkReal x2113=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x2114=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x2115=((cj11)*(cj7)); | |
IkReal x2116=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x2117=((cj6)*(r02)); | |
IkReal x2118=((r10)*(sj6)); | |
IkReal x2119=((cj7)*(sj6)); | |
IkReal x2120=((IkReal(1.00000000000000))*(cj10)); | |
IkReal x2121=((r11)*(sj6)); | |
IkReal x2122=((cj6)*(px)); | |
IkReal x2123=((sj9)*(x2104)); | |
IkReal x2124=((cj9)*(x2104)); | |
IkReal x2125=((cj9)*(x2103)); | |
IkReal x2126=((sj9)*(x2103)); | |
evalcond[0]=((((r12)*(x2119)))+(((IkReal(-1.00000000000000))*(x2104)*(x2120)))+(((sj10)*(x2125)))+(((IkReal(-1.00000000000000))*(r22)*(x2116)))+(((cj7)*(x2117)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(sj10)*(x2124)))+(((IkReal(-1.00000000000000))*(r22)*(x2113)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x2107)))+(((IkReal(-1.00000000000000))*(x2103)*(x2120)))+(((IkReal(-1.00000000000000))*(x2116)*(x2117)))); | |
evalcond[2]=((x2123)+(((x2111)*(x2112)))+(((x2112)*(x2121)))+(((r21)*(x2105)))+(((IkReal(-1.00000000000000))*(x2110)*(x2115)))+(((IkReal(-1.00000000000000))*(x2108)*(x2109)))+(((IkReal(-1.00000000000000))*(r10)*(x2107)*(x2108)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x2105)*(x2111)))+(((x2109)*(x2115)))+(((IkReal(-1.00000000000000))*(x2108)*(x2110)))+(((r21)*(x2112)))+(((IkReal(-1.00000000000000))*(x2126)))+(((IkReal(-1.00000000000000))*(r11)*(x2105)*(x2107)))+(((x2115)*(x2118)))); | |
evalcond[4]=((((r20)*(x2105)))+(((x2108)*(x2111)))+(((x2112)*(x2118)))+(((sj10)*(x2103)))+(((IkReal(-1.00000000000000))*(x2120)*(x2124)))+(((x2108)*(x2121)))+(((x2109)*(x2112)))+(((r21)*(x2115)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(x2105)*(x2109)))+(((IkReal(-1.00000000000000))*(r10)*(x2105)*(x2107)))+(((r20)*(x2112)))+(((IkReal(-1.00000000000000))*(cj11)*(x2111)*(x2113)))+(((sj10)*(x2104)))+(((r21)*(x2108)))+(((IkReal(-1.00000000000000))*(r11)*(x2107)*(x2115)))+(((cj10)*(x2125)))); | |
evalcond[6]=((((IkReal(-0.0620002000000000))*(x2115)*(x2118)))+(((IkReal(-0.00151567000000000))*(x2125)))+(((IkReal(0.0620002000000000))*(x2105)*(x2111)))+(((x2108)*(x2114)))+(((IkReal(-1.00000000000000))*(x2106)*(x2112)))+(((IkReal(-0.0620002000000000))*(x2109)*(x2115)))+(((IkReal(-1.00000000000000))*(pz)*(x2116)))+(((IkReal(0.0620002000000000))*(x2105)*(x2121)))+(((cj7)*(x2122)))+(((py)*(x2119)))+(((IkReal(0.0616850000000000))*(x2126)))+(((IkReal(-0.0701403000000000))*(x2103)))+(((IkReal(-0.302000000000000))*(x2104)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(0.0620002000000000))*(x2108)*(x2109)))+(((IkReal(0.0620002000000000))*(x2108)*(x2118)))+(((IkReal(-1.00000000000000))*(x2116)*(x2122)))+(((IkReal(-1.00000000000000))*(pz)*(x2113)))+(((IkReal(0.0701403000000000))*(x2104)))+(((IkReal(-0.0620002000000000))*(x2112)*(x2121)))+(((IkReal(-0.0620002000000000))*(x2111)*(x2112)))+(((IkReal(-0.0616850000000000))*(x2123)))+(((x2114)*(x2115)))+(((IkReal(-0.302000000000000))*(x2103)))+(((IkReal(-1.00000000000000))*(py)*(sj7)*(x2107)))+(((IkReal(-1.00000000000000))*(x2105)*(x2106)))+(((IkReal(0.00151567000000000))*(x2124)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x2127=(cj9)*(cj9); | |
IkReal x2128=((r22)*(sj7)); | |
IkReal x2129=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x2130=((r12)*(sj6)); | |
IkReal x2131=((cj6)*(r01)); | |
IkReal x2132=((r11)*(sj6)); | |
IkReal x2133=((cj6)*(r02)); | |
IkReal x2134=((cj11)*(sj7)); | |
IkReal x2135=((cj7)*(r20)*(sj11)); | |
IkReal x2136=((cj11)*(cj7)*(r21)); | |
IkReal x2137=((cj9)*(x2134)); | |
IkReal x2138=((r10)*(sj11)*(sj6)*(sj7)); | |
IkReal x2139=((cj6)*(r00)*(sj11)*(sj7)); | |
if( IKabs(((((IKabs(((((sj10)*(x2127)))+(((IkReal(-1.00000000000000))*(sj10))))) != 0)?((IkReal)1/(((((sj10)*(x2127)))+(((IkReal(-1.00000000000000))*(sj10)))))):(IkReal)1.0e30))*(((((cj9)*(x2128)))+(((IkReal(-1.00000000000000))*(cj9)*(x2129)*(x2130)))+(x2136)+(x2135)+(x2138)+(x2139)+(((IkReal(-1.00000000000000))*(cj9)*(x2129)*(x2133)))+(((x2131)*(x2134)))+(((x2132)*(x2134))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((IKabs(((((IkReal(-1.00000000000000))*(cj10)))+(((cj10)*(x2127))))) != 0)?((IkReal)1/(((((IkReal(-1.00000000000000))*(cj10)))+(((cj10)*(x2127)))))):(IkReal)1.0e30))*(((x2128)+(((cj9)*(x2136)))+(((IkReal(-1.00000000000000))*(x2129)*(x2130)))+(((cj9)*(x2135)))+(((x2131)*(x2137)))+(((cj9)*(x2138)))+(((IkReal(-1.00000000000000))*(x2129)*(x2133)))+(((x2132)*(x2137)))+(((cj9)*(x2139))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((IKabs(((((sj10)*(x2127)))+(((IkReal(-1.00000000000000))*(sj10))))) != 0)?((IkReal)1/(((((sj10)*(x2127)))+(((IkReal(-1.00000000000000))*(sj10)))))):(IkReal)1.0e30))*(((((cj9)*(x2128)))+(((IkReal(-1.00000000000000))*(cj9)*(x2129)*(x2130)))+(x2136)+(x2135)+(x2138)+(x2139)+(((IkReal(-1.00000000000000))*(cj9)*(x2129)*(x2133)))+(((x2131)*(x2134)))+(((x2132)*(x2134)))))))+IKsqr(((((IKabs(((((IkReal(-1.00000000000000))*(cj10)))+(((cj10)*(x2127))))) != 0)?((IkReal)1/(((((IkReal(-1.00000000000000))*(cj10)))+(((cj10)*(x2127)))))):(IkReal)1.0e30))*(((x2128)+(((cj9)*(x2136)))+(((IkReal(-1.00000000000000))*(x2129)*(x2130)))+(((cj9)*(x2135)))+(((x2131)*(x2137)))+(((cj9)*(x2138)))+(((IkReal(-1.00000000000000))*(x2129)*(x2133)))+(((x2132)*(x2137)))+(((cj9)*(x2139)))))))-1) <= IKFAST_SINCOS_THRESH ) | |
continue; | |
j8array[0]=IKatan2(((((IKabs(((((sj10)*(x2127)))+(((IkReal(-1.00000000000000))*(sj10))))) != 0)?((IkReal)1/(((((sj10)*(x2127)))+(((IkReal(-1.00000000000000))*(sj10)))))):(IkReal)1.0e30))*(((((cj9)*(x2128)))+(((IkReal(-1.00000000000000))*(cj9)*(x2129)*(x2130)))+(x2136)+(x2135)+(x2138)+(x2139)+(((IkReal(-1.00000000000000))*(cj9)*(x2129)*(x2133)))+(((x2131)*(x2134)))+(((x2132)*(x2134)))))), ((((IKabs(((((IkReal(-1.00000000000000))*(cj10)))+(((cj10)*(x2127))))) != 0)?((IkReal)1/(((((IkReal(-1.00000000000000))*(cj10)))+(((cj10)*(x2127)))))):(IkReal)1.0e30))*(((x2128)+(((cj9)*(x2136)))+(((IkReal(-1.00000000000000))*(x2129)*(x2130)))+(((cj9)*(x2135)))+(((x2131)*(x2137)))+(((cj9)*(x2138)))+(((IkReal(-1.00000000000000))*(x2129)*(x2133)))+(((x2132)*(x2137)))+(((cj9)*(x2139))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x2140=IKsin(j8); | |
IkReal x2141=IKcos(j8); | |
IkReal x2142=((cj7)*(sj11)); | |
IkReal x2143=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x2144=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x2145=((cj11)*(sj7)); | |
IkReal x2146=((cj6)*(r00)); | |
IkReal x2147=((IkReal(1.00000000000000))*(r20)); | |
IkReal x2148=((cj6)*(r01)); | |
IkReal x2149=((sj11)*(sj7)); | |
IkReal x2150=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x2151=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x2152=((cj11)*(cj7)); | |
IkReal x2153=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x2154=((cj6)*(r02)); | |
IkReal x2155=((r10)*(sj6)); | |
IkReal x2156=((cj7)*(sj6)); | |
IkReal x2157=((IkReal(1.00000000000000))*(cj10)); | |
IkReal x2158=((r11)*(sj6)); | |
IkReal x2159=((cj6)*(px)); | |
IkReal x2160=((sj9)*(x2141)); | |
IkReal x2161=((cj9)*(x2141)); | |
IkReal x2162=((cj9)*(x2140)); | |
IkReal x2163=((sj9)*(x2140)); | |
evalcond[0]=((((IkReal(-1.00000000000000))*(r22)*(x2153)))+(((r12)*(x2156)))+(((sj10)*(x2162)))+(((cj7)*(x2154)))+(((IkReal(-1.00000000000000))*(x2141)*(x2157)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(sj10)*(x2161)))+(((IkReal(-1.00000000000000))*(x2140)*(x2157)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x2144)))+(((IkReal(-1.00000000000000))*(r22)*(x2150)))+(((IkReal(-1.00000000000000))*(x2153)*(x2154)))); | |
evalcond[2]=((((IkReal(-1.00000000000000))*(x2147)*(x2152)))+(x2160)+(((IkReal(-1.00000000000000))*(x2145)*(x2146)))+(((IkReal(-1.00000000000000))*(r10)*(x2144)*(x2145)))+(((x2149)*(x2158)))+(((r21)*(x2142)))+(((x2148)*(x2149)))); | |
evalcond[3]=((((IkReal(-1.00000000000000))*(x2163)))+(((IkReal(-1.00000000000000))*(r11)*(x2142)*(x2144)))+(((x2146)*(x2152)))+(((IkReal(-1.00000000000000))*(x2145)*(x2147)))+(((x2152)*(x2155)))+(((IkReal(-1.00000000000000))*(x2142)*(x2148)))+(((r21)*(x2149)))); | |
evalcond[4]=((((r20)*(x2142)))+(((x2146)*(x2149)))+(((r21)*(x2152)))+(((x2145)*(x2148)))+(((IkReal(-1.00000000000000))*(x2157)*(x2161)))+(((x2145)*(x2158)))+(((sj10)*(x2140)))+(((x2149)*(x2155)))); | |
evalcond[5]=((((sj10)*(x2141)))+(((IkReal(-1.00000000000000))*(r11)*(x2144)*(x2152)))+(((r20)*(x2149)))+(((r21)*(x2145)))+(((IkReal(-1.00000000000000))*(r10)*(x2142)*(x2144)))+(((IkReal(-1.00000000000000))*(cj11)*(x2148)*(x2150)))+(((IkReal(-1.00000000000000))*(x2142)*(x2146)))+(((cj10)*(x2162)))); | |
evalcond[6]=((((x2145)*(x2151)))+(((IkReal(-0.0620002000000000))*(x2146)*(x2152)))+(((IkReal(-0.0620002000000000))*(x2152)*(x2155)))+(((py)*(x2156)))+(((IkReal(-1.00000000000000))*(pz)*(x2153)))+(((IkReal(0.0616850000000000))*(x2163)))+(((cj7)*(x2159)))+(((IkReal(0.0620002000000000))*(x2142)*(x2148)))+(((IkReal(-0.302000000000000))*(x2141)))+(((IkReal(0.0620002000000000))*(x2142)*(x2158)))+(((IkReal(-1.00000000000000))*(x2143)*(x2149)))+(((IkReal(-0.0701403000000000))*(x2140)))+(((IkReal(-0.00151567000000000))*(x2162)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(-1.00000000000000))*(x2142)*(x2143)))+(((IkReal(-0.0616850000000000))*(x2160)))+(((IkReal(-0.302000000000000))*(x2140)))+(((x2151)*(x2152)))+(((IkReal(-0.0620002000000000))*(x2148)*(x2149)))+(((IkReal(0.0620002000000000))*(x2145)*(x2155)))+(((IkReal(0.0620002000000000))*(x2145)*(x2146)))+(((IkReal(-1.00000000000000))*(py)*(sj7)*(x2144)))+(((IkReal(-1.00000000000000))*(pz)*(x2150)))+(((IkReal(0.00151567000000000))*(x2161)))+(((IkReal(-0.0620002000000000))*(x2149)*(x2158)))+(((IkReal(-1.00000000000000))*(x2153)*(x2159)))+(((IkReal(0.0701403000000000))*(x2141)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} else | |
{ | |
{ | |
IkReal j8array[1], cj8array[1], sj8array[1]; | |
bool j8valid[1]={false}; | |
_nj8 = 1; | |
IkReal x2164=((IkReal(1.00000000000000))*(cj10)); | |
IkReal x2165=((cj6)*(r02)); | |
IkReal x2166=((cj7)*(r22)); | |
IkReal x2167=((r12)*(sj6)); | |
IkReal x2168=((cj10)*(cj7)); | |
IkReal x2169=((r22)*(sj7)); | |
IkReal x2170=((IkReal(1.00000000000000))*(cj9)*(sj10)); | |
if( IKabs(((gconst9)*(((((IkReal(-1.00000000000000))*(cj7)*(x2165)*(x2170)))+(((cj9)*(sj10)*(x2169)))+(((IkReal(-1.00000000000000))*(cj7)*(x2167)*(x2170)))+(((IkReal(-1.00000000000000))*(x2164)*(x2166)))+(((IkReal(-1.00000000000000))*(sj7)*(x2164)*(x2167)))+(((IkReal(-1.00000000000000))*(sj7)*(x2164)*(x2165))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst9)*(((((IkReal(-1.00000000000000))*(x2166)*(x2170)))+(((IkReal(-1.00000000000000))*(x2164)*(x2169)))+(((IkReal(-1.00000000000000))*(sj7)*(x2167)*(x2170)))+(((IkReal(-1.00000000000000))*(sj7)*(x2165)*(x2170)))+(((x2167)*(x2168)))+(((x2165)*(x2168))))))) < IKFAST_ATAN2_MAGTHRESH ) | |
continue; | |
j8array[0]=IKatan2(((gconst9)*(((((IkReal(-1.00000000000000))*(cj7)*(x2165)*(x2170)))+(((cj9)*(sj10)*(x2169)))+(((IkReal(-1.00000000000000))*(cj7)*(x2167)*(x2170)))+(((IkReal(-1.00000000000000))*(x2164)*(x2166)))+(((IkReal(-1.00000000000000))*(sj7)*(x2164)*(x2167)))+(((IkReal(-1.00000000000000))*(sj7)*(x2164)*(x2165)))))), ((gconst9)*(((((IkReal(-1.00000000000000))*(x2166)*(x2170)))+(((IkReal(-1.00000000000000))*(x2164)*(x2169)))+(((IkReal(-1.00000000000000))*(sj7)*(x2167)*(x2170)))+(((IkReal(-1.00000000000000))*(sj7)*(x2165)*(x2170)))+(((x2167)*(x2168)))+(((x2165)*(x2168))))))); | |
sj8array[0]=IKsin(j8array[0]); | |
cj8array[0]=IKcos(j8array[0]); | |
if( j8array[0] > IKPI ) | |
{ | |
j8array[0]-=IK2PI; | |
} | |
else if( j8array[0] < -IKPI ) | |
{ j8array[0]+=IK2PI; | |
} | |
j8valid[0] = true; | |
for(int ij8 = 0; ij8 < 1; ++ij8) | |
{ | |
if( !j8valid[ij8] ) | |
{ | |
continue; | |
} | |
_ij8[0] = ij8; _ij8[1] = -1; | |
for(int iij8 = ij8+1; iij8 < 1; ++iij8) | |
{ | |
if( j8valid[iij8] && IKabs(cj8array[ij8]-cj8array[iij8]) < IKFAST_SOLUTION_THRESH && IKabs(sj8array[ij8]-sj8array[iij8]) < IKFAST_SOLUTION_THRESH ) | |
{ | |
j8valid[iij8]=false; _ij8[1] = iij8; break; | |
} | |
} | |
j8 = j8array[ij8]; cj8 = cj8array[ij8]; sj8 = sj8array[ij8]; | |
{ | |
IkReal evalcond[8]; | |
IkReal x2171=IKsin(j8); | |
IkReal x2172=IKcos(j8); | |
IkReal x2173=((cj7)*(sj11)); | |
IkReal x2174=((IkReal(0.0620002000000000))*(r21)); | |
IkReal x2175=((IkReal(1.00000000000000))*(sj6)); | |
IkReal x2176=((cj11)*(sj7)); | |
IkReal x2177=((cj6)*(r00)); | |
IkReal x2178=((IkReal(1.00000000000000))*(r20)); | |
IkReal x2179=((cj6)*(r01)); | |
IkReal x2180=((sj11)*(sj7)); | |
IkReal x2181=((IkReal(1.00000000000000))*(cj7)); | |
IkReal x2182=((IkReal(0.0620002000000000))*(r20)); | |
IkReal x2183=((cj11)*(cj7)); | |
IkReal x2184=((IkReal(1.00000000000000))*(sj7)); | |
IkReal x2185=((cj6)*(r02)); | |
IkReal x2186=((r10)*(sj6)); | |
IkReal x2187=((cj7)*(sj6)); | |
IkReal x2188=((IkReal(1.00000000000000))*(cj10)); | |
IkReal x2189=((r11)*(sj6)); | |
IkReal x2190=((cj6)*(px)); | |
IkReal x2191=((sj9)*(x2172)); | |
IkReal x2192=((cj9)*(x2172)); | |
IkReal x2193=((cj9)*(x2171)); | |
IkReal x2194=((sj9)*(x2171)); | |
evalcond[0]=((((sj10)*(x2193)))+(((IkReal(-1.00000000000000))*(x2172)*(x2188)))+(((r12)*(x2187)))+(((IkReal(-1.00000000000000))*(r22)*(x2184)))+(((cj7)*(x2185)))); | |
evalcond[1]=((((IkReal(-1.00000000000000))*(x2184)*(x2185)))+(((IkReal(-1.00000000000000))*(r22)*(x2181)))+(((IkReal(-1.00000000000000))*(x2171)*(x2188)))+(((IkReal(-1.00000000000000))*(r12)*(sj7)*(x2175)))+(((IkReal(-1.00000000000000))*(sj10)*(x2192)))); | |
evalcond[2]=((((x2180)*(x2189)))+(((IkReal(-1.00000000000000))*(r10)*(x2175)*(x2176)))+(((IkReal(-1.00000000000000))*(x2176)*(x2177)))+(((r21)*(x2173)))+(((IkReal(-1.00000000000000))*(x2178)*(x2183)))+(x2191)+(((x2179)*(x2180)))); | |
evalcond[3]=((((x2177)*(x2183)))+(((IkReal(-1.00000000000000))*(x2173)*(x2179)))+(((IkReal(-1.00000000000000))*(x2194)))+(((r21)*(x2180)))+(((IkReal(-1.00000000000000))*(r11)*(x2173)*(x2175)))+(((x2183)*(x2186)))+(((IkReal(-1.00000000000000))*(x2176)*(x2178)))); | |
evalcond[4]=((((x2177)*(x2180)))+(((IkReal(-1.00000000000000))*(x2188)*(x2192)))+(((sj10)*(x2171)))+(((r20)*(x2173)))+(((r21)*(x2183)))+(((x2176)*(x2189)))+(((x2176)*(x2179)))+(((x2180)*(x2186)))); | |
evalcond[5]=((((IkReal(-1.00000000000000))*(r10)*(x2173)*(x2175)))+(((cj10)*(x2193)))+(((IkReal(-1.00000000000000))*(cj11)*(x2179)*(x2181)))+(((sj10)*(x2172)))+(((IkReal(-1.00000000000000))*(r11)*(x2175)*(x2183)))+(((IkReal(-1.00000000000000))*(x2173)*(x2177)))+(((r20)*(x2180)))+(((r21)*(x2176)))); | |
evalcond[6]=((((IkReal(0.0620002000000000))*(x2173)*(x2179)))+(((cj7)*(x2190)))+(((IkReal(-0.0620002000000000))*(x2177)*(x2183)))+(((IkReal(-1.00000000000000))*(x2174)*(x2180)))+(((IkReal(-0.00151567000000000))*(x2193)))+(((IkReal(-0.0620002000000000))*(x2183)*(x2186)))+(((IkReal(0.0620002000000000))*(x2173)*(x2189)))+(((IkReal(0.0616850000000000))*(x2194)))+(((py)*(x2187)))+(((x2176)*(x2182)))+(((IkReal(-1.00000000000000))*(pz)*(x2184)))+(((IkReal(-0.302000000000000))*(x2172)))+(((IkReal(-0.0701403000000000))*(x2171)))); | |
evalcond[7]=((IkReal(0.270000000000000))+(((IkReal(-1.00000000000000))*(pz)*(x2181)))+(((IkReal(0.0701403000000000))*(x2172)))+(((IkReal(-0.0616850000000000))*(x2191)))+(((IkReal(-0.0620002000000000))*(x2179)*(x2180)))+(((IkReal(-0.0620002000000000))*(x2180)*(x2189)))+(((IkReal(0.00151567000000000))*(x2192)))+(((IkReal(0.0620002000000000))*(x2176)*(x2177)))+(((x2182)*(x2183)))+(((IkReal(-1.00000000000000))*(py)*(sj7)*(x2175)))+(((IkReal(-1.00000000000000))*(x2173)*(x2174)))+(((IkReal(0.0620002000000000))*(x2176)*(x2186)))+(((IkReal(-0.302000000000000))*(x2171)))+(((IkReal(-1.00000000000000))*(x2184)*(x2190)))); | |
if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 ) | |
{ | |
continue; | |
} | |
} | |
{ | |
std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6); | |
vinfos[0].jointtype = 1; | |
vinfos[0].foffset = j6; | |
vinfos[0].indices[0] = _ij6[0]; | |
vinfos[0].indices[1] = _ij6[1]; | |
vinfos[0].maxsolutions = _nj6; | |
vinfos[1].jointtype = 1; | |
vinfos[1].foffset = j7; | |
vinfos[1].indices[0] = _ij7[0]; | |
vinfos[1].indices[1] = _ij7[1]; | |
vinfos[1].maxsolutions = _nj7; | |
vinfos[2].jointtype = 1; | |
vinfos[2].foffset = j8; | |
vinfos[2].indices[0] = _ij8[0]; | |
vinfos[2].indices[1] = _ij8[1]; | |
vinfos[2].maxsolutions = _nj8; | |
vinfos[3].jointtype = 1; | |
vinfos[3].foffset = j9; | |
vinfos[3].indices[0] = _ij9[0]; | |
vinfos[3].indices[1] = _ij9[1]; | |
vinfos[3].maxsolutions = _nj9; | |
vinfos[4].jointtype = 1; | |
vinfos[4].foffset = j10; | |
vinfos[4].indices[0] = _ij10[0]; | |
vinfos[4].indices[1] = _ij10[1]; | |
vinfos[4].maxsolutions = _nj10; | |
vinfos[5].jointtype = 1; | |
vinfos[5].foffset = j11; | |
vinfos[5].indices[0] = _ij11[0]; | |
vinfos[5].indices[1] = _ij11[1]; | |
vinfos[5].maxsolutions = _nj11; | |
std::vector<int> vfree(0); | |
solutions.AddSolution(vinfos,vfree); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return solutions.GetNumSolutions()>0; | |
} | |
/// \brief Solve the det Ax^2+Bx+C = 0 problem using the Manocha and Canny method (1994) | |
/// | |
/// matcoeffs is of length 54*3, for 3 matrices | |
static inline void solvedialyticpoly12qep(const IkReal* matcoeffs, IkReal* rawroots, int& numroots) | |
{ | |
const IkReal tol = 128.0*std::numeric_limits<IkReal>::epsilon(); | |
IkReal IKFAST_ALIGNED16(M[24*24]) = {0}; | |
IkReal IKFAST_ALIGNED16(A[12*12]); | |
IkReal IKFAST_ALIGNED16(work[24*24*23]); | |
int ipiv[12]; | |
int info, coeffindex; | |
const int worksize=24*24*23; | |
const int matrixdim = 12; | |
const int matrixdim2 = 24; | |
numroots = 0; | |
// first setup M = [0 I; -C -B] and A | |
coeffindex = 0; | |
for(int j = 0; j < 6; ++j) { | |
for(int k = 0; k < 9; ++k) { | |
M[matrixdim+(j+6)+2*matrixdim*k] = M[matrixdim+j+2*matrixdim*(k+3)] = -matcoeffs[coeffindex++]; | |
} | |
} | |
for(int j = 0; j < 6; ++j) { | |
for(int k = 0; k < 9; ++k) { | |
M[matrixdim+(j+6)+2*matrixdim*k+matrixdim*2*matrixdim] = M[matrixdim+j+2*matrixdim*(k+3)+matrixdim*2*matrixdim] = -matcoeffs[coeffindex++]; | |
} | |
} | |
for(int j = 0; j < 6; ++j) { | |
for(int k = 0; k < 9; ++k) { | |
A[(j+6)+matrixdim*k] = A[j+matrixdim*(k+3)] = matcoeffs[coeffindex++]; | |
} | |
for(int k = 0; k < 3; ++k) { | |
A[j+matrixdim*k] = A[(j+6)+matrixdim*(k+9)] = 0; | |
} | |
} | |
const IkReal lfpossibilities[4][4] = {{1,-1,1,1},{1,0,-2,1},{1,1,2,0},{1,-1,4,1}}; | |
int lfindex = -1; | |
bool bsingular = true; | |
do { | |
dgetrf_(&matrixdim,&matrixdim,A,&matrixdim,&ipiv[0],&info); | |
if( info == 0 ) { | |
bsingular = false; | |
for(int j = 0; j < matrixdim; ++j) { | |
if( IKabs(A[j*matrixdim+j]) < 100*tol ) { | |
bsingular = true; | |
break; | |
} | |
} | |
if( !bsingular ) { | |
break; | |
} | |
} | |
if( lfindex == 3 ) { | |
break; | |
} | |
// transform by the linear functional | |
lfindex++; | |
const IkReal* lf = lfpossibilities[lfindex]; | |
// have to reinitialize A | |
coeffindex = 0; | |
for(int j = 0; j < 6; ++j) { | |
for(int k = 0; k < 9; ++k) { | |
IkReal a = matcoeffs[coeffindex+108], b = matcoeffs[coeffindex+54], c = matcoeffs[coeffindex]; | |
A[(j+6)+matrixdim*k] = A[j+matrixdim*(k+3)] = lf[0]*lf[0]*a+lf[0]*lf[2]*b+lf[2]*lf[2]*c; | |
M[matrixdim+(j+6)+2*matrixdim*k] = M[matrixdim+j+2*matrixdim*(k+3)] = -(lf[1]*lf[1]*a + lf[1]*lf[3]*b + lf[3]*lf[3]*c); | |
M[matrixdim+(j+6)+2*matrixdim*k+matrixdim*2*matrixdim] = M[matrixdim+j+2*matrixdim*(k+3)+matrixdim*2*matrixdim] = -(2*lf[0]*lf[1]*a + (lf[0]*lf[3]+lf[1]*lf[2])*b + 2*lf[2]*lf[3]*c); | |
coeffindex++; | |
} | |
for(int k = 0; k < 3; ++k) { | |
A[j+matrixdim*k] = A[(j+6)+matrixdim*(k+9)] = 0; | |
} | |
} | |
} while(lfindex<4); | |
if( bsingular ) { | |
return; | |
} | |
dgetrs_("No transpose", &matrixdim, &matrixdim2, A, &matrixdim, &ipiv[0], &M[matrixdim], &matrixdim2, &info); | |
if( info != 0 ) { | |
return; | |
} | |
// set identity in upper corner | |
for(int j = 0; j < matrixdim; ++j) { | |
M[matrixdim*2*matrixdim+j+matrixdim*2*j] = 1; | |
} | |
IkReal IKFAST_ALIGNED16(wr[24]); | |
IkReal IKFAST_ALIGNED16(wi[24]); | |
IkReal IKFAST_ALIGNED16(vr[24*24]); | |
int one=1; | |
dgeev_("N", "V", &matrixdim2, M, &matrixdim2, wr, wi,NULL, &one, vr, &matrixdim2, work, &worksize, &info); | |
if( info != 0 ) { | |
return; | |
} | |
IkReal Breal[matrixdim-1]; | |
for(int i = 0; i < matrixdim2; ++i) { | |
if( IKabs(wi[i]) < tol*100 ) { | |
IkReal* ev = vr+matrixdim2*i; | |
if( IKabs(wr[i]) > 1 ) { | |
ev += matrixdim; | |
} | |
// consistency has to be checked!! | |
if( IKabs(ev[0]) < tol ) { | |
continue; | |
} | |
IkReal iconst = 1/ev[0]; | |
for(int j = 1; j < matrixdim; ++j) { | |
Breal[j-1] = ev[j]*iconst; | |
} | |
if( checkconsistency12(Breal) ) { | |
if( lfindex >= 0 ) { | |
const IkReal* lf = lfpossibilities[lfindex]; | |
rawroots[numroots++] = (wr[i]*lf[0]+lf[1])/(wr[i]*lf[2]+lf[3]); | |
} | |
else { | |
rawroots[numroots++] = wr[i]; | |
} | |
bool bsmall0=IKabs(ev[0]) > IKabs(ev[3]); | |
bool bsmall1=IKabs(ev[0]) > IKabs(ev[1]); | |
if( bsmall0 && bsmall1 ) { | |
rawroots[numroots++] = ev[3]/ev[0]; | |
rawroots[numroots++] = ev[1]/ev[0]; | |
} | |
else if( bsmall0 && !bsmall1 ) { | |
rawroots[numroots++] = ev[5]/ev[2]; | |
rawroots[numroots++] = ev[2]/ev[1]; | |
} | |
else if( !bsmall0 && bsmall1 ) { | |
rawroots[numroots++] = ev[9]/ev[6]; | |
rawroots[numroots++] = ev[10]/ev[9]; | |
} | |
else if( !bsmall0 && !bsmall1 ) { | |
rawroots[numroots++] = ev[11]/ev[8]; | |
rawroots[numroots++] = ev[11]/ev[10]; | |
} | |
} | |
} | |
} | |
} | |
static inline bool checkconsistency12(const IkReal* Breal) | |
{ | |
IkReal norm = 0.1; | |
for(int i = 0; i < 11; ++i) { | |
norm += IKabs(Breal[i]); | |
} | |
IkReal tol = 1e-6*norm; // have to increase the threshold since many computations are involved | |
return IKabs(Breal[0]*Breal[0]-Breal[1]) < tol && IKabs(Breal[0]*Breal[2]-Breal[3]) < tol && IKabs(Breal[1]*Breal[2]-Breal[4]) < tol && IKabs(Breal[2]*Breal[2]-Breal[5]) < tol && IKabs(Breal[0]*Breal[5]-Breal[6]) < tol && IKabs(Breal[1]*Breal[5]-Breal[7]) < tol && IKabs(Breal[2]*Breal[5]-Breal[8]) < tol && IKabs(Breal[0]*Breal[8]-Breal[9]) < tol && IKabs(Breal[1]*Breal[8]-Breal[10]) < tol; | |
} | |
}; | |
/// solves the inverse kinematics equations. | |
/// \param pfree is an array specifying the free joints of the chain. | |
IKFAST_API bool ComputeIk(const IkReal* eetrans, const IkReal* eerot, const IkReal* pfree, IkSolutionListBase<IkReal>& solutions) { | |
IKSolver solver; | |
return solver.ComputeIk(eetrans,eerot,pfree,solutions); | |
} | |
IKFAST_API const char* GetKinematicsHash() { return "<robot:genericrobot - abby (5288f61bbe95d46f4c49134ed1c59e1d)>"; } | |
IKFAST_API const char* GetIkFastVersion() { return IKFAST_STRINGIZE(IKFAST_VERSION); } | |
#ifdef IKFAST_NAMESPACE | |
} // end namespace | |
#endif | |
#ifndef IKFAST_NO_MAIN | |
#include <stdio.h> | |
#include <stdlib.h> | |
#ifdef IKFAST_NAMESPACE | |
using namespace IKFAST_NAMESPACE; | |
#endif | |
int main(int argc, char** argv) | |
{ | |
if( argc != 12+GetNumFreeParameters()+1 ) { | |
printf("\nUsage: ./ik r00 r01 r02 t0 r10 r11 r12 t1 r20 r21 r22 t2 free0 ...\n\n" | |
"Returns the ik solutions given the transformation of the end effector specified by\n" | |
"a 3x3 rotation R (rXX), and a 3x1 translation (tX).\n" | |
"There are %d free parameters that have to be specified.\n\n",GetNumFreeParameters()); | |
return 1; | |
} | |
IkSolutionList<IkReal> solutions; | |
std::vector<IkReal> vfree(GetNumFreeParameters()); | |
IkReal eerot[9],eetrans[3]; | |
eerot[0] = atof(argv[1]); eerot[1] = atof(argv[2]); eerot[2] = atof(argv[3]); eetrans[0] = atof(argv[4]); | |
eerot[3] = atof(argv[5]); eerot[4] = atof(argv[6]); eerot[5] = atof(argv[7]); eetrans[1] = atof(argv[8]); | |
eerot[6] = atof(argv[9]); eerot[7] = atof(argv[10]); eerot[8] = atof(argv[11]); eetrans[2] = atof(argv[12]); | |
for(std::size_t i = 0; i < vfree.size(); ++i) | |
vfree[i] = atof(argv[13+i]); | |
bool bSuccess = ComputeIk(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, solutions); | |
if( !bSuccess ) { | |
fprintf(stderr,"Failed to get ik solution\n"); | |
return -1; | |
} | |
printf("Found %d ik solutions:\n", (int)solutions.GetNumSolutions()); | |
std::vector<IkReal> solvalues(GetNumJoints()); | |
for(std::size_t i = 0; i < solutions.GetNumSolutions(); ++i) { | |
const IkSolutionBase<IkReal>& sol = solutions.GetSolution(i); | |
printf("sol%d (free=%d): ", (int)i, (int)sol.GetFree().size()); | |
std::vector<IkReal> vsolfree(sol.GetFree().size()); | |
sol.GetSolution(&solvalues[0],vsolfree.size()>0?&vsolfree[0]:NULL); | |
for( std::size_t j = 0; j < solvalues.size(); ++j) | |
printf("%.15f, ", solvalues[j]); | |
printf("\n"); | |
} | |
return 0; | |
} | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment