소개
이 실습에서는 C 프로그래밍으로 3 차원 벡터의 내적과 외적을 계산하는 방법을 배웁니다. 이 실습은 다음 단계를 포함합니다.
- 벡터 성분 읽기: 사용자가 두 개의 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 차원 벡터를 다루고 기본 벡터 연산을 적용하는 방법을 보여줍니다. 단계별 지침을 따르면서 벡터 데이터 구조를 처리하고 일반적인 벡터 산술 연산을 수행하는 실질적인 경험을 얻었습니다.



