본문 바로가기
반응형

분류 전체보기84

직선 삼각형 교차점 계산(Ray Triangle Intersection) 그림기호 설명tn: triangle normal rd: ray direction p: hit point ro: ray originv0, v1, v2: triangle vertex 위 그림에서 ray origin으로부터 ray direction의 최단거리 t는t = ((v0 - ro) • tn) / (rd • tn)                    •는 내적 로 구할 수 있습니다. t가 구해지면 hit point p는 p = ro + rd * t  로 구할 수 있습니다. 단순히 교차점만 구하면 계산은 여기서 끝이 나지만,삼각형과 직선 ray가 교차하는지 판별을 위해서는 hit point가 삼각형 안에 있는지 판별이 필요합니다. 판별은 외적을 이용해서 할 수 있습니다. k1 = (v1-v0) x (p-v0.. 2024. 3. 21.
벡터 내적 외적 계산 공식과 결과 의미 3차원 공간의 벡터 A = (x1, x2, x3), B = (y1, y2, y3)가 있을 때, - 내적(Inner product, Dot product)은 A⋅B = x1*y1 + x2*y2 + x3*y3 으로 계산할 수 있습니다. 코사인을 이용한 내적 계산 방식은 X의 길이와 Y의 길이 곱을 cos 벡터 사이각으로 곱하면 계산됩니다. 내적의 결과는 스칼라이며, 두 벡터가 기하학적으로 얼마나 "비슷한 방향"을 향하고 있는지를 나타냅니다. 만약 두 벡터가 완전히 같은 방향을 향하고 있다면 내적은 최대값이 되고, 두 벡터가 수직이라면 내적은 0이 됩니다. 내적이 음수인 경우에는 두 벡터가 반대 방향을 향하고 있다는 것을 의미합니다.(이 특징은 코사인 그래프를 생각하시면 됩니다. 만약 두 벡터가 길이가 1인 .. 2024. 3. 12.
사이각 벡터 계산 두 벡터의 사이각 계산은 아래글을 통해 설명을 했었습니다.2024.01.17 - [3D Algorithm] - 두 벡터 사이각(내적, 외적 활용) 두 벡터 사이각(내적, 외적 활용)두 벡터의 내적은 아래 식과 같이 벡터 a, b가 있을 때, 두 벡터 길이(||a||, ||b||)와 코사인 곱으로 구할 수 있습니다. 참고로 벡터 길이는 3차원을 예로 들었을 때 x제곱, y제곱, z제곱의 수치들을 모darkrock.tistory.com 이번 글은 아래 그림과 같이 벡터 AC와 CB를 알고 A 각을 알고 있을 때 AB에 해당하는 벡터를 계산하는 식을 알려드리겠습니다.  사실 벡터 AC와 A각을 알면 AB에 해당하는 벡터를 계산할 수 있습니다. 백터 AB를 계산하기 위해 CB의 벡터를 계산해야 하는데 2차원에서.. 2024. 3. 8.
비율(ratio)을 이용한 3차원 점 이동 아래 그림을 보시면 파란 점들은 알고 있는 정보이고, 빨간 점은 계산해야 할 점입니다.pl(10,0,0)을 시작점으로 길이 L이 10이고 방향은 dir(1,0,0) 직선이 있습니다. 점 p(12,-10,0)가 있을 때 직선의 길이 50%에 해당하는 빨간 점을 구하는 예제입니다. 기본 아이디어는 현재 점 p가 직선의 길이에 얼마만큼의 비율로 위치해 있는가를 계산하고 그 계산한 것을 목표 50%의 차이를 계산해서 그 차이만큼의 거리를 이동하는 것입니다. 이걸 계산하기 위해  1. pl과 p사이의 백터 1,0,0 정사영 길이 2. p위치에서 직선 길이에 대한 비율 3. 목표 비율과 현재 비율 차이 4. 비율차이의 거리 계산 5. 점 p 이동 이렇게 5단계로 계산 해보도록 하겠습니다.1번은 (p-pl) • di.. 2024. 2. 20.
3차원 스케일(Scale)과 비율(Ratio) Geometry에서 object의 크기를 조절할 때 스케일(Scale)을 이용할 때가 있습니다. 이때 스케일 수치는 비율을 사용하게 됩니다. 스케일 수치가 1(100%=100/100)이면 object의 현재 크기를 유지하는 것이고, 0.5(50%=50/100)면 현재 크기에서 절반으로 줄이는 결과가 됩니다.  변환행렬에서 스케일과 관련된 인자는 대각행렬의 요소들입니다. 변환행렬에 임의의 점 px, py, pz를 곱하게 되면 스케일 수치를 각각의 좌표에 곱해주어서 스케일이 적용된 좌표를 계산하게 됩니다. 그래서 스케일 수치가 1이면 px, py, pz가 되고 0.5면 현재 좌표에서 0.5를 곱하는 형태가 되어 크기가 줄어들게 됩니다.이 스케일을 이용해서 현재 형상에서 목표 형상으로 변형시키는 간단한 예제를.. 2024. 2. 20.
Visual Studio breakpoint(중단점) 위치 오류 Breakpoint 오류며칠 전부터 Visual Studio에서 디버그를 하는데 breakpoint 위치가 원하는 곳에 있지 않아서 "왜 이러지" 하다가 최근에 웹에서 필요한 기능이 있어 그 코드를 복사 후 붙이기 한 것이 문제였습니다. 웹에 작성된 코드에 개행문자를 그대로 Visual Studio에 복사해서 breakpoint 위치가 불안정하게 위치되었습니다. 웹에서 검색해 보니 Visual Studio 옵션을 조금 건드려 주면 해결할 수 있었습니다. Visual Studio FILE->Advanced Save Options에 가보면 Line endings에 Windows(CR LF) 변경 후 컴파일 하시면 breakpoint 위치가 제대로 작동하여 디버그 하실 때 더 이상 breakpoint 위치 문.. 2024. 2. 16.
연봉 인상률 계산 회사를 다니다 보면 1년마다 연봉 계약을 하게 되는데 인상된 금액이 얼마인지 궁금할 때가 있습니다. 작년과 올해 금액만 보고 차이를 계산해서 얼마가 올랐는지 알 수 있지만 남들과 비교를 위해서는 연봉 인상률을 알아야 할 때가 있습니다. 연봉 인상률이 나는 5%인데 남들이 10% 올랐다 하면 더욱 분발해서 연봉 인상률을 올리기 위해서 노력해야 하겠죠. 뭐 내가 금수저라서 "연봉은 별로 신경 안 써" 이러면 연봉 인상률과 상관없이 그냥 회사만 잘 다니시면 될 것 같습니다.연봉 인상률을 계산하기 위해서는 아래와 같은 식을 이용해서 계산하시면 됩니다. 인상률(단위 %) = ((인상 후/인상 전) - 1) x 100  예를 들어 작년에 5000만원이였는데 올해 5500만원이다 하면 연봉 인상률은, ((5500/5.. 2024. 2. 16.
행렬식(Determinant)과 외적/내적 관계 행렬의 역행렬을 구할 때 행렬식(Determinant)이 0인지 아닌지를 판별해서 역행렬 존재 여부를 판별할 수 있습니다. 행렬식이 0일 때의 의미를 외적과 내적을 이용해서 설명해 드리도록 하겠습니다.3x3 행렬에서 행렬식을 구하기 위한 식은 아래와 같습니다.  각 행을 하나의 백터라고 보면 2행과 3행의 백터를 외적하여 1행과 내적 한 식으로 볼 수 있습니다. 그래서 식을 다시 쓰면 아래와 같습니다. 1행 i, j, k를 a라고 하면, det = dot(a, cross(u, v)) 두 백터 u, v를 외적을 하게 되면, uv 평면의 수직인 법선 백터가 계산됩니다. 이 법선 백터에 a(i, j, k) 백터를 내적 하게 되면 결과 값을 통해 두 백터의 관계를 알 수 있습니다. 내적은 코사인 그래프와 연관이.. 2024. 2. 6.
두 벡터 사이각(내적, 외적 활용) 두 벡터의 내적은 아래 식과 같이 벡터 a, b가 있을 때, 두 벡터 길이(||a||, ||b||)와 코사인 곱으로 구할 수 있습니다. 참고로 벡터 길이는 3차원을 예로 들었을 때 x제곱, y제곱, z제곱의 수치들을 모두 더해 루트를 씌어주면 계산이 됩니다.위 식을 이용해서 두 벡터의 각을 구하려면 아래와 같이 아크코사인을 이용하면 됩니다. 아래 그림의 x, y는 벡터를 의미합니다. 벡터 x에 해당하는 3차원 좌표 x, y, z가 있고 벡터 y 또한 3차원 좌표 x, y, z가 있습니다. wiki 그림을 가져와서 혼동을 줄 수 있는 점 양해 바랍니다. -.-;두 벡터의 길이가 1인 단위 벡터이면 두 벡터의 길이를 나눠줄 필요 없이(길이가 1이기 때문에) 아크코사인에 두 벡터의 내적만 이용해서 각을 구할 .. 2024. 1. 17.
반응형