A(x1, y1, z1), B(x2, y2, z2) 두 벡터가 있을 때
외적은 로 나타내며 A, B 벡터와 오른손 법칙에 따른 수직한 벡터가 결과로 나오게 된다.
= (y1z2 - z1y2, x1z2 - z1x2, x1y2 - x2y1)
=
와 는 같지 않지만 와 는 동일하다.
두 벡터의 외적의 크기는 평행사변형의 넓이와도 같다.
(는 삼각형의 높이와 같고, 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 값을 통하여
이동했던 물체가 충돌한 물체의 위에서 충돌했는지 아래에서 충돌했는지 알 수 있다.