C 언어로 벡터 내적 및 외적 계산하기

CBeginner
지금 연습하기

소개

이 실습에서는 C 프로그래밍으로 3 차원 벡터의 내적과 외적을 계산하는 방법을 배웁니다. 이 실습은 다음 단계를 포함합니다.

  1. 벡터 성분 읽기: 사용자가 두 개의 3 차원 벡터의 성분을 입력할 수 있도록 프로그램을 개발합니다.
  2. 내적 또는 외적 계산: 입력 벡터의 내적과 외적을 계산하는 함수를 구현합니다.
  3. 결과 출력: 계산된 내적 또는 외적을 사용자에게 표시합니다.

이 실습을 마치면 벡터 연산과 C 에서의 구현에 대한 확실한 이해를 얻게 될 것입니다.

벡터 성분 읽기

이 단계에서는 내적 및 외적 계산을 위해 C 프로그래밍에서 벡터 성분을 읽는 방법을 배웁니다. 사용자가 벡터 성분을 입력하고 추가적인 수학 연산을 위해 저장할 수 있도록 프로그램을 만들 것입니다.

먼저 벡터 연산을 위한 새로운 C 파일을 생성합니다.

cd ~/project
nano vector_operations.c

이제 벡터 성분을 읽는 함수를 정의하는 다음 코드를 추가합니다.

#include <stdio.h>

#define VECTOR_SIZE 3

