WIN32API FrameWork/원본

220503_WIN32API_Framework_3-1_Vector2 구조체와 연산 만들기

hyrule 2022. 5. 5. 21:43

<Vector2.h>

* 벡터2 구조체를 만들고, 관련 연산자들을 재정의해서 편의성 있게 사용 가능하도록 함

Vector2.h 추가

//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;
	}

};