Win32API 기초 수학

 

 

대각선으로 이동한다고 해서

따로따로 x축 1만큼, y축 1만큼 움직이면

실제 이동거리인 루트2만큼 움직여야하는데 2만큼 움직여지는 문제 발생

 

방향에 상관 없이 이동속도를 유지하면서 가려면 얼만큼 유지해야하나?

삼각 함수를 알아야함 각도의 단위 라디안

 

 


 

< 배우게 된 내용 >

 

코드 또한 이동방향을

첫번째방법 ) 각도로 수정해서 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