전체 목록! 299

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

C++ 기초 플러스 리뷰

C++을 여태까지 야매로 배운 것 같아 제대로 배우고자 C++ 기초 플러스를 읽게 되었다. 무려 1600페이지 분량의 책이기 때문에 부담이 되었지만 목표가 있었기 때문에 꾸준히 공부했다. 이 책을 읽으면서 생각한 것들을 적어보려고 한다. 장점 책의 설명이 친절하고 세세하다. 개인적으로 책은 두꺼워도 설명이 친절해야 한다고 생각하는데 이 책은 정말 괜찮은 책이다. 단점 오탈자가 많다. 번역서의 오류인가 싶어서 원서를 보니까 원서부터 틀렸다. 정말 화가 치밀어 오른다. 구문을 신뢰할 수가 없다. 연습 문제의 문제 위의 문제와 일맥상통하는데, 문제를 똑바로 안 만들었다. (문제에서 요구한 것이 해답과 다른 것 등등…) 아니 그냥 이건 보면 안다. 정말 너무 화난다. 총평 전체적으로 좋은 책은 맞는데, 편집이 ..

개인 2019.05.05

Markdown으로 논문을 쓰자

제가 참고한 링크 오늘은 어제저녁부터 지금 시각 1시 30분까지 했던 허튼짓을 담은 글입니다. 윗분의 글이 정말 좋은 글인데 저처럼 템플릿 쓰려고 하다가 시간 낭비하지 않으시길 바랍니다. 제가 이번에 마크다운으로 논문 쓰기를 준비하려고 했던 이유는 최근에 했던 유전 알고리즘의 보고서를 마크다운으로 쓰면 괜찮을 것 같았기 때문입니다. 글 내용은 이미 google docs에 적어놨기 때문에 큰 걱정은 없었고 저녁 시간 동안 모든 일정을 끝낼 수 있을 것이라 생각하고 작업에 착수했습니다.​ 고난 1: Pandoc 설치 Pandoc 자체가 얼마나 큰지 잘 모르겠지만 제 생각에는 다운로드 속도가 너무 느린 것 같습니다. (해외 서버라 그런가..?) 어쨌든, 이거 다운로드하는데 약 2시간 걸렸습니다. 사실 저는 이..

개인 2019.05.05

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

[BOJ] 15553번: 난로

문제 링크 2018년 JOI 1번 문제다. 난로가 켜져 있는 시간은 N + α 인 것은 자명하다. 그렇다면 α를 알아야 한다. 성냥이 N보다 부족하면 계속 켜놔야 하는 시간을 알아야 하는데 예제를 보면서 계산하는 것이 좀 더 좋을 것 같다. [예시1] 1 3 6 K가 2일 땐 1 3 사이[1초]나 3 6 사이[2초]를 계속 틀어놔야 할 것이다. 이것에 착안해서 나는 우선순위 큐(오름차순 정렬)를 사용해서 (친구들 방문이 이어져 있지 않을 경우) 일 때 간격을 우선순위 큐에 저장을 시키고, 만약 이어져 있는 경우에는 cnt를 증가시켰다. 그래서 우선순위 큐에서 pop을 시키는 횟수는 가 된다. 난로가 켜져 있는 시간의 최솟값을 구해야 하므로 정답은 이 된다. #include using namespace s..

온라인저지 2018.09.30

[BOJ] 2842번: 집배원 한상덕

2842번: 집배원 한상덕 이분 탐색 + flood-fill도 가능하지만 inchworm 알고리즘을 사용할 수도 있다. 피로도와 방문할 수 있는 곳은 비례하기 때문이다. (찾아보니 단조함수이면 가능하다고 한다.) inchworm 알고리즘에서는 1차원으로 작업을 하는데 고차원에서도 가능한지는 모르겠다만... 아무튼 1차원에서 작업하기 때문에 2차원의 좌표에 있는 값을 1차원의 위치로 바꿔주고 정렬을 한 상태에서 inchworm 알고리즘을 돌면서 flood-fill을 했다. #include #include using namespace std; const int dx[] = { -1, -1, -1, 0, 1, 1, 1, 0 }, dy[] = { 1, 0, -1, -1, -1, 0, 1, 1 }; int n, ..

온라인저지 2018.09.13