이러저런 이야기
-
벡터의 투영 유도하기이러저런 이야기 2019. 12. 19. 10:45
두 벡터 A, B가 존재할 때 벡터 A를 벡터 B에 투영한 벡터를 Proj A라 가정했을 때 위 공식처럼 투영 벡터인 Proj A의 길이는 |A| / Proj A = cos θ이다. 여기서 Proj A = |A| cos θ로 나온다. 여기서 벡터의 내적을 사용하는데 cos θ는 벡터 A와 벡터 B의 사이 각이기 때문이다. 벡터의 내적 공식인 a·b = ||a|| ||b|| cos θ에서 cos θ = A·B / |A| |B|로 식에 대입하면 위 사진과 같다. 이제 벡터 B의 단위 벡터인 B / |B| 를 투영 벡터의 길이[Proj A]에 곱해주면 투영 벡터[Proj]를 구할 수 있다.
-
벡터의 내적 공식 유도하기이러저런 이야기 2019. 12. 19. 10:45
벡터의 내적이란? 두 벡터의 내적 결과 값은 스칼라 값이 나오며 세타 값은 두 벡터 사이의 각을 뜻 합니다. 그래픽스에서는 이 세타 값이 0인지 아닌지만 기억하시면 됩니다. [0이면 두 벡터는 직교한다.] 두 벡터의 내적의 공식 유도를 하기 전에 제1 코사인 법칙과 제2 코사인 법칙을 설명하겠습니다. 먼저 제1 코사인 법칙은 위와 같은 그림의 삼각형이 있을 때 각 꼭짓점에서 마주 보는 선분을 a, b, c라고 했을 때 각 선분의 길이는 아래와 같습니다. 왜 이렇게 되는지 유도를 해보자면 선분 a[BC] 의 길이는 선분 Ba + 선분 Ca 라고 할 수 있습니다. 위 식에서 보이는 [b * cos C]에서 cos C는 코사인 법칙으로 Ca / b라 할 수 있습니다. 따라서 [b * cos C = 선분 Ca]..
-
카메라의 뷰 좌표계와 LookAt 행렬 유도하기이러저런 이야기 2019. 12. 19. 10:44
카메라의 뷰 좌표계란? 카메라 좌표계, 뷰 좌표계라 하는데 전부 같은 말이며, 쉽게 말하자면 월드 좌표계가 우리가 살고 있는 공간의 한 지점을 기준으로 한 좌표계라면 카메라 좌표계는 카메라를 기준으로 한 좌표계입니다. 이제 카메라 좌표계의 방향 벡터들을 구해 보겠습니다. 제일 첫번째로 카메라의 방향을 구할려면 카메라의 위치를 알아야 하며 카메라가 원점을 바라보게 해야합니다. 그런 다음에 원점에서 카메라의 위치를 뺀다면 원점에서 카메라의 위치를 향하는 벡터를 얻을 수 있는데 이 벡터는 카메라의 음의 방향, 즉 카메라 z축의 음의 방향을 가리킵니다. 때문에 카메라의 z축 방향을 얻기 위해서는 (카메라 위치 - 카메라가 바라 보는 타켓 위치)를 해줘야 카메라 좌표계의 z축 방향을 얻을 수 있습니다. 그 다음으..
-
오일러각 입력에 따라 Forward, Up, Right 벡터를 구하고 이를 토대로 3차원 회전 행렬 구하기이러저런 이야기 2019. 12. 19. 10:44
오일러 각이란? - 오일러 각의 3개의 각도만으로 회전을 표현한 것을 말합니다. 위의 큐브를 예로 들자면 z축 기준의 회전각을 roll, x축 기준의 회전각을 pitch, y축 기준의 회전각을 yaw라고 가정하겠습니다. 이 때 오일러각으로 물체의 forward, up, right 벡터를 구하려면 삼각 함수를 사용합니다. [Yaw, Pitch값을 알 때] 위 사진 처럼 빗변의 길이를 1이라고 가정한다면, 밑변의 길이는 = cosθ = x/h -> x/1 ->cosθ = x가 나옵니다. 높이도 마찬가지로 sinθ = y/h -> y/1 -> sinθ = y가 나오게 됩니다. 물체의 방향 벡터를 계산하기 위해 이 공식을 사용합니다. 위 그림과 같이 물체가 xz평면 위에 앉아 있고 y축을 바라본다면, 이 물체의..
-
[선형 변환과 행렬의 관계]이러저런 이야기 2019. 12. 19. 10:44
1. 선형 변환이란? 벡터의 성질을 만족시키면서 벡터를 변환시키는 것을 선형 변환이라 한다. v = ax + by 이러한 벡터 공간이 선형변환(LinearTransform)으로 새로운 벡터 공간을 만들 때 기본적인 전제조건은 원점은 변하지 않는다. (대표적으로 변하는 방법 가만히 있기[항등 변환], 늘리기[스케일], 돌리기[로테이션], 밀기[Shear]) [이동은 선형 변환이 아니다. 이동을 하면 원점이 바뀌기 때문에 선형 변환에는 이동이 포함이 안됨 -> 선형 변환에서 이동은 밀기로 해결이 가능하다] 1차원에서 이동을 하고 싶을 때 2차원 공간에서 이동하고 싶은 축이 아닌 다른 축(ex : x를 이동하고 싶으니 y축) y =1인 영역으로 밀기, 2차원에서 이동은 3차원에서 z가 1인 영역에서 밀기 하면..
-
-
[STL Vector] push_back과 emplace_back의 차이이러저런 이야기 2019. 11. 29. 18:20
Push_back은 인자로 필요한 객체를 생성 후 Push_back 함수 내부에서 다시 한번 복사가 일어난 뒤 Push_back이 끝날 때 인자들과 객체가 파괴된다. 즉 객체를 하나 추가할 때 쓸데없이 2번 복사하고 파괴한다. 참조 링크 : https://m.blog.naver.com/sorkelf/220825930008 std::vector embrace_back 과 push_back의 차이 (The difference between emplace_back and push_back in a std::vector container) emplace_back 과 push_back의 차이를 알아 보기 이전에 L-Rvalue라는 개념을 알아야 한다.Before unders... blog.naver.com emp..
-
[Lazy Initialization]늦은 초기화란이러저런 이야기 2019. 9. 9. 23:57
지연된 초기화, 게으른 초기화(lazy initialization)는컴퓨터 프로그래밍에서 객체 생성, 값 계산, 또는 일부 기타 비용이 많이 드는 과정을 처음 필요한 시점까지 지연시키는 기법이다. 컴퓨터 프로그래밍 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 프로그래밍(영어: computer programming) 또는 간단히 프로그래밍(programming, 문화어: 프로그램 작성) 혹은 코딩(coding)은 하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 말한다.[1] 프로그래밍은 기법, 과학, 수학, 공학, 심리학적 속성들을 가지고 있다. 한편 코딩은 '작업의 흐름에 따라 프로그램 언어의 명령문을 써 k..