본문 바로가기
반응형

3D Algorithm42

선형 방정식을 이용한 직선 삼각형 교차점 계산 이전글에서 벡터의 내적과 외적을 이용해서 직선 삼각형 교차점을 계산했었습니다. 2024.03.21 - [3D Algorithm] - 직선 삼각형 교차점 계산(Ray Triangle Intersection) 직선 삼각형 교차점 계산(Ray Triangle Intersection)tn: triangle normal rd: ray direction p: hit point ro: ray origin v0, v1, v2: triangle vertex 위 그림에서 ray origin으로부터 ray direction의 최단거리 t는 t = ((v0 - ro) • tn) / (rd • tn) •는 내적 로 구할 수 있습니다. t가darkrock.tistory.com 이번글에서는 선형방정식을 이용해서 직선 삼각형 교차점.. 2024. 4. 2.
직선 삼각형 교차점 계산(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.
행렬식(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.
변환행렬 사원수 변환 코드(Matrix to Quaternion using Eigen Library) 3차원 4x4변환행렬을 알고 있을 때 사원수의 w, x, y, z를 계산하는 것을 Eigen Library에서 제공하고 있어 코드를 소개합니다. Quaternion은 우리말로 사원수라고 하는데 사원수 식은 아래와 같이 표현할 수 있습니다. q = w+xi+yj+zk 우리가 잘 알고 있는 오일러 각을 사용하면 짐벌락(Gimbal Lock) 현상이 발생하는데 이 현상을 피하기 위해서는 사원수를 사용해야 합니다. 사원수를 사용하기 위해서는 위 식의 w, x, y, z를 알아야 합니다. 참고로 i, j, k는 허수 부분을 나타내는 세 개의 가상 백터입니다. 4x4 변환행렬 입력으로 사원수의 w, x, y, z를 구하는 코드입니다.(행렬의 4행의 값은 translate에 관련된 값입니다.) Eigen::Matri.. 2024. 1. 12.
반응형