// 벡터 성분을 읽는 함수
void readVector(float vector[], int size) {
    printf("Enter %d vector components (separated by space): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

int main() {
    float vector1[VECTOR_SIZE];
    float vector2[VECTOR_SIZE];

    printf("Vector 1:\n");
    readVector(vector1, VECTOR_SIZE);

    printf("Vector 2:\n");
    readVector(vector2, VECTOR_SIZE);

    return 0;
}

벡터 입력을 테스트하기 위해 프로그램을 컴파일하고 실행해 봅시다.

gcc vector_operations.c -o vector_operations
./vector_operations

예시 출력:

Vector 1:
Enter 3 vector components (separated by space): 1 2 3
Vector 2:
Enter 3 vector components (separated by space): 4 5 6
설명

이 코드에서:

  • 3 차원 벡터를 위해 상수 VECTOR_SIZE를 3 으로 설정합니다.
  • readVector() 함수는 배열과 크기를 매개변수로 받습니다.
  • scanf()를 사용하여 부동소수점 벡터 성분을 읽습니다.
  • main() 함수는 두 개의 벡터를 읽는 방법을 보여줍니다.

내적 또는 외적 계산

이 단계에서는 C 프로그래밍에서 3 차원 벡터의 내적과 외적을 계산하는 방법을 배웁니다. 이전 프로그램을 확장하여 벡터에 대한 수학 연산을 포함시킬 것입니다.

vector_operations.c 파일을 다음 코드로 업데이트합니다.

cd ~/project
nano vector_operations.c

내적 및 외적 계산을 위한 구현을 추가합니다.

#include <stdio.h>

#define VECTOR_SIZE 3

void readVector(float vector[], int size) {
    printf("Enter %d vector components (separated by space): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

// 내적 계산
float computeDotProduct(float vector1[], float vector2[], int size) {
    float dotProduct = 0.0;
    for (int i = 0; i < size; i++) {
        dotProduct += vector1[i] * vector2[i];
    }
    return dotProduct;
}

// 외적 계산
void computeCrossProduct(float vector1[], float vector2[], float result[]) {
    result[0] = vector1[1] * vector2[2] - vector1[2] * vector2[1];
    result[1] = vector1[2] * vector2[0] - vector1[0] * vector2[2];
    result[2] = vector1[0] * vector2[1] - vector1[1] * vector2[0];
}

int main() {
    float vector1[VECTOR_SIZE];
    float vector2[VECTOR_SIZE];
    float crossProductResult[VECTOR_SIZE];

    printf("Vector 1:\n");
    readVector(vector1, VECTOR_SIZE);

    printf("Vector 2:\n");
    readVector(vector2, VECTOR_SIZE);

    // 내적 계산 및 출력
    float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
    printf("Dot Product: %.2f\n", dotProduct);

    // 외적 계산 및 출력
    computeCrossProduct(vector1, vector2, crossProductResult);
    printf("Cross Product: [%.2f, %.2f, %.2f]\n",
           crossProductResult[0],
           crossProductResult[1],
           crossProductResult[2]);

    return 0;
}

업데이트된 프로그램을 컴파일하고 실행합니다.

gcc vector_operations.c -o vector_operations
./vector_operations

예시 출력:

Vector 1:
Enter 3 vector components (separated by space): 1 2 3
Vector 2:
Enter 3 vector components (separated by space): 4 5 6
Dot Product: 32.00
Cross Product: [-3.00, 6.00, -3.00]
설명
  • computeDotProduct()는 해당 벡터 성분을 곱하여 내적을 계산합니다.
  • computeCrossProduct()는 표준 3 차원 벡터 외적 공식을 사용하여 외적을 계산합니다.
  • main() 함수는 내적과 외적 모두를 계산하고 표시하는 방법을 보여줍니다.

결과 출력

이 마지막 단계에서는 벡터 연산 프로그램을 개선하여 형식화된 출력을 추가하고 벡터 결과를 명확하고 읽기 쉽게 출력하는 함수를 만듭니다.

vector_operations.c 파일을 다음 개선된 구현으로 업데이트합니다.

cd ~/project
nano vector_operations.c

새로운 출력 함수를 추가하고 메인 프로그램을 수정합니다.

#include <stdio.h>

#define VECTOR_SIZE 3

void readVector(float vector[], int size) {
    printf("Enter %d vector components (separated by space): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

float computeDotProduct(float vector1[], float vector2[], int size) {
    float dotProduct = 0.0;
    for (int i = 0; i < size; i++) {
        dotProduct += vector1[i] * vector2[i];
    }
    return dotProduct;
}

void computeCrossProduct(float vector1[], float vector2[], float result[]) {
    result[0] = vector1[1] * vector2[2] - vector1[2] * vector2[1];
    result[1] = vector1[2] * vector2[0] - vector1[0] * vector2[2];
    result[2] = vector1[0] * vector2[1] - vector1[1] * vector2[0];
}

// 벡터를 형식화하여 출력하는 새로운 함수
void printVector(const char* label, float vector[], int size) {
    printf("%s: [", label);
    for (int i = 0; i < size; i++) {
        printf("%.2f%s", vector[i], (i < size - 1) ? ", " : "");
    }
    printf("]\n");
}

int main() {
    float vector1[VECTOR_SIZE];
    float vector2[VECTOR_SIZE];
    float crossProductResult[VECTOR_SIZE];

    // 벡터 입력
    printf("Vector Input:\n");
    printVector("Vector 1", vector1, VECTOR_SIZE);
    readVector(vector1, VECTOR_SIZE);

    printVector("Vector 2", vector2, VECTOR_SIZE);
    readVector(vector2, VECTOR_SIZE);

    // 결과 계산
    float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
    computeCrossProduct(vector1, vector2, crossProductResult);

    // 형식화된 결과 출력
    printf("\nVector Operations Results:\n");
    printVector("Vector 1", vector1, VECTOR_SIZE);
    printVector("Vector 2", vector2, VECTOR_SIZE);
    printf("Dot Product: %.2f\n", dotProduct);
    printVector("Cross Product", crossProductResult, VECTOR_SIZE);

    return 0;
}

업데이트된 프로그램을 컴파일하고 실행합니다.

gcc vector_operations.c -o vector_operations
./vector_operations

예시 출력:

Vector Input:
Vector 1: [0.00, 0.00, 0.00]
Enter 3 vector components (separated by space): 1 2 3
Vector 2: [0.00, 0.00, 0.00]
Enter 3 vector components (separated by space): 4 5 6

Vector Operations Results:
Vector 1: [1.00, 2.00, 3.00]
Vector 2: [4.00, 5.00, 6.00]
Dot Product: 32.00
Cross Product: [-3.00, 6.00, -3.00]
설명
  • 일관되고 형식화된 벡터 출력을 생성하는 printVector() 함수를 추가했습니다.
  • 벡터 입력 및 결과 출력을 보여주는 main() 함수를 개선했습니다.
  • 벡터 및 계산 결과의 가독성을 높였습니다.
  • 벡터 연산 결과를 깔끔하고 전문적인 형식으로 제공합니다.

요약

이 실습에서는 C 프로그래밍에서 벡터 성분을 읽고 내적 및 외적 계산을 수행하는 방법을 배웠습니다. 사용자가 벡터 성분을 입력하면 벡터의 내적 또는 외적을 계산하는 프로그램을 만들었습니다. 주요 학습 내용은 벡터 성분을 읽는 함수를 정의하고, 내적 및 외적 공식을 구현하고, 결과를 출력하는 것입니다.

이 프로그램은 C 에서 3 차원 벡터를 다루고 기본 벡터 연산을 적용하는 방법을 보여줍니다. 단계별 지침을 따르면서 벡터 데이터 구조를 처리하고 일반적인 벡터 산술 연산을 수행하는 실질적인 경험을 얻었습니다.