#pragma once
|
|
#include "akCoreLinker.h"
|
|
#define _USE_MATH_DEFINES
|
#include <math.h>
|
|
|
|
|
#define KHVECTOR_HEADER(akVector3d, double) \
|
class AKCORE_DLLSPEC akVector3d \
|
{ \
|
public: \
|
\
|
akVector3d(); \
|
akVector3d(double px,double py, double pz); \
|
inline void set(double px,double py, double pz); \
|
\
|
inline akVector3d operator+(const akVector3d& vec3d); \
|
inline akVector3d operator-(const akVector3d& vec3d); \
|
inline akVector3d& operator=(const akVector3d& vec3d); \
|
inline akVector3d& operator+=(const akVector3d& vec3d); \
|
inline akVector3d& operator-=(const akVector3d& vec3d); \
|
akVector3d operator*(float& a) \
|
{ \
|
akVector3d returnval; \
|
\
|
returnval.x = x * a; \
|
returnval.y = y * a; \
|
returnval.z = z * a; \
|
\
|
return returnval; \
|
}; \
|
\
|
akVector3d operator *(akVector3d &vec) \
|
{ \
|
akVector3d vc; \
|
vc.x = y*vec.z - z*vec.y; \
|
vc.y = z*vec.x - x*vec.z; \
|
vc.z = x*vec.y - y*vec.x; \
|
return vc; \
|
} \
|
\
|
double Dot(akVector3d vec) \
|
{ \
|
return (vec.x * x + vec.y * y + vec.z * z); \
|
}; \
|
double Mag() \
|
{ \
|
return sqrt(x*x+y*y); \
|
}; \
|
double getLength() \
|
{ \
|
return sqrt(x*x+y*y+z*z); \
|
}; \
|
void Normalize() \
|
{ \
|
double length; \
|
\
|
length = sqrt((x*x) + (y*y) +(z*z)); \
|
if(length == 0.0f) length = 1.0f; \
|
\
|
x = x / length; \
|
y = y / length; \
|
z = z / length; \
|
\
|
}; \
|
public: \
|
double x,y,z; \
|
};
|
|
|
namespace akCore
|
{
|
class AKCORE_DLLSPEC akVector3d
|
{
|
public:
|
|
akVector3d();
|
akVector3d(double px,double py, double pz);
|
inline void set(double px,double py, double pz);
|
|
inline akVector3d operator+(const akVector3d& vec3d);
|
inline akVector3d operator-(const akVector3d& vec3d);
|
inline akVector3d& operator=(const akVector3d& vec3d);
|
inline akVector3d& operator+=(const akVector3d& vec3d);
|
inline akVector3d& operator-=(const akVector3d& vec3d);
|
akVector3d operator*(float& a)
|
{
|
akVector3d returnval;
|
|
returnval.x = x * a;
|
returnval.y = y * a;
|
returnval.z = z * a;
|
|
return returnval;
|
};
|
|
akVector3d operator *(akVector3d &vec)
|
{
|
akVector3d vc;
|
vc.x = y*vec.z - z*vec.y;
|
vc.y = z*vec.x - x*vec.z;
|
vc.z = x*vec.y - y*vec.x;
|
return vc;
|
}
|
|
//³»Àû
|
double Dot(akVector3d vec)
|
{
|
return (vec.x * x + vec.y * y + vec.z * z);
|
};
|
double Mag()
|
{
|
return sqrt(x*x+y*y);
|
};
|
double getLength()
|
{
|
return sqrt(x*x+y*y+z*z);
|
};
|
void Normalize()
|
{
|
double length;
|
|
//º¤ÅÍÀÇ ±æÀ̸¦ °è»êÇÑ´Ù.
|
length = sqrt((x*x) + (y*y) +(z*z));
|
// ±æÀ̰¡ 0¿¡ °¡±î¿î º¤ÅÍ¿¡°Ô ÀýÀýÇÑ °ªÀ» Ç×´çÇÏ¿© ÇÁ·Î±×·¥ÀÌ ÆøÁÖÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
|
if(length == 0.0f) length = 1.0f;
|
|
// °¢ ¼ººÐÀ» º¤ÅÍÀÇ ±æÀÌ·Î ³ª´©¸é ´ÜÀ§ º¤ÅͰ¡ µÈ´Ù.
|
x = x / length;
|
y = y / length;
|
z = z / length;
|
|
};
|
public:
|
double x,y,z;
|
};
|
|
//////////////////////////////////////////////////////////////////////////
|
// khVector3f
|
KHVECTOR_HEADER(khVector3f, float)
|
|
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
class AKCORE_DLLSPEC akVector2d
|
{
|
public:
|
akVector2d();
|
akVector2d(double px,double py);
|
inline void set(double px,double py);
|
|
|
|
|
inline akVector2d operator+(const akVector2d& vec3d);
|
inline akVector2d operator-(const akVector2d& vec3d);
|
inline akVector2d& operator=(const akVector2d& vec3d);
|
inline akVector2d& operator+=(const akVector2d& vec3d);
|
inline akVector2d& operator-=(const akVector2d& vec3d);
|
public:
|
double x,y,z;
|
};
|
};
|