float Behaviour::calcAngleRef(cv::Point3f p1Ini, cv::Point3f p1End, 
               cv::Point3f p2Ini, cv::Point3f p2End){
     
     vec3 v1= vec3(p1End.x -p1Ini.x, p1End.y - p1Ini.y, p1End.z - p1Ini.z);
     vec3 v2= vec3(p2End.x -p2Ini.x, p2End.y - p2Ini.y, p2End.z - p2Ini.z);
     
     vec3 vRef= vec3(v2);
     
     float angle=signed_angle(v1,v2, vRef)*180 / 3.1415926;//radians to degrees
         
     return angle; 
 }
float calcAngleRef(vec3 p1Ini,vec3 p1End,
        vec3 p2Ini,vec3 p2End) {

    vec3 v1 = vec3(p1End.x - p1Ini.x, p1End.y - p1Ini.y, p1End.z - p1Ini.z);
    vec3 v2 = vec3(p2End.x - p2Ini.x, p2End.y - p2Ini.y, p2End.z - p2Ini.z);

    vec3 vRef = vec3(v2);

    float angle = signed_angle(v1, v2, vRef)*180 / 3.1415926; //radians to degrees

    return angle;
}
Exemple #3
0
///
/// @par Detailed description 
/// ... 
/// @param [in, out] (param1) ...
/// @return ...
/// @note ...
float
sasmath::
dihedral_angle(Eigen::Matrix<float,3,1> &coor1, Eigen::Matrix<float,3,1> &coor2, Eigen::Matrix<float,3,1> &coor3, Eigen::Matrix<float,3,1> &coor4)
{

    float da ;

    Eigen::Matrix<float,3,1> r1 ; r1 = coor1 - coor2 ;
    Eigen::Matrix<float,3,1> r2 ; r2 = coor3 - coor2 ;
    Eigen::Matrix<float,3,1> r3 ; r3 = -1.0*r2 ;
    Eigen::Matrix<float,3,1> r4 ; r4 = coor4 - coor3 ;
    
    Eigen::Matrix<float,3,1> n1 ; n1 = r1.cross(r2) ;
    Eigen::Matrix<float,3,1> n2 ; n2 = r3.cross(r4) ;

    da = signed_angle(n1,n2,r2) ;

    return da ;
}
void get_km_phase_space(double* jvec, double* zvec)
{
  double p0vec[3];
  double p1vec[3];
  double p2vec[3];
  double p3vec[3];

  double avec[3];
  double bvec[3];

  double tempvec[3];
  double temp_norm = 0.0;

  double p1 = 0.0, p2 = 0.0;
  double q1 = 0.0, q2 = 0.0;
  int i;
  

  for(i = 0; i < 3; i++){
    p0vec[i] = jvec[i+1];
    p1vec[i] = p0vec[i] + jvec[(4+i)];
    p2vec[i] = p1vec[i] + jvec[(7+i)];
    p3vec[i] = p2vec[i] + jvec[(10+i)];
  }

  p1 = three_vec_norm(p1vec);
  p2 = three_vec_norm(p2vec);

  three_vec_cross(p0vec, p1vec, tempvec);
  temp_norm = three_vec_norm(tempvec);

  three_vec_cross(p0vec, p1vec, avec);
  avec[0] = avec[0] / temp_norm;
  avec[1] = avec[1] / temp_norm;
  avec[2] = avec[2] / temp_norm;

  three_vec_cross(p1vec, p2vec, tempvec);
  temp_norm = three_vec_norm(tempvec);

  three_vec_cross(p1vec, p2vec, bvec);
  bvec[0] = bvec[0] / temp_norm;
  bvec[1] = bvec[1] / temp_norm;
  bvec[2] = bvec[2] / temp_norm;
  
  q1 = signed_angle(avec, bvec, p1vec);

  three_vec_cross(p1vec, p2vec, tempvec);
  temp_norm = three_vec_norm(tempvec);

  three_vec_cross(p1vec, p2vec, avec);
  avec[0] = avec[0] / temp_norm;
  avec[1] = avec[1] / temp_norm;
  avec[2] = avec[2] / temp_norm;

  three_vec_cross(p2vec, p3vec, tempvec);
  temp_norm = three_vec_norm(tempvec);

  three_vec_cross(p2vec, p3vec, bvec);
  bvec[0] = bvec[0] / temp_norm;
  bvec[1] = bvec[1] / temp_norm;
  bvec[2] = bvec[2] / temp_norm;

    
  q2 = signed_angle(avec, bvec, p2vec);

  zvec[0] = q1;
  zvec[1] = q2;
  zvec[2] = p1;  
  zvec[3] = p2;
}