2025. 1. 14. 01:12, Win32API
Win32API 강의 19화. Win32API 기초 수학 (1)
https://www.youtube.com/watch?v=SG4GUVmIEZU&list=PL4SIC1d_ab-ZLg4TvAO5R4nqlJTyJXsPK&index=19
대각선으로 이동한다고 해서
따로따로 x축 1만큼, y축 1만큼 움직이면
실제 이동거리인 루트2만큼 움직여야하는데 2만큼 움직여지는 문제 발생
방향에 상관 없이 이동속도를 유지하면서 가려면 얼만큼 유지해야하나?
삼각 함수를 알아야함 각도의 단위 라디안

Win32API 강의 20화. Win32API 기초 수학 (2)
https://www.youtube.com/watch?v=tt-_NfRfFAw&list=PL4SIC1d_ab-ZLg4TvAO5R4nqlJTyJXsPK&index=20
< 배우게 된 내용 >
코드 또한 이동방향을
첫번째방법 ) 각도로 수정해서 cos, sin을 사용하거나
두번째방법 ) vector를 사용해서 빗변을 1로 정규화 시켜서 그에 해당하는 밑변, 높이의 값을 좌우 또는 상하에 곱해주면 된다
벡터 사용하는 방식이 더 간편함
#include "pch.h"
#include "CMissile.h"
#include "CTimeMgr.h"
CMissile::CMissile()
: m_fTheta(PI / 4.f)
, m_vDir(Vec2(1.f,1.f))
{
m_vDir.Normalize();
}
CMissile::~CMissile()
{
}
void CMissile::update()
{
Vec2 vPos = GetPos();
//vPos.x += 600.f * cosf(m_fTheta) * fDT;
//vPos.y -= 600.f * sinf(m_fTheta) * fDT;
vPos.x += 600.f * m_vDir.x * fDT;
vPos.y += 600.f * m_vDir.y * fDT;
SetPos(vPos);
}
void CMissile::render(HDC _dc)
{
Vec2 vPos = GetPos();
Vec2 vScale = GetScale();
Ellipse(_dc, (int)(vPos.x - vScale.x / 2.f), (int)(vPos.y - vScale.y / 2.f)
, (int)(vPos.x + vScale.x / 2.f), (int)(vPos.y + vScale.y / 2.f));
}
정규화 하는 Normalize 함수 구현
0으로 절대 나누면 안됨
float Length()
{
return sqrt(x * x + y * y);
}
Vec2& Normalize()
{
float fLen = Length();
assert(fLen != 0.f);
x /= fLen;
y /= fLen;
return *this;
}
'Win32API' 카테고리의 다른 글
Win32API Resource (0) | 2025.01.14 |
---|---|
Win32API Path Manager ( 리소스 상대 경로 구하기 ) (0) | 2025.01.14 |
Win32API Object (0) | 2025.01.14 |
Win32API Scene Manager ( 기본 framework ) (0) | 2025.01.14 |
Win32API Key Manager (0) | 2025.01.14 |
Comments