예제 #1
0
void dRz_dtheta(Matrix3x3 &out, double theta)
{
  out.setZero();

  double s = sin(theta);
  double c = cos(theta);

  out(0,0) = -s; out(0,1) = -c;
  out(1,0) = c; out(1,1) = -s;
}
예제 #2
0
Matrix3x3 SHVector::mu2() const {
	const Float sqrt5o3 = std::sqrt((Float) 5/ (Float) 3);
	const Float sqrto3 = std::sqrt((Float) 1/ (Float) 3);
	Matrix3x3 result;
	result.setZero();

	SAssert(m_bands > 0);
	result(0, 0) = result(1, 1) =
		result(2, 2) = sqrt5o3*operator()(0,0);

	if (m_bands >= 3) {
		result(0, 0) += -operator()(2,0)*sqrto3 + operator()(2,2);
		result(0, 1) = operator()(2,-2);
		result(0, 2) = -operator()(2, 1);
		result(1, 0) = operator()(2,-2);
		result(1, 1) += -operator()(2,0)*sqrto3 - operator()(2,2);
		result(1, 2) = -operator()(2,-1);
		result(2, 0) = -operator()(2, 1);
		result(2, 1) = -operator()(2,-1);
		result(2, 2) += 2*sqrto3*operator()(2,0);
	}

	return result * (2*std::sqrt((Float) M_PI / 15));
}