mathematics for 3d game and computer graphics 책의 3장 연습문제 5번 답으로 작성한 quaternion class.
#ifndef __QUATERNION_H__
#define __QUATERNION_H__
namespace toki
{
class cQuaternion
{
public:
cQuaternion() {}
~cQuaternion() {}
//
cQuaternion(float aW, float aX, float aY, float aZ)
{
w_ = aW;
x_ = aX;
y_ = aY;
z_ = aZ;
}
cQuaternion(const cQuaternion& aQuat)
{
*this = aQuat;
}
cQuaternion& operator = (const cQuaternion& aQuat)
{
if(this != &aQuat)
{
w_ = aQuat.w_;
x_ = aQuat.x_;
y_ = aQuat.y_;
z_ = aQuat.z_;
}
return *this;
}
cQuaternion& operator += (float aW)
{
w_ += aW;
return *this;
}
cQuaternion& operator -= (float aW)
{
w_ -= aW;
return *this;
}
cQuaternion& operator *= (float aW)
{
w_ *= aW;
x_ *= aW;
y_ *= aW;
z_ *= aW;
return *this;
}
cQuaternion& operator /= (float aW)
{
w_ /= aW;
x_ /= aW;
y_ /= aW;
z_ /= aW;
return *this;
}
cQuaternion& operator *= (const cQuaternion& aQuat)
{
w_ = w_*aQuat.w_ - x_*aQuat.x_ - y_*aQuat.y_ - z_*aQuat.z_;
x_ = w_*aQuat.x_ + x_*aQuat.w_ + y_*aQuat.z_ - z_*aQuat.y_;
y_ = w_*aQuat.y_ - x_*aQuat.z_ + y_*aQuat.w_ + z_*aQuat.x_;
z_ = w_*aQuat.z_ + x_*aQuat.y_ - z_*aQuat.x_ + z_*aQuat.w_;
return *this;
}
// axis must pre-normalize.
void setToFromAxisAngle(float aX, float aY, float aZ, float aAngle)
{
float s,c;
s = sin(aAngle/2.0f);
c = cos(aAngle/2.0f);
w_ = c;
x_ = aX * s;
y_ = aY * s;
z_ = aZ * s;
}
float magnitude(void)
{
return sqrt(square());
}
const cQuaternion copyInvertQuaternion(void) const
{
float s = square();
return cQuaternion(w_ / s, x_ / -s, y_ / -s, z_ / -s);
}
private:
float square(void) const
{
return w_*w_+x_*x_+y_*y_+z_*z_;
}
float w_,x_,y_,z_;
};
inline const cQuaternion operator * (const cQuaternion& aLhs, const cQuaternion& aRhs)
{
return(cQuaternion(aLhs) *= aRhs);
}
inline const cQuaternion operator + (const cQuaternion& aQuat, float aScalar)
{
return(cQuaternion(aQuat) += aScalar);
}
inline const cQuaternion operator + (float aScalar, const cQuaternion& aQuat)
{
return(cQuaternion(aQuat) += aScalar);
}
inline const cQuaternion operator - (const cQuaternion& aQuat, float aScalar)
{
return(cQuaternion(aQuat) -= aScalar);
}
inline const cQuaternion operator - (float aScalar, const cQuaternion& aQuat)
{
return(cQuaternion(aQuat) -= aScalar);
}
inline const cQuaternion operator * (const cQuaternion& aQuat, float aScalar)
{
return(cQuaternion(aQuat) *= aScalar);
}
inline const cQuaternion operator * (float aScalar, const cQuaternion& aQuat)
{
return(cQuaternion(aQuat) *= aScalar);
}
inline const cQuaternion operator / (const cQuaternion& aQuat, float aScalar)
{
return(cQuaternion(aQuat) /= aScalar);
}
inline const cQuaternion makeQuaternionFromAxisAngle(float aX, float aY, float aZ, float aAngle)
{
cQuaternion ret;
ret.setToFromAxisAngle(aX,aY,aZ,aAngle);
return ret;
}
inline const cQuaternion invertQuaternion(const cQuaternion& aQuat)
{
return cQuaternion(aQuat.copyInvertQuaternion());
}
}
#endif//__QUATERNION_H__
trackback from: Xcode에서 Hello world만들기
답글삭제오늘은 어제 배운 Hello world프로그램을 만들어볼까 합니다. XCODE에선 처음 프로젝트를 열었을때 기본적으로 Hello world프로그램이 만들어져있지만 오늘은 지우고 만들어 보겠습니다. ▲Xcode의 첫 화면입니다. Create a new Xcode project를 클릭합니다. ▲ Create버튼을 클릭하면 이런창이 뜹니다. 이곳에서 C를 클릭합니다. ▲저장하실 위치를 선택후 ▲이런 창이 뜨면 준비가 끝난것 입니다. ▲대부분 c언어는 알고..