示例#1
0
文件: quat.c 项目: stetre/moonglmath
int quat_FromMat(lua_State *L)
    {
    size_t nr, nc;
    double t, s, r;
    mat_t m;
    quat_t q;
    checkmat(L, 1, m, &nr, &nc);
    if( !(((nr==3) && (nc==3)) || ((nr==4) && (nc==4))) )
        return luaL_argerror(L, 1, "expected 3x3 or 4x4 matrix");
    t = m[0][0] + m[1][1] + m[2][2];
    if( t < 0 )
        {
        r = sqrt(1 + m[0][0] - m[1][1] - m[2][2]);
        s = 0.5/r;
        q[0] = (m[2][1] - m[1][2])*s;
        q[1] = 0.5*r;
        q[2] = (m[0][1] + m[1][0])*s;
        q[3] = (m[2][0] + m[0][2])*s;
        }
    else
        {
        r = sqrt(1+t);
        s = 0.5/r;
        q[0] = 0.5*r;
        q[1] = (m[2][1] - m[1][2])*s;
        q[2] = (m[0][2] - m[2][0])*s;
        q[3] = (m[1][0] + m[0][1])*s;
        }
    return pushquat(L, q);
    }
示例#2
0
文件: sparselu.c 项目: kempj/hpxMP
int sparselu_check(float **SEQ, float **BENCH)
{
   int ii,jj,ok=1;

   for (ii=0; ((ii<bots_arg_size) && ok); ii++)
   {
      for (jj=0; ((jj<bots_arg_size) && ok); jj++)
      {
         if ((SEQ[ii*bots_arg_size+jj] == NULL) && (BENCH[ii*bots_arg_size+jj] != NULL)) ok = FALSE;
         if ((SEQ[ii*bots_arg_size+jj] != NULL) && (BENCH[ii*bots_arg_size+jj] == NULL)) ok = FALSE;
         if ((SEQ[ii*bots_arg_size+jj] != NULL) && (BENCH[ii*bots_arg_size+jj] != NULL))
            ok = checkmat(SEQ[ii*bots_arg_size+jj], BENCH[ii*bots_arg_size+jj]);
      }
   }
   if (ok) return BOTS_RESULT_SUCCESSFUL;
   else return BOTS_RESULT_UNSUCCESSFUL;
}
示例#3
0
int sparselu_check(float **SEQ,float **BENCH)
{
  int ii;
  int jj;
  int ok = 1;
  for (ii = 0; (ii < bots_arg_size) && (ok); ii++) {
    for (jj = 0; (jj < bots_arg_size) && (ok); jj++) {
      if (((SEQ[(ii * bots_arg_size) + jj]) == ((0L))) && ((BENCH[(ii * bots_arg_size) + jj]) != ((0L)))) 
        ok = 0;
      if (((SEQ[(ii * bots_arg_size) + jj]) != ((0L))) && ((BENCH[(ii * bots_arg_size) + jj]) == ((0L)))) 
        ok = 0;
      if (((SEQ[(ii * bots_arg_size) + jj]) != ((0L))) && ((BENCH[(ii * bots_arg_size) + jj]) != ((0L)))) 
        ok = checkmat((SEQ[(ii * bots_arg_size) + jj]),(BENCH[(ii * bots_arg_size) + jj]));
    }
  }
  if (ok) 
    return 1;
  else 
    return 2;
}