게임엔진프로그래밍 - 수학

이미지
1. 브레젠험 직선 알고리즘 컴퓨터에서 계산이 느린 실수 연산을 사용하지 않고 직선을 그리기 위해 만들이진 알고리즘입니다. 평면을 아래와 같이 8분 면으로 나누어 직선을 그립니다. 링크:  https://sulinep.blogspot.com/2020/05/bresenhams-line-algorithm.html 2. 엔진 기초 수학 여기서는 본격적으로 구현에 들어가기 전 기초 수학 지식을 쌓았습니다.  수학에서의 체는 대수적 구조의 하나로 덧셈, 뺄셈, 곱셈, 나눗셈의 사칙연산을 집합 안에서 소화할 수 있는 집합을 의미합니다. 체를 이루기 위한 조건과 체라는 개념을 알아보았습니다. 처음에 체 라는 개념이 뭔가 머릿속에서 애매했는데 이후 갈로이스 체에 대해 배운 후 조금 더 명확해졌습니다. 스칼라 는 벡터를 정의하기 위한 필수 요소이고 크기만 있고 방향이 없는 성분이다. 벡터는 크기와 방향을 포함하는 표현 도구이다. 겨기서 벡터의 기본 연산자들을 알아보았습니다. 선형성 은 직선처럼 똑바른 도형 또는 그와 비슷한 성질을 가진 대상이라는 뜻으로 함수의 경우 함수가 진행하는 모양이 직선이라는 의미로 사용된다. 선형성을 만족하려면 두 가지 조건을 만족해야 하는데 균질성과 첨가성이다. homogeneity (균질성):   additivity (첨가성): 선형이라고 부르는 수식들은 중첩의 원리 가 적용된다는 특징이 있다. 이때 행렬과 선형 변환의 관계에 대하여도 알아보았었는데 선형 변환과 행렬은 1:1 대응된다. 기저 란 어떤 벡터 공간을 선형 생성하는 선형 독립인 벡터들이다. 각각의 원소들이 다시 벡터 공간을 생성할 수 있어야하고 일차 독립이어야 한다. 표준 기저 는 많은 기저들 중 성분 1개만이 1이고 나머지 성분이 모두 0인 표준 적인 벡터이다. 여기서 벡터 공간 R의 기저를 구성하는 원소의 개수가 해당 공간의 차원 이다. 행렬 은 열기반 행렬과 행기반 행렬 중 어떤 걸 사용하느냐에 따라 계산 방식이 달라진다. 여기서는 벡터의 크기, 회전, ...

[수학] 갈로이스 체와 아핀 조합

이미지
이번 글은 과제로 나온 갈로이스 체와 아핀 조합에 대한 글입니다. 1. 갈로이스 체 (Galois Field(GF2)) 갈로이스 체는 0과 1로 구성된 가장 작은 유한체입니다. 앞서 체를 이루기 위해서는 사칙연산, 교환법칙... 등 여러가지 조건이 있었습니다. 갈로이스 체로 이들을 알아보려합니다. 1) 덧셈 연산 갈로이스 체의 덧셈 연산은 아래와 같습니다. 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 여기서 특이한 경우가 하나 있습니다. 1 + 1 = 0입니다(???) 보통 우리가 알고 있는 수학 계산을 한다면 분명 2가 나와야 합니다. 하지만 갈로이스 체는 0과 1로 이루어져 있고 이 두 개의 수로만 체의 조건이 만족되어야 합니다. 즉 2라는 수는 갈로이스 체에서 성립될 수 없습니다.  근데 왜 1이 아니고 0일까? 그래서 GF(3) 도 한번 살펴 보았습니다. GF(3)는 0,1,2로 이루어져 있는데 GF(3)에서 1+2=0, 2+2=1 이라는 결과가 나와 있었습니다. 확인해 보면 체 안에서 순환을 돈다는 것을 알 수 있었습니다. 덧셈에 대한 항등원 = 0 덧셈에 대한 역원 = 자신 덧셈의 결과를 보면 XOR 연산과 동일한 것을 볼수있다. 2) 곱셈 연산 곱샘 연산은 아래와 같습니다.  0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = 1 곱샘은 기존에 사용하던 계산 방식과 별 차이가 없습니다. 곱셈에 대한 항등원 = 1 곱셈에 대한 역원 = 0일때는 제외. 1이거나 혹은 자신 덧셈의 결과를 보면 AND 연산과 동일한 것을 볼수있다. 3) 결합, 교환 분배 법칙 결합 법칙: (0+1)+1 = 0+(1+1)   (0*1)*1 = 0*(1*1) 교환 법칙: 0+1 = 1+0  0*1 = 1*0 분배 법칙: 1*(1+0) = (1*1)+(1*0) 세가지 경우 모두 만족한다. 4) 갈로이스 체로 만드는 벡터 갈로이스 체의 값들로 벡터를 만든다면 다음과 같이 나올...

