Example #1
0
bool TET::restBaryCenter(const VEC3F& vert, QUATERNION& lambda)
{
  VEC3F row[3];
  row[0] = *(_restVertices[0]) - *(_restVertices[3]);
  row[1] = *(_restVertices[1]) - *(_restVertices[3]),
  row[2] = *(_restVertices[2]) - *(_restVertices[3]);

  MATRIX3 T;
  T << row[0][0], row[1][0], row[2][0], 
       row[0][1], row[1][1], row[2][1], 
       row[0][2], row[1][2], row[2][2];

  VEC3F lambda0_3 = T.inverse() * (vert - *(_restVertices[3]));
  lambda.x() = lambda0_3[0];
  lambda.y() = lambda0_3[1];
  lambda.z() = lambda0_3[2];
  lambda.w() = 1.0 - lambda.x() - lambda.y() - lambda.z();

  if(!(
      0 <= lambda.x() && lambda.x() <= 1
   && 0 <= lambda.y() && lambda.y() <= 1
   && 0 <= lambda.z() && lambda.z() <= 1
   && 0 <= lambda.w() && lambda.w() <= 1) )
    return false;
  return true;
}
Example #2
0
int CurvilinearGrid::
inverse_jacobian_t(MATRIX3& mi, double r, double s, double t)
{
	VECTOR3 dxyzdr = xyz_r + s*xyz_rs + t*xyz_rt
		+ s*t*xyz_rst;

	VECTOR3 dxyzds = xyz_s + r*xyz_rs + t*xyz_st
		+ r*t*xyz_rst;

	VECTOR3 dxyzdt = xyz_t + r*xyz_rt + s*xyz_st
		+ r*s*xyz_rst;

	MATRIX3 m(dxyzdr, dxyzds, dxyzdt);
	MATRIX3 tm = m.transpose();
	tm.inverse(mi);

	return   1;
}