이 글에서는 두 벡터의 외적(Cross Product)을 계산하는 C++ 프로그램을 소개합니다.
먼저 두 개의 3차원 벡터가 다음과 같이 주어져 있다고 가정해 보겠습니다.
M = m1·i + m2·j + m3·k
N = n1·i + n2·j + n3·k
이때 두 벡터의 외적은 아래와 같이 정의됩니다.
외적 = (m2·n3 − m3·n2)·i + (m1·n3 − m3·n1)·j + (m1·n2 − m2·n1)·k
여기서 m2·n3 − m3·n2, m1·n3 − m3·n1, m1·n2 − m2·n1은 각각 i, j, k 방향 단위 벡터의 계수(성분)에 해당합니다. 참고로 외적의 결과로 얻어지는 벡터는 원래 두 벡터 모두에 수직이라는 중요한 성질을 가집니다.
알고리즘
시작
crossProduct() 함수를 선언한다.
정수(int) 자료형의 벡터 v_A[], v_B[], c_P[] 세 개를 선언한다.
c_P[0] = v_A[1] * v_B[2] - v_A[2] * v_B[1]
c_P[1] = -(v_A[0] * v_B[2] - v_A[2] * v_B[0])
c_P[2] = v_A[0] * v_B[1] - v_A[1] * v_B[0]
v_A[] 벡터의 값을 초기화한다.
v_B[] 벡터의 값을 초기화한다.
c_P[] 벡터를 정수 변수 n으로 초기화한다.
"외적(Cross product):"을 출력한다.
v_A[]와 v_B[]의 외적을 계산하도록 crossProduct() 함수를 호출한다.
for (int i = 0; i < n; i++)
c_P[] 벡터의 값을 출력한다.
종료.
예제 코드
#include <iostream>
#define n 3
using namespace std;
void crossProduct(int v_A[], int v_B[], int c_P[]) {
c_P[0] = v_A[1] * v_B[2] - v_A[2] * v_B[1];
c_P[1] = -(v_A[0] * v_B[2] - v_A[2] * v_B[0]);
c_P[2] = v_A[0] * v_B[1] - v_A[1] * v_B[0];
}
int main() {
int v_A[] = { 7, 6, 4 };
int v_B[] = { 2, 1, 3 };
int c_P[n];
cout << "Cross product:";
crossProduct(v_A, v_B, c_P);
for (int i = 0; i < n; i++)
cout << c_P[i] << " ";
return 0;
}
실행 결과
Cross product: 14 -13 -5
v_A = {7, 6, 4}와 v_B = {2, 1, 3}의 외적 결과는 (14, -13, -5)입니다. 이 결과 벡터가 입력된 두 벡터 어느 쪽에도 수직이라는 점을 확인할 수 있습니다.