A. 외적
1. 외적의 기초
a. 외적이란?
외적의 값은 벡터 (내적처럼 스칼라가 아님)
2D에서는 외적이라는 개념이 존재하지 않지만 사용함 (z축 값을 0이라고 전제)
내적은 반대로 해도 값이 그대로이지만 외적은 반대로 하게되면 (위에서는 bXa) 음수값이 나옴
= 즉 시계방향/ 반시계 방향에 따라 k의 방향이 바뀌는게 핵심!
b. 외적 응용 예시
즉, P가 A와 B에 들어와있는지 체크하기 위해 사용할 수 있음
2. 게임에 외적 더하기
a.Vector에 외적 추가하기
b. 몬스터 수정하기
Monster.cpp에서 몬스터 업데이트 하는 (내적) 코드는 날려주기
c. 마우스 포지션과 삼각형 외적하기
코드를 조금 더 다듬으면 아래와 같이 됨
◽◽◽ Monster.cpp
#include "pch.h"
#include "Monster.h"
#include "InputManager.h"
Monster::Monster() : Object(ObjectType::Monster)
{
}
Monster::~Monster()
{
}
void Monster::Init()
{
_stat.hp = 100;
_stat.maxHp = 100;
_stat.speed = 10;
}
void Monster::Update()
{
}
void Monster::Render(HDC hdc)
{
// 로밍 경로
HPEN pen = ::CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
HPEN oldPen = (HPEN)::SelectObject(hdc, (HGDIOBJ)pen);
//삼각형 빨간펜으로 그려주기
{
Utils::DrawLine(hdc, _pt1, _pt2);
Utils::DrawLine(hdc, _pt2, _pt3);
Utils::DrawLine(hdc, _pt3, _pt1);
}
::SelectObject(hdc, oldPen);
::DeleteObject(pen);
//////////////////////
//마우스 위치
Vector mousePos = GET_SINGLE(InputManager)->GetMousePos();
_pos = mousePos;
{
Utils::DrawTextW(hdc, _pt1, L"P1");
Utils::DrawTextW(hdc, _pt2, L"P2");
Utils::DrawTextW(hdc, _pt3, L"P3");
Utils::DrawLine(hdc, _pt1, mousePos);
}
//벡터 3개를 만들어주고
Vector v12 = _pt2 - _pt1;
Vector v1m = mousePos - _pt1;
Vector v13 = _pt3 - _pt1;
//정규화 시켜주고
v12.Normalize();
v1m.Normalize();
v13.Normalize();
//순서대로 외적해주기
float c1 = v12.Cross(v1m);
float c2 = v1m.Cross(v13);
if (c1 >= 0 && c2 >= 0)
{
_pos = mousePos;
}
else
{
_pos = { -1000, -1000 };
}
{
POINT mousePos = GET_SINGLE(InputManager)->GetMousePos();
wstring str = std::format(L"c1({0}) c2({1})", c1, c2); //c1, c2 좌표 보기
Utils::DrawTextW(hdc, { 20, 50 }, str);
}
}
'컴퓨터 그래픽스 : 수학 > 게임 수학' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 게임수학 : 포트리스 모작 #1 (99강) (0) | 2024.04.15 |
---|---|
[게임 프로그래머 입문 올인원] 게임수학 : 역삼각함수 (98강) (0) | 2024.04.11 |
[게임 프로그래머 입문 올인원] 게임수학 : 내적 (96강) (0) | 2024.04.11 |
[게임 프로그래머 입문 올인원] 게임수학 : 벡터 (95강) (0) | 2024.04.11 |
[게임 프로그래머 입문 올인원] 게임 수학 : 삼각함수와 포신 구현하기 (94강) (0) | 2024.04.10 |