WIN32API FrameWork/원본
220503_WIN32API_Framework_3-1_Vector2 구조체와 연산 만들기
hyrule
2022. 5. 5. 21:43
<Vector2.h>
* 벡터2 구조체를 만들고, 관련 연산자들을 재정의해서 편의성 있게 사용 가능하도록 함
//Vector2.h
#pragma once
//프로그래밍에서 수학은
//손으로 푸는것이 중요한 게 아니라 이 수학 공식을 사용하면 어떻게 되는지
//정도만 알면 된다.
#include <math.h>
//라디안 등 여러 곳에 원주율이 두루두루 쓰이므로 상수로 등록해 놓는다.
const float PI = 3.141592f;
struct Vector2
{
float x, y;
//아무것도 안넣으면 0으로 초기화
Vector2() :
x(0.f),
y(0.f)
{}
//두개의 값을 인자로 받으면 각각 x, y로
Vector2(float _x, float _y) :
x(_x),
y(_y)
{}
//한개의 값을 인자로 받으면 x, y 동일하게
Vector2(float v) :
x(v),
y(v)
{}
//목표 벡터까지의 각도를 구해주는 함수. - 보류
float Angle(const Vector2& v) const
{
float Width = v.x - x;
float Height = v.y - y;
return 0.f;
}
/////연산자 재정의
//=
void operator = (const Vector2& v)
{
x = v.x;
y = v.y;
}
void operator = (float f)
{
x = f;
y = f;
}
//==, !=
bool operator == (const Vector2& v) const
{
return (v.x == x && v.y == y);
}
bool operator != (const Vector2& v) const
{
return (v.x != x || v.y != y);
}
//+
Vector2 operator + (const Vector2& v) const
{
Vector2 Result;
Result.x = x + v.x;
Result.y = y + v.y;
return Result;
}
Vector2 operator + (float f) const
{
Vector2 Result;
Result.x = x + f;
Result.y = y + f;
return Result;
}
Vector2 operator + (int i) const
{
Vector2 Result;
Result.x = x + (float)i;
Result.y = y + (float)i;
return Result;
}
//+=
void operator += (const Vector2& v)
{
x += v.x;
y += v.y;
}
void operator += (float f)
{
x += f;
y += f;
}
void operator += (int i)
{
x += (float)i;
y += (float)i;
}
//-
Vector2 operator - (const Vector2& v) const
{
Vector2 Result;
Result.x = x - v.x;
Result.y = y - v.y;
return Result;
}
Vector2 operator - (float f) const
{
Vector2 Result;
Result.x = x - f;
Result.y = y - f;
return Result;
}
Vector2 operator - (int i) const
{
Vector2 Result;
Result.x = x - (float)i;
Result.y = y - (float)i;
return Result;
}
//-=
void operator -= (const Vector2& v)
{
x -= v.x;
y -= v.y;
}
void operator -= (float f)
{
x -= f;
y -= f;
}
void operator -= (int i)
{
x -= (float)i;
y -= (float)i;
}
//*
Vector2 operator * (const Vector2& v) const
{
Vector2 Result;
Result.x = x * v.x;
Result.y = y * v.y;
return Result;
}
Vector2 operator * (float f) const
{
Vector2 Result;
Result.x = x * f;
Result.y = y * f;
return Result;
}
Vector2 operator * (int i) const
{
Vector2 Result;
Result.x = x * (float)i;
Result.y = y * (float)i;
return Result;
}
//*=
void operator *= (const Vector2& v)
{
x *= v.x;
y *= v.y;
}
void operator *= (float f)
{
x *= f;
y *= f;
}
void operator *= (int i)
{
x *= (float)i;
y *= (float)i;
}
// /
Vector2 operator / (const Vector2& v) const
{
Vector2 Result;
Result.x = x / v.x;
Result.y = y / v.y;
return Result;
}
Vector2 operator / (float f) const
{
Vector2 Result;
Result.x = x / f;
Result.y = y / f;
return Result;
}
Vector2 operator / (int i) const
{
Vector2 Result;
Result.x = x / (float)i;
Result.y = y / (float)i;
return Result;
}
///=
void operator /= (const Vector2& v)
{
x /= v.x;
y /= v.y;
}
void operator /= (float f)
{
x /= f;
y /= f;
}
void operator /= (int i)
{
x /= (float)i;
y /= (float)i;
}
};