void Quaternion::FromAngleAxis(const Radian& rfAngle, const Vector3& rkAxis) { Radian fHalfAngle(rfAngle * 0.5); float fSin = Math::Sin(fHalfAngle); w = Math::Cos(fHalfAngle); x = fSin*rkAxis.x; y = fSin*rkAxis.y; z = fSin*rkAxis.z; }
//----------------------------------------------------------------------- void Quaternion::FromAngleAxis(const Radian& rfAngle, const Vector3& rkAxis) { // 断言: axis[] 是单位长度 // // 这个四元数表示的旋转是 // q = cos(A/2)+sin(A/2)*(x*i+y*j+z*k) Radian fHalfAngle(0.5*rfAngle.valueRadians()); Real fSin = Math::Sin(fHalfAngle); w = Math::Cos(fHalfAngle); x = fSin*rkAxis.x; y = fSin*rkAxis.y; z = fSin*rkAxis.z; }
// ----------------------------------------------------------------------------------------- void CPepeEngineQuaternion::fromAngleAxis(const Radian& rfAngle, const CPepeEngineVector3& rkAxis) { /** * assert: axis[] is unit length * * The quaternion representing the rotation is * q = cos(A/2)+sin(A/2)*(x*i+y*j+z*k) */ Radian fHalfAngle(0.5 * rfAngle); float fSin = CPepeEngineMath::Sin(fHalfAngle); w = CPepeEngineMath::Cos(fHalfAngle); x = fSin * rkAxis.x; y = fSin * rkAxis.y; z = fSin * rkAxis.z; }
void fromAngleAxis(qv4& result, const f32 rfAngle, const v3& rkAxis) { // assert: axis[] is unit length // // The quaternion representing the rotation is // q = cos(A/2)+sin(A/2)*(x*i+y*j+z*k) f32 fHalfAngle(0.5f * rfAngle); f32 fSin = std::sin(fHalfAngle); result.w = std::cos(fHalfAngle); result.x = fSin*rkAxis.x; result.y = fSin*rkAxis.y; result.z = fSin*rkAxis.z; }