Skalar- und Vektorprodukt in C berechnen

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Labor lernen Sie, wie Sie das Skalar- und Vektorprodukt von 3D-Vektoren in der C-Programmierung berechnen. Das Labor umfasst die folgenden Schritte:

  1. Lesen der Vektor-Komponenten: Entwickeln Sie ein Programm, das es den Benutzern ermöglicht, die Komponenten zweier 3D-Vektoren einzugeben.
  2. Berechnen des Skalar- oder Vektorprodukts: Implementieren Sie Funktionen zur Berechnung des Skalar- und Vektorprodukts der eingegebenen Vektoren.
  3. Ausgabe des Ergebnisses: Zeigen Sie das berechnete Skalar- oder Vektorprodukt dem Benutzer an.

Am Ende dieses Labors haben Sie ein solides Verständnis der Vektoroperationen und ihrer Implementierung in C.

Vektor-Komponenten einlesen

In diesem Schritt lernen Sie, wie Sie Vektor-Komponenten in C für die Berechnung von Skalar- und Vektorprodukten einlesen. Wir erstellen ein Programm, das es Benutzern erlaubt, Vektor-Komponenten einzugeben und diese für weitere mathematische Operationen zu speichern.

Erstellen Sie zunächst eine neue C-Datei für unsere Vektoroperationen:

cd ~/project
nano vector_operations.c

Fügen Sie nun den folgenden Code hinzu, um eine Funktion zur Eingabe von Vektor-Komponenten zu definieren:

#include <stdio.h>

#define VECTOR_SIZE 3

// Funktion zum Einlesen von Vektor-Komponenten
void readVector(float vector[], int size) {
    printf("Geben Sie %d Vektor-Komponenten ein (durch Leerzeichen getrennt): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

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

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

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

    return 0;
}

Kompilieren und führen Sie das Programm aus, um die Vektoreingabe zu testen:

gcc vector_operations.c -o vector_operations
./vector_operations

Beispielausgabe:

Vektor 1:
Geben Sie 3 Vektor-Komponenten ein (durch Leerzeichen getrennt): 1 2 3
Vektor 2:
Geben Sie 3 Vektor-Komponenten ein (durch Leerzeichen getrennt): 4 5 6
Erklärung

In diesem Code:

  • Definieren wir eine Konstante VECTOR_SIZE mit dem Wert 3 für 3D-Vektoren.
  • Die Funktion readVector() nimmt ein Array und dessen Größe als Parameter entgegen.
  • scanf() wird verwendet, um die Gleitkomma-Vektor-Komponenten einzulesen.
  • Die Funktion main() demonstriert das Einlesen von zwei Vektoren.

Skalar- und Vektorprodukt berechnen

In diesem Schritt lernen Sie, wie Sie Skalar- und Vektorprodukte für 3D-Vektoren in der C-Programmierung berechnen. Wir erweitern das vorherige Programm um mathematische Operationen an Vektoren.

Aktualisieren Sie die Datei vector_operations.c mit folgendem Code:

cd ~/project
nano vector_operations.c

Fügen Sie die Implementierung für die Berechnung von Skalar- und Vektorprodukten hinzu:

#include <stdio.h>

#define VECTOR_SIZE 3

void readVector(float vector[], int size) {
    printf("Geben Sie %d Vektor-Komponenten ein (durch Leerzeichen getrennt): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

// Skalarprodukt berechnen
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;
}

// Vektorprodukt berechnen
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("Vektor 1:\n");
    readVector(vector1, VECTOR_SIZE);

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

    // Skalarprodukt berechnen und anzeigen
    float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
    printf("Skalarprodukt: %.2f\n", dotProduct);

    // Vektorprodukt berechnen und anzeigen
    computeCrossProduct(vector1, vector2, crossProductResult);
    printf("Vektorprodukt: [%.2f, %.2f, %.2f]\n",
           crossProductResult[0],
           crossProductResult[1],
           crossProductResult[2]);

    return 0;
}

Kompilieren und ausführen des aktualisierten Programms:

gcc vector_operations.c -o vector_operations
./vector_operations

Beispielausgabe:

Vektor 1:
Geben Sie 3 Vektor-Komponenten ein (durch Leerzeichen getrennt): 1 2 3
Vektor 2:
Geben Sie 3 Vektor-Komponenten ein (durch Leerzeichen getrennt): 4 5 6
Skalarprodukt: 32.00
Vektorprodukt: [-3.00, 6.00, -3.00]
Erklärung
  • computeDotProduct() berechnet das Skalarprodukt durch Multiplikation entsprechender Vektor-Komponenten.
  • computeCrossProduct() berechnet das Vektorprodukt nach der Standardformel für das 3D-Vektorprodukt.
  • Die Funktion main() demonstriert die Berechnung und Anzeige sowohl des Skalar- als auch des Vektorprodukts.

Ausgabe des Ergebnisses

In diesem letzten Schritt verbessern Sie das Vektor-Operationsprogramm, indem Sie formatierte Ausgaben hinzufügen und eine Funktion erstellen, um Vektorergebnisse in einem klaren und lesbaren Format darzustellen.

Aktualisieren Sie die Datei vector_operations.c mit der folgenden verbesserten Implementierung:

cd ~/project
nano vector_operations.c

Fügen Sie die neue Druckfunktion hinzu und modifizieren Sie das Hauptprogramm:

#include <stdio.h>

#define VECTOR_SIZE 3

void readVector(float vector[], int size) {
    printf("Geben Sie %d Vektor-Komponenten ein (durch Leerzeichen getrennt): ", 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];
}

// Neue Funktion zum Ausgeben des Vektors mit Formatierung
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];

    // Vektoreingabe
    printf("Vektoreingabe:\n");
    printVector("Vektor 1", vector1, VECTOR_SIZE);
    readVector(vector1, VECTOR_SIZE);

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

    // Ergebnisse berechnen
    float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
    computeCrossProduct(vector1, vector2, crossProductResult);

    // Formatierte Ergebnisse ausgeben
    printf("\nErgebnisse der Vektoroperationen:\n");
    printVector("Vektor 1", vector1, VECTOR_SIZE);
    printVector("Vektor 2", vector2, VECTOR_SIZE);
    printf("Skalarprodukt: %.2f\n", dotProduct);
    printVector("Vektorprodukt", crossProductResult, VECTOR_SIZE);

    return 0;
}

