개발 26

float4에서 w의 의미(feat. 동차좌표계)

HLSL에는 float4 데이터형이 존재하고 이는 x, y, z, w로 구성되어 있다. 복습을 하다 보니 사소한 의문점이 들었다. 3차원을 표현하는데 왜 float3을 사용하지 않고, float4를 사용하며 그렇다면 w의 의의가 무엇일까? 생각보다 쉽게 답을 찾을 수 있었다. http://www.silverwolf.co.kr/realprog/73432 3D Programming - 투영기하, 동차좌표계 투영변환이 무엇인가요 ? 실세계의 한점 Q = (X, Y, Z)는 3차원의 점이다 이 점이 앞시간에서 배웠던 투영 스크린 상의 한 점 (X, Y)로 2차원 점으로 변환되는 관계를 투영 변환이라 한다. 이렇게 투영변환을 사용할 때는 동차 좌표계라고 알려진 좌표계를 사용하는게 편하다. 그럼 동차좌표계가 그럼 ..

개발 2019.05.07

decltype

decltype은 키워드이고 declared type의 줄임말이다. 타입을 정해주는 녀석이라고 보면 되겠다. auto와의 차이는 아직 나도 잘 모르겠으니까 추후에 업데이트하도록 하겠다. int x; decltype (x) y; // x와 동일한 타입인 y를 만들어라! 컴파일러가 저 타입을 결정하는 것인데 여기에는 규칙이 있다. decltype (expression) var; 1단계: expression이 괄호가 없는 식별자(identifier) 면, var은 expression과 같은 타입이다. double x = 5.5; double y = 7.9; double& rx = x; const double* pd; decltype(x) w; // double 타입 decltype(rx) u = y // do..

개발 2019.05.05

함수 매개변수 작성 시 주의점

void show_array(const double ar[], int n); 다음과 같은 코드는 show_array()에게 전달되는 배열이 어떤 것이든지 그 배열 안에 있는 값을 변경할 수 없다는 것을 의미한다. 이것은 한 다리 건너는 간접 지시의 경우에만 동작한다. 배열의 원소들이 기본형이 아닌 포인터라든지, 이중 포인터면 const를 사용할 수 없다. 그래서 이차원 배열을 함수의 매개변수로 넘길 때 함수 원형을 const로 설정하지 않는 것이다.

개발 2019.05.05

함수 포인터

