Skip to content
Snippets Groups Projects
Select Git revision
  • bb2f418ba9da6facaf62c151c557e885712837fd
  • master default protected
2 results

shape.py

Blame
  • Numeric.cpp 36.88 KiB
    // Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
    //
    // See the LICENSE.txt file for license information. Please report all
    // bugs and problems to <gmsh@geuz.org>.
    
    #include "GmshConfig.h"
    #include "GmshMessage.h"
    #include "Numeric.h"
    
    #define SQU(a)      ((a)*(a))
    
    double myatan2(double a, double b)
    {
      if(a == 0.0 && b == 0)
        return 0.0;
      return atan2(a, b);
    }
    
    double myasin(double a)
    {
      if(a <= -1.)
        return -M_PI / 2.;
      else if(a >= 1.)
        return M_PI / 2.;
      else
        return asin(a);
    }
    
    double myacos(double a)
    {
      if(a <= -1.)
        return M_PI;
      else if(a >= 1.)
        return 0.;
      else
        return acos(a);
    }
    
    void matvec(double mat[3][3], double vec[3], double res[3])
    {
      res[0] = mat[0][0] * vec[0] + mat[0][1] * vec[1] + mat[0][2] * vec[2];
      res[1] = mat[1][0] * vec[0] + mat[1][1] * vec[1] + mat[1][2] * vec[2];
      res[2] = mat[2][0] * vec[0] + mat[2][1] * vec[1] + mat[2][2] * vec[2];
    }
    
    void matmat(double mat1[3][3], double mat2[3][3], double res[3][3])
    {
      res[0][0] = mat1[0][0]*mat2[0][0] + mat1[0][1]*mat2[1][0] + mat1[0][2]*mat2[2][0];
      res[0][1] = mat1[0][0]*mat2[0][1] + mat1[0][1]*mat2[1][1] + mat1[0][2]*mat2[2][1];
      res[0][2] = mat1[0][0]*mat2[0][2] + mat1[0][1]*mat2[1][2] + mat1[0][2]*mat2[2][2];
      res[1][0] = mat1[1][0]*mat2[0][0] + mat1[1][1]*mat2[1][0] + mat1[1][2]*mat2[2][0];
      res[1][1] = mat1[1][0]*mat2[0][1] + mat1[1][1]*mat2[1][1] + mat1[1][2]*mat2[2][1];
      res[1][2] = mat1[1][0]*mat2[0][2] + mat1[1][1]*mat2[1][2] + mat1[1][2]*mat2[2][2];
      res[2][0] = mat1[2][0]*mat2[0][0] + mat1[2][1]*mat2[1][0] + mat1[2][2]*mat2[2][0];
      res[2][1] = mat1[2][0]*mat2[0][1] + mat1[2][1]*mat2[1][1] + mat1[2][2]*mat2[2][1];
      res[2][2] = mat1[2][0]*mat2[0][2] + mat1[2][1]*mat2[1][2] + mat1[2][2]*mat2[2][2];
    }
    
    void normal3points(double x0, double y0, double z0,
                       double x1, double y1, double z1,
                       double x2, double y2, double z2,
                       double n[3])
    {
      double t1[3] = {x1 - x0, y1 - y0, z1 - z0};
      double t2[3] = {x2 - x0, y2 - y0, z2 - z0};
      prodve(t1, t2, n);
      norme(n);
    }
    
    void normal2points(double x0, double y0, double z0,