Esempio n. 1
2
	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;
	}
Esempio n. 2
0
	//-----------------------------------------------------------------------
	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;
}
Esempio n. 4
0
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;
}