벡터

CJB_ny·2023년 2월 18일
0

이득우 겜수

목록 보기
1/9
post-thumbnail

벡터 공간, 벡터 => 벡터의 크기로 원 그리기, 선형연산을 통해 영벡터를 구한후 선형종속의 관계인지 선형독립의 관계인지 구분 => 선형독립의 경우에만 모든 벡터를 만들 수 있다.

  • 기저 : 선형독립 관계를 가지는 벡터의 집합
  • 기저벡터 : 기저에 속한 원소
  • 표준기저 : 기저중에서도 한 축만 사용하는 단위- 벡터 (1, 0), (0, 1)를 표준기저 라 한다.
    표준 기저 벡터 : 표준 기저의 원소

왜 "선형 독립의 관계"를 가지는 경우에만 모든 벡터를 만들 수 있는지는 p109를 복습하자.

평면의 모든 점을 생성하기 위한 선형 결합식에는 서로 평행하지 않은 2개의 벡터가 필요함을 알 수 있다.
즉 두 벡터는 서로 "선형 독립의 관계"를 가져야한다.


벡터를 통해 원그리기

Update

// 게임 로직을 담당하는 함수
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하여 화면에 그리는 중이다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글