아래 그림을 보시면 파란 점들은 알고 있는 정보이고, 빨간 점은 계산해야 할 점입니다.
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) • dir로 구할 수 있습니다. 이 값을 dis로 하겠습니다.
2번은 dis/L로 계산할 수 있습니다. 이 값을 ratio로 하겠습니다.
3번은 목표 비율이 0.5이기 때문에 0.5 - ratio로 하면 됩니다. 이 값을 ratio_diff로 하겠습니다.
4번은 직선 길이가 L로 L * ratio_diff로 하면 움직여할 거리가 계산됩니다. 이 값을 L_diff로 하겠습니다.
5번은 p+ L_diff*dir로 구할 수 있습니다.
위 식을 코드로 표현하면 아래와 같은 형태로 쓸 수 있습니다.
Point p(12, -10, 0), pl(10, 0, 0);
float L = 10.0;
Point dir(1, 0, 0);
float dis = (p - pl) • dir;
float ratio = dis / L;
float ratio_diff = 0.5-ratio;
float L_diff = L*ratio_diff;
Point p_result = p + L_diff*dir;
계산 결과 값은 15, -10, 0으로 나옵니다.
내적을 계산하는 공식은 아래글에 있습니다.
2024.03.12 - [3D Algorithm] - 벡터 내적 외적 계산 공식과 결과 의미
'3D Algorithm' 카테고리의 다른 글
벡터 내적 외적 계산 공식과 결과 의미 (0) | 2024.03.12 |
---|---|
사이각 벡터 계산 (0) | 2024.03.08 |
3차원 스케일(Scale)과 비율(Ratio) (0) | 2024.02.20 |
행렬식(Determinant)과 외적/내적 관계 (0) | 2024.02.06 |
두 벡터 사이각(내적, 외적 활용) (0) | 2024.01.17 |