Kompilieren und ausführen des aktualisierten Programms:

gcc vector_operations.c -o vector_operations
./vector_operations

Beispielausgabe:

Vektoreingabe:
Vektor 1: [0.00, 0.00, 0.00]
Geben Sie 3 Vektor-Komponenten ein (durch Leerzeichen getrennt): 1 2 3
Vektor 2: [0.00, 0.00, 0.00]
Geben Sie 3 Vektor-Komponenten ein (durch Leerzeichen getrennt): 4 5 6

Ergebnisse der Vektoroperationen:
Vektor 1: [1.00, 2.00, 3.00]
Vektor 2: [4.00, 5.00, 6.00]
Skalarprodukt: 32.00
Vektorprodukt: [-3.00, 6.00, -3.00]
Erklärung
  • Die Funktion printVector() wurde hinzugefügt, um eine konsistente und formatierte Ausgabe für Vektoren zu erzeugen.
  • Die Funktion main() wurde erweitert, um die Eingabe und Ausgabe der Vektoren und Ergebnisse zu demonstrieren.
  • Die Lesbarkeit von Vektoren und Berechnungsergebnissen wurde verbessert.
  • Ein sauberes und professionelles Ausgabeformat für Vektoroperationen wird bereitgestellt.

Zusammenfassung

In diesem Labor haben Sie gelernt, wie man Vektor-Komponenten in C-Programmierung liest und Skalar- und Vektorprodukt-Berechnungen durchführt. Sie haben ein Programm erstellt, das es Benutzern ermöglicht, Vektor-Komponenten einzugeben und anschließend das Skalar- oder Vektorprodukt der Vektoren berechnet. Die wichtigsten Lernpunkte umfassen die Definition einer Funktion zum Lesen von Vektor-Komponenten, die Implementierung der Skalar- und Vektorprodukt-Formeln und die Ausgabe der Ergebnisse.

Das Programm demonstriert, wie man mit 3D-Vektoren in C arbeitet und grundlegende Vektoroperationen anwendet. Durch die schrittweisen Anweisungen haben Sie praktische Erfahrungen mit der Handhabung von Vektor-Datentypen und der Durchführung gängiger Vektorrechnungen gesammelt.