본문 바로가기

게임수학

행렬

5-1 선형성

선형성은 직선의 형태를 띄는 성질을 의미한다.

수학적으로 선형성의 성질을 정의하기 위해서는 가법성과 1차 동차성, 두 가지 조건을 모두 만족해야한다.

 

 가법성 : f(x1 + x2) = f(x1) + f(x2)

 1차 동사성 : f(k * x) = k * f(x)

 

 선형 함수의 기본 형식은 다음과 같다. f(x) = ax

가법성을 만족하는 수식 f(x1 + x2) = f(x1) + f(x2)에서 좌변과 우변의 값이 동일한지 확인하는 것으로 판별할 수 있다.

 

● 좌변 : f(x1 + x2) = a(x1+ x2)

● 우변 : f(x1) + f(x2) = ax1 + ax2

다음 좌변과 우변은 모든 실수이므로 분배법칙에 의해 a(x1 + x2) = ax1 + ax2 가 성립한다.

 

 1차 동차성을 만족하는 수식 f(k* x) = k* f(x)에 함수 f(x) = ax를 적용해 좌변과 우변을 계산한 결과는 다음과 같다.

● 좌변 : f(kx) = a(kx)

우변 : k(fx) = k(ax)

 

 

5-2 벡터 공간의 선형 변환

 

벡터 공간을 선형 함수로 변화시킨 새로운 공간도 기저벡터의 선형 결합으로 형성되므로 선형성을 지닌다.

이렇게 두 공간이 동일한 구조를 지닐 때 두 공간의 대응 관계를 변환이라고 부른다.

따라서 선형성을 유지시켜주는 선형 함수 f(x) = (ax + by, cx + dy) 는 선형 변환이라고 한다.

 

벡터 공간에서 발생하는 선형 변환의 원리는 크기 변환이나 회전 변환과 관련이 있다.

임의의 벡터 v의 크기를 K배 늘리는 작업은 다음과 같이 스칼라 곱셈으로 표현이 가능하다.

f(v) = f( x, y) = (kx, ky)

 

앞선 예제에서, 벡터 v를 각 Θ만큼 회전시키는 작업은 다음과 같은 함수로 표현이 가능했다.

f(v) = f(x,y) = (cos Θ x - sin Θy, sin Θx + cos Θy)

 

 

5-3 행렬의 설계

	// 회전 변환 행렬의 기저 벡터와 행렬
	Vector2 rBasis1(cos, sin);
	Vector2 rBasis2(-sin, cos);
	Matrix2x2 rMatrix(rBasis1, rBasis2);

	// 크기 변환 행렬의 기저 벡터와 행렬
	Vector2 sBasis1 = Vector2::UnitX * currentScale;
	Vector2 sBasis2 = Vector2::UnitY * currentScale;
	Matrix2x2 sMatrix(sBasis1, sBasis2);

	// 크기, 회전의 순서로 진행하는 합성 변환 행렬의 계산
	Matrix2x2 finalMatrix = rMatrix * sMatrix;

	// 각 값을 초기화한 후 색상을 증가시키면서 점에 대응
	rad = 0.f;
	for (auto const& v : hearts)
	{
		// 1. 점에 행렬을 적용한다.
		Vector2 transformedV = finalMatrix * v;
		// 2. 변환된 점을 이동한다.
		Vector2 translatedV = transformedV + currentPosition;

		hsv.H = rad / Math::TwoPI;
		r.DrawPoint(translatedV, hsv.ToLinearColor());
		rad += increment;
	}

	// 현재 위치, 크기, 각도를 화면에 출력
	r.PushStatisticText(std::string("Position : ") + currentPosition.ToString());
	r.PushStatisticText(std::string("Scale : ") + std::to_string(currentScale));
	r.PushStatisticText(std::string("Degree : ") + std::to_string(currentDegree));
}

 

 

 

https://github.com/moonimax/GameMath_CMaker/tree/Vector-functions 

'게임수학' 카테고리의 다른 글

삼각형  (0) 2024.09.18
벡터의 내적  (0) 2024.09.14
아핀 공간  (0) 2024.09.13