Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

두 벡터의 외적(Cross Product)을 계산하는 C++ 프로그램


이 글에서는 두 벡터의 외적(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)입니다. 이 결과 벡터가 입력된 두 벡터 어느 쪽에도 수직이라는 점을 확인할 수 있습니다.