1. 집합과 함수

골두·2024년 6월 20일

게임 수학

목록 보기
2/4
post-thumbnail

해당 글은 이득우의 게임 수학을 내 입맛대로 정리한 글이다.

가상 세계를 만들고 그 세계를 보여주는 것 부터 시작해서 애니메이션을 브라우저에 뿌린다던지 이런 과정들은 전부 수학을 기반으로 동작한다. (vector라던지... 회전을 위한 삼각함수라던지)

하지만 궁극적으로 이 모든 것들은 숫자들이 만들어 내는 질서를 기반으로 움직이기 때문에 수학 중 가장 기본인 집합과 명제를 시작으로 하나하나 씩 정리해본다.

수와 집합

중학교 때 수학 시간에서 집합(Set, 자료구조 Set 아님)이라는 단어를 사용한다.

보통 수학시간에 배운 집합은 여러 종류의 원소(주로 숫자)로 구성된 묶음을 의미하는데 이러한 방법론을 *소박한 집합론(Naive set theory)라고 부른다.

소박한 집합론

형식적 논리로 정의된 공리적 집합론과는 반대의 의미로 자연 언어로 구성되어 있으며 인식이나 생각에서 명확하게 분리될 수 있는 대상들을 모으는 행위를 의미한다.

소박한 집합론의 관점에서는 용도에 따라 수집합을 정의, 구분하는데 대표적으로는 숫자의 종류(자연수, 정수 등)로 구분하고 그것을 인간의 언어를 통해 대상 집합을 구분할 수 있게 정의하고 고유한 기호를 사용해 집합을 구분시킨다.

분류정의기호
자연수물건을 세거나 순서를 지정하기 위해 사용하는 수의 집합.N
정수자연수가 포함되어 있으며, 음수와 0을 포함하는 전체 수의 집합Z
유리수정수가 포함되어 있으며 분모가 0이 아닌 두 정수의 비율 및 분수로 나타낼 수 있는 수의 집합Q
무리수유리수를 포함하고 있지 않으며 두 정수 비 혹은 분수로 나타낼 수 없는 수의 집합 (ex. π, e)I
실수유리수와 무리수 전체를 포함하는 수의 집합R
복소수실수와 제곱하면 -1이 되는 허수 단위의 i를 조합해 a + bi (a, b는 실수) 형태로 표현하는 수의 집합C
사원수실수와 제곱하면 -1이 되는 세 허수 단위인 i, j, k를 조합해 a + bi + cj + dk (a,b,c,d는 실수) 형태로 표현하는 수의 집합H

복소수

복소수의 경우 실제 게임 그래픽 쪽에도 회전 관련되어 많이 사용되는 것 같아 더 정리한 내용이다.

복소수는 임의의 실수 a,b에 대해 i라는 허수와 조합해 a + bi 형태로 나타내는 수다.

허수

숫자 1,2,3 처럼 하나의 숫자로 상징하는 표현(대표적으로 i로 표현한다)으로 알파벳이지만 실제로는 숫자로 인식하는 수라고 할 수 있다.

복소수에서는 이 i² = -1, i = √-1 임을 정의하고 사용한다.

예시

a: 실수, b: 허수라고 가정할 때
a = a + 0i = 실수이므로 복소수에 포함된다.

a: 실수, b: 허수 + b != 0 이라고 가정할 때
a + bi = 허수 (실수가 포함된 허수)
bi = 순허수 (실수가 포함되지 않은 허수)

라고 정의하며 허수는 크기가 따로 없는 수이기에 대소 비교를 하지 않는다.

사용처

복소수는 전기 분야, 양자역학 등의 과학 분야에서 주로 쓰이지만 실제 개발에서는 컴퓨터 그래픽수에서 많이 활용된다.

특히 복소수는 2D, 3D 그래픽스를 만들 때도 유용하게 사용하는데 컴퓨터 게임에서 캐릭터가 회전하는 모습을 보여줄 때 많이 사용된다. 이 복소수에 관련해서는 추후 더 자세하게 다뤄볼 것 같다.

수집합들의 관계도


이미지 출처: https://ballpen.blog/%EC%88%98-%EC%B2%B4%EA%B3%84-number-system/

공리적 집합론

