벡터 공간, 벡터 => 벡터의 크기로 원 그리기, 선형연산을 통해 영벡터를 구한후 선형종속의 관계인지 선형독립의 관계인지 구분 => 선형독립의 경우에만 모든 벡터를 만들 수 있다.
왜 "선형 독립의 관계"를 가지는 경우에만 모든 벡터를 만들 수 있는지는 p109를 복습하자.
평면의 모든 점을 생성하기 위한 선형 결합식에는 서로 평행하지 않은 2개의 벡터가 필요함을 알 수 있다.
즉 두 벡터는 서로 "선형 독립의 관계"를 가져야한다.
// 게임 로직을 담당하는 함수
void SoftRenderer::Update2D(float InDeltaSeconds)
{
// 게임 로직에서 사용하는 모듈 내 주요 레퍼런스
auto& g = Get2DGameEngine();
const InputManager& input = g.GetInputManager();
// 게임 로직의 로컬 변수
static float moveSpeed = 100.f;
Vector2 inputVector = Vector2(input.GetAxis(InputAxis::XAxis), input.GetAxis(InputAxis::YAxis)).GetNormalize();
Vector2 deltaPosition = inputVector * moveSpeed * InDeltaSeconds;
// 물체의 최종 상태 설정
currentPosition += deltaPosition;
}
입력받는 축으로부터 vector값 얻어온다 => inputVector.
x, y를 동시에 누를 때 더 빨리 가는 것을 방지 하기 위하여 "정규화" GetNormalsize를 해준다.
이것을 currentPosition에다가 더해주면 DeltaTime동안 일정한 속도로 해당 방향으로 이동을 함.
// 렌더링 로직을 담당하는 함수
void SoftRenderer::Render2D()
{
// 렌더링 로직에서 사용하는 모듈 내 주요 레퍼런스
auto& r = GetRenderer();
const auto& g = Get2DGameEngine();
// 배경에 격자 그리기
DrawGizmo2D();
// 렌더링 로직의 로컬 변수
static float Radius = 50.f;
static std::vector<Vector2> Circles;
if (Circles.empty())
{
for (float x = -Radius; x <= Radius; ++x)
{
for (float y = -Radius; y <= Radius; ++y)
{
Vector2 PointToTest = Vector2(x, y);
float SquarLength = PointToTest.SizeSquared(); // 벡터의 크기를 구할 때 제곱근을 씌우지 않은 값 즉 x^2 + y^2
if (SquarLength <= Radius * Radius)
{
Circles.push_back(Vector2(x, y));
}
}
}
}
// 원을 구성하는 모든 벡터를 Red로 표시
for (auto const& v : Circles)
{
r.DrawPoint(v + currentPosition, LinearColor::Red);
}
// 원의 중심 좌표를 우상단에 출력
r.PushStatisticText("Coordinate : " + currentPosition.ToString());
}
RAdius = 50.f로 설정을 하고
-50 ~ 50까지 정사각형 모양 안에서 쭉돌면서
PointToTest라는 좌표까지의 벡터의 크기와
원 벡터
까지의 크기를 비교해 PointToTest벡터가 더 크면 Circles안에 안넣고 그리지도 않는다.
원벡터보다 작거나 같은 경우에만 Circles에 넣어 Render할 때 그림.
중간에 연산을 빠르게 하기위해서 제곱근 계산을 안함.
입력축에 따라서 원점의 좌표가 변하면서 원벡터 크기에 해당하는 벡터 크기만큼만 빨간색으로 Render하여 화면에 그리는 중이다.