함수도 주소를 가지고 있다. 함수는 스택을 하나 새로 만드는 것을 리버싱이나 디버깅을 해봤다면 알 수 있는데, 함수의 주소는 해당하는 메모리 블록의 시작 주소다. 내가 읽고 있는 책에서는 함수 포인터의 활용의 예시로 시간 측정 함수를 예로 들고 있다. estimate()라는 함수가 있는데 함수 포인터를 인자로 받아서 상황에 따라 측정 기준을 바꿀 수 있다는 것이다. 함수 포인터를 사용하기 위해서는 다음과 같은 절차를 거치면 된다. 함수의 주소 얻기 함수를 지시하는 포인터 얻기 함수를 지시하는 포인터를 사용하여 그 함수를 호출하기 ​1. 함수의 주소 얻기 함수의 주소는 함수의 이름이다. 따라서 함수 포인터를 인자로 취하는 foo() 함수가 있다면 다음과 같이 호출할 수 있다. foo(this_is_func..

개발 2019.05.05

비선형 구조의 탐색

비선형 구조 이번 글은 비선형 구조란 무엇이고 탐색하는 대표적인 방법, 그래프 구현 방법을 설명한다. Reference> 트리, 그래프 비선형 구조란? i번째 원소를 탐색한 다음 그 원소와 연결된 다른 원소를 탐색 할 때, 다음에 탐색 가능한 원소가 여러 개 존재하는 구조. 일반적으로 트리나 그래프 형태로 자료를 구성할 수 있을 때 해당한다. 비선형 구조에서 탐색 방법 주로 트리나 그래프가 비선형 구조의 대표적인 형태이다. 비선형 구조는 데이터가 순차적으로 있지 않기 때문에 스택이나 큐를 이용해서 탐색을 한다. 비선형 구조에서 키워드 데이터가 있는 곳: 노드(node)/정점(vertex) 데이터를 잇는 선: 간선(edge)/링크(link) 간선은 화살표 유무에 따라 양/단방향으로 표현 가능하고, 간선에는..

개발 2018.05.08

거듭제곱 빠르게 계산하기

Using loop unsigned long long pow(unsigned long long base, int exp) { long long ans = base; for (int i = 1; i < exp; ++i) { ans *= base; } return ans; } 하지만 xnx^nxn에서 nnn이 굉장히 커졌다고 생각했을 때는 이 방법은 굉장히 느리다. Using Recursive Function unsigned long long pow(unsigned long long base, int exp) { if (exp == 0) return 1; if (exp & 1) return base * pow(base * base, (exp - 1) / 2); else return pow(base * bas..

개발 2018.05.07

선형 구조의 탐색

선형 구조의 탐색 이번 글은 선형 구조란 무엇이고 선형 구조 속에서 탐색하는 대표적인 방법 2가지를 설명한다. 선형 구조란? 선형 구조란 프로그래밍 언어를 배울 때 배우는 배열, 연결 리스트 같은 말 그대로 선 같이 생긴 데이터 구조를 선형 구조라고 한다. 반대로 비선형 구조는 트리, 그래프 등이 있다. [배열] - 대표적인 선형 구조 [연결 리스트] - 얘도 선형 구조다. 선형 탐색 선형 탐색에는 대표적으로 전체 탐색과 이분 탐색(이진 탐색)이 있다. 전체 탐색은 말 그대로 전체를 순환해서 어떠한 값을 찾는 것을 말하고 이분 탐색은 정렬된 선형 구조에서 부분적으로만 탐색을 해서 값을 찾는 부분 탐색을 말한다. 구체적인 예시와 설명을 보면서 설명하면 좋을 것 같다. 전체 탐색 전체 탐색은 전체를 순환하기..

개발 2018.05.05

삽입 정렬 - Insertion Sort

오름차순으로 정렬하는 것을 기본으로 한다. 그림삽입 정렬은 인덱스에서 하나를 잡아서, 올바른 곳에 삽입하는 그림을 가지고 있다.보통 오름차순 정렬을 하기 때문에 왼쪽부터 순차적으로 인덱스를 하나씩 잡아서 작업을 하게 된다.선택한 인덱스의 왼쪽에 정렬된 배열과 비교하여 정렬을 한다. 이 알고리즘의 그림은 이 정도만 기억하면 될 것 같고 예시를 보면서 구체적으로 살펴보자.예시3 4 1 2 75개의 정렬되지 않은 숫자들이 있다.위에서 설명했다시피 인덱스 하나를 왼쪽부터 잡아서 올바르게 삽입하면 된다.첫 번째 위치에 있는 '3'은 해봤자 왼쪽에 아무 배열이 없으므로 두 번째 위치부터 작업한다. 1) 3 4 1 2 7왼쪽 배열과 비교했을 때 변경할 것이 없으므로 그대로 유지한다.2) 3 4 1 2 7왼쪽 배열과 ..

개발 2018.05.03

[JAVA]JAVA 시험 정리

JAVA의 특징: JVM에 의해 실행되므로 플랫폼에 독립적.JAVA의 기본변수 작성 규칙$으로 시작해도 된다.예약어 불가능길이 제한 X데이터형Java Data Typeㄴ Primitive Type(기본형) ㄴ Boolean Type(boolean) ㄴ Numeric Type ㄴ Integral Type ㄴ Integer Type(short, int, long) ㄴ Floating Point Type(float, double) ㄴ Character Type(char)ㄴ Reference Type(참조형) ㄴ Class Type ㄴ Interface Type ㄴ Array Type ㄴ Enum Type ㄴ etc.기본형(32bit 기준)boolean: 1byte(true, false로 소문자다)char: 2..

개발 2018.04.25