SDC C-Project CF Review 프로그램
LYW
2021-10-15 e5fa774d622d6852fe8e1f033045aed221649108
ReviewHistory/include/akCore/akStructVector.h
»õ ÆÄÀÏ
@@ -0,0 +1,165 @@
#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;
   };
};