벡터의 외적

ㅋㅋ·2022년 6월 2일

유니티강의

목록 보기
4/24

A(x1, y1, z1), B(x2, y2, z2) 두 벡터가 있을 때

외적은 A×B\overset{\rightarrow}{A} \times \overset{\rightarrow}{B}로 나타내며 A, B 벡터와 오른손 법칙에 따른 수직한 벡터가 결과로 나오게 된다.

A×B\overset{\rightarrow}{A} \times \overset{\rightarrow}{B} = (y1z2 - z1y2, x1z2 - z1x2, x1y2 - x2y1)
A×B\vert\overset{\rightarrow}{A} \times \overset{\rightarrow}{B}\vert = ABsinθ\vert\overset{\rightarrow}{A}\vert \vert\overset{\rightarrow}{B}\vert\sin\theta

A×B\overset{\rightarrow}{A} \times \overset{\rightarrow}{B}B×A\overset{\rightarrow}{B} \times \overset{\rightarrow}{A}는 같지 않지만 A×B\vert\overset{\rightarrow}{A} \times \overset{\rightarrow}{B}\vertB×A\vert\overset{\rightarrow}{B} \times \overset{\rightarrow}{A}\vert는 동일하다.

두 벡터의 외적의 크기는 평행사변형의 넓이와도 같다.
(Bsinθ\vert\overset{\rightarrow}{B}\vert\sin\theta는 삼각형의 높이와 같고, A 벡터와 수직임)


z를 0이라고 생각하면 두 벡터의 내적은 (0, 0, x1y2 - x2y1)이다.

이 때 오른손 법칙을 사용하여 생각해 보면

z값이 0보다 크면 반 시계 방향으로 외적된 것이며,

z값이 0보다 작다면 시계 방향으로 외적된 것이다.


float  x = Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * (x * speed * Time.deltaTime));

Vector3.right는 월드 좌표계를 말하고 transform.right는 로컬 좌표계를 말한다.


Vector3 distVec = transform.position - _col.transform.position;
if (Vector3.Cross(_col.transform.right, distVec).z > 0)
{
    Debug.Log("Up");
    return;
}
Debug.Log("Down");

외적은 Vector3.Cross 함수를 이용하여 구할 수 있다.

이동하는 물체의 위치 벡터와 충돌한 물체의 위치 벡터를 뺀 값(distVec)을 구하고,

이 벡터를 충돌한 물체의 x축 벡터와 외적 후 z 값을 통하여

이동했던 물체가 충돌한 물체의 위에서 충돌했는지 아래에서 충돌했는지 알 수 있다.

0개의 댓글