위에서 공리적 집합론은 소박한 집합론의 반대 개념이라고 설명했다. 소박한 집합론은 인간의 언어(자연 언어)를 이용해 일상 생활에서 사용한다. (3.3% 세금 제액, 5개의 아이스크림 등) 그리고 전혀 불편함 없이 편하게 사용하고 있다.

하지만 자연수의 체계와 집합의 특징에 대해서 이해하고 분석하려면 물건을 세는 것 하나하나 마저도 명확하게 정의해야 앞으로 가상 세계를 만들어 나가는 것에 있어서도 명확하게 활용할 수 있다.

이런 작업을 위해 집합의 성질을 참과 거짓으로 명확하게 구분하게 해주는 명제가 필요한데 이런 명제도 증명할 필요가 없는 기본 명제인 공리(Axiom)와 공리를 기반으로 대상을 구분해 증명하는 집합론이 공리적 집합론(Axiomatic set theory)라고 할 수 있다.

연산 구조

수를 이용한 집합의 고유한 특징은 원소를 이용해 연산을 하는 것이다.
대표적인 연산으로는 덧셈, 뺄셈, 곱셈 등의 사칙연산이 있으며 이 것은 두 개의 원소를 활용해 하나의 원소를 만드는 특징이 있다.

이런 2개의 원소를 활용해 새로운 원소를 만드는 개념을 이항연산 이라고 부른다.

이항연산의 특징

이항연산의 대표적인 특징은 총 3개가 존재한다.

닫힘처리

이항연산의 가장 대표적인

이항 연산의 법칙

이항연산은 반드시 이 3가지 법칙을 지니고 있다.

  1. 교환법칙
    임의의 두 수 a와 b를 연산할 때 순서와 상관없이 항상 동일한 결과가 나오는 성질을 말한다.

    // ex.
    a + b = b + a
    a * b = b * a
  2. 결합법칙
    연산이 2번이상 연속될 때 앞의 연산을 먼저한 결과와 뒤의 연산을 먼저한 결과가 같다는 성질을 말한다.

// ex.
(a + b) + c = a + (b + c)
(a * b) * c = a * (b * c)
  1. 분배법칙
    서로 다른 2가지 연산자에 대해 생략 혹은 확장해도 동일한 결과가 나오는 성질이다.
// ex.
a * (b + c) = a * b + a * c // a를 생략해 하나로 묶느냐 아니면 풀어 사용하느냐의 차이
(b + c) * a = b * a + c * a // 이 역시도 a를 묶어쓰냐 아니냐의 차이

항등원과 역원

이항연산의 특징 중 또 하나는 항등원(Identity)과 역원(Inverse)다

우선 항등원은 하나의 원소 a와 항등원을 이항연산 처리하면 무조건 적으로 입력한 하나의 원소 a가 출력되는 성질을 가진 원소의 집합이다.

덧셈과 뺄셈의 항등원은 0으로 a + 0 = a 라는 규칙을 기반으로 무조건 a가 나오게, 곱셈과 나눗셈은 동일한 원리로 항등원은 1이다.

역원의 경우는 임의의 수와 역원을 넣으면 항상 항등원으로 출력되는 수를 의미한다.

역원은 항시 동일한 값이기 보다는 넣은 임의의 수와 반대되는 조합으로 덧셈의 경우는 a + (-a) = 0, 곱셈의 경우는 a / 1/a = 1로 임의의 수에 따라 달라지는 값이 된다.

함수

개발에서 함수(메소드)는 특정 기능을 하나의 그룹으로 묶어 재사용을 위한 연산이라고 한다면 수학에서는 첫번째 집합의 모든 원소가 빠짐없이 두번째 집합의 어떤 원소에 대응하는 관계를 의미하는 것을 말한다.

두 집합을 X와 Y라는 기호로 각각 정의할 때 집합 X의 원소를 x, 집합 Y의 원소를 y라고 할 때 X에서 Y로 대응되는 함수를 y = f(x)라고 정의한다. 그리고 그것은 x -> y 라는 연결 관계를 만들어준다.

