2024/12 23

D3D11 애파인 변환(=아핀 변환)

이동은 선형변환이 아니다.하지만 그래픽스에서 이동과 선형 변환을 동시에표현하고 싶을 때 사용하는 것이 애파인 변환이다. 즉, 애파인 변환이란선형 변환과 이동을 하나의 행렬로 표현한 것이다. Homogeneous Coordinates란?선형 변환하고 선형 변환이 아닌 이동을 합치기 위해서 새롭게 추가가 된 개념이다.벡터 : (x,y,z,0) 포인트 : (x,y,z,1)포인트 - 포인트 = 벡터포인트 + 벡터 = 포인트변환 전 직선은 변환 후에도 직선이다.이 식을 행렬 식으로 표현하면 다음과 같다.이러한 개념을 수학적으로 간단히 나타내면 애파인의 a를 따고,선형변환을 Tau라고 했다. 애파인 변환을 식으로 나타내면 다음과 같다.이런 식으로 애파인 트랜스폼을 사용할 수 있으므로,3차원에서는 4x4 행렬을 사용..

그래픽스/DX11 2024.12.16

IP(Internet Protocol) 열기

으래 컴퓨터를 어려서부터 접한 세대이고,초딩 때 크아나, 바람의 시대 혹은 롤에서 키보드 배틀 좀 떠봤다 싶은 독자들이라면,나보다 나이 좀 많아 보이는 형아들이 너 IP따서 디도스 공격한다.라는 으름장에 맘을 졸여본 적이 있을 것이다.그렇다. 사실 필자의 얘기다. 필자는 막연하게 IP가 뭐냐고 형제에게 물어봤다.필자의 형제는 간단하게 말해서IP란, 인터넷에서 사용하는 가상의 주소라고 답해줬다.우리집에도 주소가 있듯, 컴퓨터에도 주소가 있다는 개념을 그 때 처음 알았다. 초딩 때 나를 발발 떨게했던 IP주소 딴다의 말의IP의 풀네임을 수십년이 흐른 지금에야 알게 되었다.인터넷 프로토콜 (Internet Protocaol)이다. 인터넷 프로토콜 네트워크 계층의 가장 핵심적인 프로토콜 하나를 꼽자면 단연 인터..

프로그래머스 LV.2 모음사전

해당 자릿 수 별 경우의 수는 다음과 같다."(총자릿수 - 현자릿수) * 5 + 이전 경우의 수 = 현재 자릿 수의 경우의 수" 이다.5는 예외적으로 AAAAE - AAAAI 바로 바뀌므로 서로의 변환 관계는 1이다. A는 가장 첫 번째로 나온다. 따라서 0을 더해주면 된다.E는 그 다음이므로 1 따라서 알파벳 순서대로 2,3,4 이렇게 순차적으로 바뀐다. EAIOU가 word면E가 첫번째에 나오면 781번 1번 돌았다는 것이고, A가 0번 돌았다는 뜻이다.I는 3번째 자리이니, 31번을 2번 돌았다는 의미다.O는 4번째 자리이니, 6번을 4번 돌았다는 의미이다.U는 5번째 자라이니, 1번을 5번 돌았다는 의미이다. 해당 경우의 수를 다 더해주면 872번째 단어가 된다. #include #includ..

D3D11 회전축에 대한 벡터의 회전

회전축에 대한 벡터의 회전 회전도 행렬로 표현할 수 있다.회전을 하려면 먼저 회전축을 결정해야한다.어떠한 축에 대해서 회전해야할지, 그 다음은 몇 도만큼 돌아가야할지를 결정한다. 회전은 비교적 3차원 공간보단2차원 공간에서 구현하기 쉽다. (3차원 회전을 다룰 때는 사원수(Quaternion)를 사용하게 된다.숫자 4개를 사용해서 회전을 표현하는 것이다.) 회전을 시키고자 한다면, 2차원 평면에서의 회전을 생각하면 좀더 쉽다.2D 평면에서 회전을 생각해보자.서로 다른 벡터가 필요하다는 것을 금방 알 수 있다. 회전 과정 1. 먼저 회전축 벡터(n)와 회전하고 싶은 벡터(v)를 외적 (Cross Product)를 한다. 2. 외적 값은 회전축 벡터(n)와 회전하고 싶은 벡터(v) 두 벡터에 모두에 해서 수..

그래픽스/DX11 2024.12.13

D3D11 선형 변환(Linear Transformation) - 동차성과 가법성

선형 변환에서 변환은 그래픽스에서 뭘까? 뭐가 될 수 있을까?변환이란 어떠한 함수라고 생각해보자. 그렇게 되면 위와 같은 식이 전개가 된다.그럼 이 Tau가 어떤 함수인가에 따라,Scaling이 되기도 하고, Rotation이 되기도 한다. 이 두 가지 사례를 만족하는 것이 선형 변환이다.그렇다면 선형 변환이 아닌 경우는 뭘까? 이처럼 동차성과 가법성을 만족해야만 하는 것이 선형 변환이다. 선형 변환이 아닌 경우 예를 들어 tau라는 변환이 x,y,z를 넣었을 때,x,y,z를 x^2, y^2, z^2인 경우 왜 선형 변환이 아닐까?~이 아닌 경우를 찾을 때는 그에 대한 반례를 찾으면 된다. k가 2라고 하고, 해당 식을 전개하면 다음과 같은 결과값이 나온다.1,2,3에다가 2를 각각 곱하면2,4,..

