#pragma once #include "akCoreLinker.h" #define _USE_MATH_DEFINES #include #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; }; };