[알고리즘] 코헨 서더랜드 알고리즘(Cohen–Sutherland algorithm)

이미지
이번 글은 코헨 서더랜드 알고리즘에 관한 글입니다. 1. 코헨 서더랜드 알고리즘 이 알고리즘은 라인 클리핑에서 사용되는 컴퓨터 그래픽 알고리즘 입니다. 2차원 공간은 아래의 그림처럼 9개의 영역으로 분할 한 다음 볼 수 있는 선의 부분을 효율적으로 연산합니다. 상 = 1000 하 = 0100 좌 = 0001 우 = 0010 이 알고리즘이 선을 클리핑 하는 방식은 다음과 같습니다. 1. 선을 그리는 두 개의 점을 입력 받고 각 점이 위치한 영역을 체크합니다. 2. 위의 체크한 결과에서 두 점이 모두 0000 이 나오면 선은 모두 화면 안에 있으므로 바로 선을 그립니다. 3. 두 점의 검사 결과를 비트연산 &(and)를 통해 0000 이 나오지 않는 다면 해당 선은 화면 바깥에 있으므로 선을 그리지 않습니다. 4. 나머지 경우는 두 점중 하나만 화면안에 있는 경우로 클리핑 작업이 필요합니다. 직선의 기울기 방정식을 이용해 각 점을 계산한 후 최종 선을 그립니다. 예시 그림으로 한번 살펴 봅시다. (모두 스크린 좌표, 스크린 사이즈는 가로 800 세로 400) 위 그림의 붉은 색 선을 그린다고 가정하고 위의 알고리즘 순서에 따라 가보겠습니다. 1. 각 점이 위치한 영역을 체크합니다. 일단 P1은 스크린 좌표 안에 있으므로 0000이라는 결과 값이 나옵니다. 그리고 P2의 좌표는 (1000, 100) 이므로 그려줄 스크린 최대 넓이를 벗어납니다. 위의 그림을 봤을 때 결과값은 0100 이 나옵니다. 2. 1번에서 체크 했던 결과 두 점 모두가 0000이 아니므로 넘어갑니다. 3. 두 점의 영역 결과를 &(and) 연산 해줍니다.       결과는 0000 이 나와 다음 과정으로 넘어갑니다. 4. 위에서의 기타 과정이 끝나고 라인 클리핑이 필요하다는 것이 결정되었습니다. 이제 실제로 라인 클리핑이 이루어져야합니다....

[수학] 엔진 강의 수학 복습

이미지
이 글은 강의 시간에 배운 수학 이론에 대한 정리글 및 중간고사입니다. 1. 수학에서의 체(Field) 일단 나무위키에 있는 글을 일부분 가져와 보았다. "체는  대수적 구조 의 하나로, 간단히 말해  덧셈, 뺄셈, 곱셈, 나눗셈의 사칙연산을 집합 안에서 소화할 수 있는 집합 을 의미한다." 예를 들면 오른쪽 그림과 같은 실수들의 집합이 있다고 보면 (정수는 체가 되지 않기 때문에 실수라고 보겠습니다.) 해당 체 안에서의  덧셈 뺄셈 곱셈 나눗셈등 사칙연산을 집합안의 수들로 할수 있다. 체를 이루기위한 조건은 다음과 같다. 1. 사칙연산이 가능해야한다. 2. 덧셈에 대한 교환법칙, 결합법칙이 성립하고 항등원 0이 존재한다. 3. 모든 원소에 대해 역원이 존제한다. 4. 곱셈에 대한  교환법칙, 결합법칙이 성립하고 항등원 1이 존재한다. 5. 덧셈과 곱셈에 대한 분배법칙이 성립한다. 6. 0이 아닌 모든 원소에 대해 역원이 존제한다. 따라서 0 이외의 수로는 항상 나누기를 할 수있다. 즉 체에서는 나머지가 존재해서는 안 된다. (추가로 정수가 체가 될 수 없는 이유는 6번의 이유 때문이다.) (추가...) 체라는 개념이 생각보다 이해가 안가고 어려웠다. 저번 시간에 갈로이스 체라는 것을 새로 배웠는데 원래 여기에 추가로 쓰려했으나. 해당 체에 관한 과제가 나와서 다른 포스트에 쓸 예정이다. 신기했던건 저번 시간의 강의를 듣기 전까지 체는 집합안의 수들이 무조건 무한할줄 알았는데 유한체도 있다는 것이었다. 2. 스칼라와 벡터 1) 스칼라 스칼라는 벡터를 정의하기위한 필수 요소이다. 스칼라는 크기만 있고 방향이 없는 성분이다. 2) 벡터 크기와 방향을 포함하는 표현 도구이다. 일단 벡터가 존재하려면 벡터 공간 이 필요하다. 수학에서 벡터의 정의는 벡터 공간 을 정의하고 벡터공간안의 무수히 많은 원소들을 벡터라고 ...