사용자 도구

사이트 도구


ps:이론:3차원_계산_기하

3차원 계산 기하

  • 2차원에서 풀었던 계산기하 문제들은, 대부분 3차원이나 고차원으로 확장이 가능하고, 거기에 대응되는 알고리즘들도 무궁무진하다
  • 하지만 다행히도 PS에 등장하는 기하 문제들은, 3차원 이상의 차원을 대상으로는 그렇게 고난이도의 지식까지 요구하는 경우는 드문것 같다
  • 문제를 풀다가 접했던 기본적인 내용들만 정리해보겠다.

기본

  • 3차원에서도 2차원과 마찬가지로 점 두개가 주어지면 직선을 유일하게 정의할 수 있다.
  • 그리고 3차원에서는 점 세개가 주어지면 평면을 유일하게 정의할 수 있다.

벡터의 활용

벡터곱

  • 원래 벡터곱은 3차원 벡터간에 정확하게 정의되는 연산이다.
  • $ {\mathbf {a}}\times {\mathbf {b}}={\hat {{\mathbf n}}}\left|{\mathbf {a}}\right|\left|{\mathbf {b}}\right|\sin \theta =[a_{2}b_{3}-a_{3}b_{2},a_{3}b_{1}-a_{1}b_{3},a_{1}b_{2}-a_{2}b_{1}] $
    • a와 b의 벡터곱의 크기는 a와 b로 만들어지는 평행사변형의 넓이이고
    • a와 b의 벡터곱의 방향은 a와 b에 대해 모두 수직인 방향이다.
      • 사실 수직인 방향이 두가지인데, 일반적으로 쓰이는 위의 공식은 오른손 좌표계 방향을 따르도록 계산하는 방식이다.
  • def cross_product(u, v):
        ux, uy, uz = u
        vx, vy, vz = v
        return (uy * vz - vy * uz, uz * vx - vz * ux, ux * vy - vx * uy)

스칼라곱

  • 스칼라곱은 2차원 벡터의 경우와 똑같다.
  • 다음과 같이 계산된다.
    • $ {\displaystyle \mathbf {a} \cdot \mathbf {b} =a_{1}b_{1}+a_{2}b_{2}+\cdots +a_{n}b_{n}} $
  • 이는 두 벡터의 길이와 사이각의 cos값을 곱한 것과 같다
    • $ {\displaystyle \mathbf {a} \cdot \mathbf {b} ={\begin{cases}\Vert \mathbf {a} \Vert \Vert \mathbf {b} \Vert \cos \measuredangle (\mathbf {a} ,\mathbf {b} )&\mathbf {a} \neq \mathbf {0} \land \mathbf {b} \neq \mathbf {0} \\0&\mathbf {a} =\mathbf {0} \lor \mathbf {b} =\mathbf {0} \end{cases}}} $
  • def dot_product(u, v):
        ux, uy, uz = u
        vx, vy, vz = v
        return ux * vx + uy + vy + uz + vz

평면의 법선

  • 평면이 평면 위의 세 점으로 정의되는 경우에 벡터를 구하는 문제.
  • P,Q,R 을 포함하는 평면과 수직인 벡터는, 벡터PQ와 벡터PR과도 모두 수직이다
  • 그러므로 PQ와 PR의 벡터곱을 구해주면 평면의 법선벡터가 된다.
  • def normal_vector(p, q, r):
        u = (p[0] - q[0], p[1] - q[1], p[2] - q[2])
        v = (p[0] - r[0], p[1] - r[1], p[2] - r[2])
        return cross_product(u, v)

평면을 기준으로 점의 방향성 구하기

  • 2차원에서 세점의 방향성을 구하는 것의 확장이다.
  • 2차원에서 P,Q,R의 방향성을 구하는 것은, 결국 PQ를 연결하는 직선이 평면을 둘로 나눴을때, R이 어느쪽에 속하는지를 찾는 문제였다
  • 3차원에서는 P,Q,R을 포함하는 평면이 3차원 공간을 둘로 나눴을때, X가 어느쪽에 속하는지를 찾는 문제가 된다.
  • 이것을 구하는 간단한 방법은, 평면에서 X를 향하는 벡터와 평면의 법선벡터와의 각도를 구해서, 그 각도가 180보다 작은지 큰지를 확인하는 것이다.
  • 구체적으로는, 평면의 법선을 구한뒤에, 벡터 PX와의 스칼라곱을 계산한 뒤에, 부호를 확인하면 된다.
    • 스칼라곱에는 각도의 cos값이 곱해지므로, 각도가 180도 미만이면 양수, 180도 초과면 음수가 된다.
  • 스칼라곱이 +면 법선방향, -면 법선 반대 방향, 0이면 평면 위에 있는 것이다.

토론

댓글을 입력하세요:
G N S Z A
 
ps/이론/3차원_계산_기하.txt · 마지막으로 수정됨: 2023/04/25 06:23 저자 teferi