그래픽스/DX11 2024.12.12

D3D11 그래픽스 - 변환

어떤 점을 원점에 대해서 회전시키는 경우어떤 점을 원점에 대해서 회전시키는 경우에어떠한 점 (= 임의의 점) xy를 하나의 미지수 (x,y)로 표현할 수 있고,그 임의의 점을 원점(여기서 원점은(0,0)이 아닐 수도 있다.)을 기준으로 θ만큼 회전 시킨 지점을 (x',y')로 표현할 수 있다.그러한 (x',y') 지점을 구하는 식은 아래와 같다. 그럼 열벡터(Column Vector) 형태의 회전 변환을행벡터(Row Vector)형태의 회전 변환 할까?방법은 간단하다. 좌변에도 전치(Transpose)를 해주고,우변에도 전치(Transpose)를 해준다. 이 식의 전개를 글로 풀어보면 다음과 같다.좌변에 Transpose를 해주고,우변에도 통째로 Transpose를 해준다. 이 Column vector는..

그래픽스/DX11 2024.12.11

프로그램 인터페이스 예시 STD::vector

하나의 기능을 다양한 기능으로 설계하는 인터페이스 원칙이 원칙의 대표적인 예시는 std::vector이다.std::vector는주어진 인덱스에 담긴 원소를 접근하기 위한두 가지 메서드를 제공한다.경곗값을 검사하는 at()메서드를 사용해도 되고,경곗값을 검사하지는 않지만좀 더 속도가 빠른 배열 표기법을 사용해도 된다.경곗값 검사를 반드시 한다면어느 정도 오버헤드를 감수하고 at() 메서드를 사용하면 된다.이 원칙은 인터페이스를 군더더기 없이설계해야 한다는 원칙의 예외로 봐야한다.이렇게 예외를 적용하더라도나머지 부분은 반드시 군더더기 없이 잘 설계해야한다.

백준 골드2 1167 트리의 지름 구하기

https://www.acmicpc.net/problem/1167 트리의 지름이라서 어떻게 구할까 했는데,그냥 가장 긴 경로를 찾으면 된다. 임의의 노드 하나를 정해서BFS로 탐색하면 그 중에서 가장 긴 노드를 찾아 그 노드 값을 저장한다.어떤 정점까지가 더 긴가는,해당 정점 수 만큼의 거리를 담은 배열로 비교한다. 가장 긴 경로를 가진 정점을 구했으면,가장 긴 경로를 가진 정점에서 다시 출발한다.거리를 담은 정점 배열에서,도착지까지 가장 길었던 값을 가져오면해당 정점의 최대 길이를 알 수 있다. 이 최대 거리가 트리의 지름이다. using namespace std;vector visited;vector mDistance;typedef pair edge;vector> tree;void BFS(int n..

인터페이스를 사용하기 쉽게 설계하기 (2)

필요한 기능 빼먹지 않기필요한 기능을 빼먹지 않는 원칙은두 단계로 적용한다.첫 번째는 클라이언트가 필요로 하는 동작은모두 인터페이스에 추가해야한다.간혹 포함시켜야할 지 불분명한 기능이 있다.이럴 때는 자신이 작성한 코드를 클라이언트가이용하는 모든 경우의 수를 따져봐야한다.인터페이스를 설계할 때 한 가지 관점만 고려하면다른 방식으로 바라보는 클라이언트가 필요한 기능을 놓칠 수 있다.물론 가능한 모든 경우의 인터페이스를 설계한다는 것이불가능에 가깝다.두 번째 인터페이스에 최대한 많은 기능을 구현하는 것이다.라이브러리에서 해결할 수 있거나그러나,인터페이스를 다르게 설계하면 알 수 있는 정보를클라이언트 코드에서 지정하도록 구현하면 안된다.또한 라이브러리의 결과를 합치는 데필요한 일을 클라이언트에게 떠넘기면 안된다.

인터페이스를 사용하기 쉽계 설계하기 (1)

직관적으로 구현하기인터페이스는 사용하기 쉽습니다.이 말은 쉽게 할 수 있도록 구성해야 하지 않을 것입니다.인을 간단하고 간단하게 사용하기 쉽습니다.여러분이 일하는 활동을 하는 데필요한 데이터 구축 하나를 적용하기 위해소스코드를 따라가거나,원하는 기능을 구현하는 코드가 너무 중요합니다.사용하기 쉬운 터터를 개발하기 가장 좋은 방법은사용자에게 있어서의 기준을 결정하는 것입니다.과거에 사용된 것과 유사한 인터페이스는 파악하기 쉽고 즉각적으로 활동할 수 있습니다.기분 나쁘게 행동할 가능성이 있습니다. 늘 사용자의 입장에서 인터페이스를 고려해야 한다.상식에 맞는지, 사용자가 충분히 예상할 수 있는지 따져봐야한다.물론 혁신도 중요하지만혁신은 인터페이스가 아닌 내부 구현 기술에서 추구해야 한다.예를 들어 소비자는일부..