다만 이렇게 두 집합의 원소가 각각 대응된다고 모두 함수로 인정받지는 않고 두 규칙이 성립해야 함수로 인정받게 된다.

  1. 첫 번째 집합의 모든 원소에 대한 대응 관계가 두번째 집합에 존재해야한다.
  2. 첫 번째 집합의 원소는 두 번째 집합의 한 원소에만 대응되어야 한다.

즉 1번과 2번에 의거해 함수로 인정되지 않는 케이스는 다음과 같아진다.

예시로 X에는 1,2,3,4 Y에는 A,B,C,D 라는 원소가 들어있는 집합이라고 가정해보자
1 -> A
2 -> B, C
3
4

해당 조건을 보면 3과 4는 대응 관계가 없기 때문에 1번 규칙이 성립하지 않게 되고, 첫 번째 집합인 X의 2 원소는 Y 집합에 B,C라는 해 2개를 가지고 있기 때문에 2번 조건에 성립하지 않아 X와 Y 집합은 서로의 함수 관계가 아니게 된다.

정의역, 공역 그리고 치역

집합 간의 가져야하는 조건이 다름에 따라 이것들에 대해 얘기할 수 있는 용어를 명확하게 아는 것 또한 굉장히 많은 도움이 된다.

정의역: 왼쪽에 위치한 첫번째 집합을 정의역(Domain)이라고 부른다. 함수로 생각해보면 input을 의미한다.

공역: 오른쪽에 위치한 두번째 집합을 공역(Codomain)이라고 부르며 함수로 생각해보면 output을 의미한다.

함수 용어를 기준으로 생각해볼 때 정의역의 모든 원소는 공역의 원소에 대응되어야 한다.

정의역 원소 하나가 공역 원소 2개 이상을 가지는 규칙은 불가능하지만 반대로 정의역 원소 여러개가 공역 원소 1개를 대응하는 경우는 충분히 가능한 사례이고 공역 중에서 대응이 되는 원소들을 따로 모아 부분 집합 처리가 가능한데 이것을 치역 (Range)라고 부른다.

예시
X에는 1,2,3,4 Y에는 A,B,C,D가 있다고 가정할 때
1 -> A
2 -> A
3 -> A
4 -> B
일 때 치역은 Y에서 대응된 A와 B의 집합이 치역이라고 할 수 있다.

함수의 종류

위에 설명한 정의역, 공역, 치역을 이용해 함수의 종류를 설명할 수 있다.

전사 함수

전사함수(Surjection)는 공역의 모든 요소가 정의역에 대응이 되는 함수를 의미한다. 즉 X와 Y라는 집합이 있을 때 Y의 모든 원소들이 치역이여야 하는 경우를 의미한다.

단사 함수

단사함수(Injection)는 일대일 함수라고도 부르며 정의역과 공역의 요소가 1:1로 대응되는 함수를 의미한다. X의 집합 모든 요소들이 Y 집합에 1:1로 연결되는 경우를 말한다.

전단사 함수

전단사함수(Bijection)는 정의역과 공역 모든 요소들이 빠짐없이 1:1로 대응되는 함수를 의미한다. 이 조건을 모두 만족하려면 전사 함수와 단사 함수의 모든 성질이 포함되어야 하고 X와 Y 집합의 원소 수가 1:1이여야 한다.

합성 함수

함수의 대응관계를 확장해 다수 집합의 대응 관계로 발전시킬 수 있는 함수다. 말이 어렵지만 쉽게 풀이하면 이전까지는 X와 Y 집합간의 연결 관계 였다면 X, Y, Z 같은 3개 이상의 함수를 각각 X->Y, Y->Z 형태로 묶어 사용하는 것을 의미한다.

그리고 X -> Z의 관계는 z = (g∘f)(x) 형식으로 표기한다.

여기서 f는 X->Y의 함수 g는 Y->Z의 함수를 의미한다.

즉 연속된 함수는 합성함수에서 접근할 때 곱연산 처럼 표시한다.

항등함수와 역함수

연산에서 얘기한 항등원, 역원이랑 동일한 개념으로 정의역과 공역이 동일한 값으로 대응되는 함수를 항등 함수(Identity function)이라고 부르며 기호로는 f(x)가 아닌 id라고 정의한다.

예시
X는 1,2,3,4 Y도 1,2,3,4가 있다고 할 때
1->1, 2->2, 3->3, 4->4 같이 1:1로 매핑되는 형태를 의미한다.

이것이 합성함수에 적용된다면 다음과 같이 적용될 수 있다.

예시
X, Y, Z함수 모두 1,2,3,4라는 원소를 지니고 있다.
연결 노드 트리는 X->Y->Z순으로 작성된다.
1->2->2 / 3->4->4
2->3->3 / 4->1->1

이라고 가정한다면 f(x) -> id형태로 가기 때문에 id ∘ f = id(보통 나중에 선언된게 더 앞으로 간다) 라고 표시해 합성함수 내의 항등 함수를 표시할 수 있다.

여기서 역함수는 항등 함수에서 조금 더 꼬은 형태가 된다.

예시
X, Y, Z함수 모두 1,2,3,4라는 원소를 지니고 있다.
연결 노드 트리는 X->Y->Z순으로 작성된다.
1->2->1 / 3->4->3
2->3->2 / 4->1->4

라고 가정하게 된다면 X->Y, Y->Z는 전부 항등함수는 아닌 별개의 함수지만 중간 함수를 거쳐서 id 형태로 도달하게 된다.
하지만 (g ∘ f)(x) 형태로 한번 묶게 되는 경우는 id 형태로 도달한다.

이렇게 한번 합성함수를 통해 다시 원래대로 돌아가는 경우의 g함수를 역함수라고 한다. 역함수는 보통 위에 첨자를 붙여 f-1 (원래는 -1이 제곱으로 가야하지만 특수문자를 찾지 못함)가 된다.

그렇기 때문에 방금의 결과는 f-1 ∘ f = id 형태로 표기한다.

역함수의 또다른 경우는 두 집합의 대응 관계를 표시할 때 존재한다.

일반적인 함수를 이용해 역함수를 만드는 것 또한 가능하다.

예시
X에는 1,2,3 Y에는 A,B,C가 있다고 가정하자.
1->B, 2->C, 3->A

위의 함수를 기준으로 살펴보면 우선 함수 조건은 충족하기에 y = f(x)가 되고 각각 1:1 매핑이기 때문에 반대로인 x = f-1(y) 또한 성립하게 된다.

즉 역으로 봤을 때도 함수의 조건에 성립하게 되면 특정 함수에 역함수가 생기게 되고, 역함수가 생기려면 X->Y가 아닌 Y->X에도 함수의 조건이 일치해야만 생긴다라는 것이 핵심이다.

곱집합

이 긴 글의 결론이다. 곱 집합(Cartesian product or Product set)은 두 집합의 원소를 순서쌍으로 묶은 원소의 집합을 의미한다.

두 집합 A,B그리고 원소 a,b라고 할 때 A와 B의 곱집합은 A*B 라고 표현한다.

이렇게만 적으면 무슨말인지 잘 이해가 안될 수 있으나 쉽게 예제를 들어보면 다음과 같다

A = { 1, 2, 3 };
B = { 1, 2, 3 };

A * B = {{1,1}, {1,2}, {1,3}, {2,1}, {2,2}, {2,3}, ..., {3,3}};

즉 원소간의 쌍을 이뤄 A.size() * B.size() 만큼의 새로운 집합체들을 만들어낸다.

위의 예시를 조금 더 자세하게 보면 개발을 조금 해본 사람이라면 2중 배열 주소처럼 보일 수 있다. (이건 진짜 내 개인견해라 안보인다고 개발 못하는 사람은 아니다...)

그리고 또 다른 방면에서 본다면 좌표처럼 보이기도 한다. 이말은 즉슨 곱집합을 이용해 좌표가 있는 평면을 만들어낼 수 있고, 여기서 추가로 실수 집합을 하나 더 곱집합 처리하면 3D 좌표를 만들 수 있다라는 것이다.

결론

(개인 견해입니다)

중학교 수학같은 기초적인 부분들이 많았지만 그래도 다시 정리해보면 누락되는 부분들도 있고 생각보다 이건 간단한데 하는 부분도 있지만 이 이론을 기반으로 더 어려운 계산을 해낼 수 있으니 기초부터 잘 닦아두면 도움이 된다.

profile
나 볼려고 만든 블로그 (블로그 이전: https://goldfrosch.tistory.com/)

0개의 댓글