Calcular o Produto Escalar e Vetorial em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a calcular o produto escalar e vetorial de vetores 3D em programação C. O laboratório cobre os seguintes passos:

  1. Ler componentes do vetor: Desenvolver um programa que permita aos utilizadores introduzir os componentes de dois vetores 3D.
  2. Calcular o produto escalar ou vetorial: Implementar funções para calcular o produto escalar e vetorial dos vetores de entrada.
  3. Imprimir o resultado: Exibir o produto escalar ou vetorial calculado ao utilizador.

No final deste laboratório, você terá uma compreensão sólida das operações vetoriais e sua implementação em C.

Ler Componentes do Vetor

Neste passo, aprenderá a ler componentes de vetores em programação C para realizar cálculos de produto escalar e vetorial. Criaremos um programa que permite aos utilizadores introduzir componentes de vetores e armazená-los para operações matemáticas futuras.

Primeiro, crie um novo ficheiro C para as nossas operações vetoriais:

cd ~/project
nano vector_operations.c

Agora, adicione o seguinte código para definir uma função para ler componentes de vetores:

#include <stdio.h>

#define VECTOR_SIZE 3

// Função para ler componentes do vetor
void readVector(float vector[], int size) {
    printf("Introduza %d componentes do vetor (separadas por espaço): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

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

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

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

    return 0;
}

Vamos compilar e executar o programa para testar a entrada de vetores:

gcc vector_operations.c -o vector_operations
./vector_operations

Exemplo de saída:

Vetor 1:
Introduza 3 componentes do vetor (separadas por espaço): 1 2 3
Vetor 2:
Introduza 3 componentes do vetor (separadas por espaço): 4 5 6
Explicação

Neste código:

  • Definimos uma constante VECTOR_SIZE definida como 3 para vetores 3D.
  • A função readVector() recebe um array e o seu tamanho como parâmetros.
  • scanf() é usado para ler componentes de vetores em ponto flutuante.
  • A função main() demonstra a leitura de dois vetores.

Calcular Produto Escalar ou Vetorial

Neste passo, aprenderá a calcular produtos escalar e vetorial para vetores 3D em programação C. Iremos estender o programa anterior para incluir operações matemáticas em vetores.

Atualize o ficheiro vector_operations.c com o seguinte código:

cd ~/project
nano vector_operations.c

Adicione a implementação para cálculos de produto escalar e vetorial:

#include <stdio.h>

#define VECTOR_SIZE 3

void readVector(float vector[], int size) {
    printf("Introduza %d componentes do vetor (separadas por espaço): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

// Calcular produto escalar
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;
}

// Calcular produto vetorial
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("Vetor 1:\n");
    readVector(vector1, VECTOR_SIZE);

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

    // Calcular e exibir o produto escalar
    float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
    printf("Produto Escalar: %.2f\n", dotProduct);

    // Calcular e exibir o produto vetorial
    computeCrossProduct(vector1, vector2, crossProductResult);
    printf("Produto Vetorial: [%.2f, %.2f, %.2f]\n",
           crossProductResult[0],
           crossProductResult[1],
           crossProductResult[2]);

    return 0;
}

Compile e execute o programa atualizado:

gcc vector_operations.c -o vector_operations
./vector_operations

Exemplo de saída:

Vetor 1:
Introduza 3 componentes do vetor (separadas por espaço): 1 2 3
Vetor 2:
Introduza 3 componentes do vetor (separadas por espaço): 4 5 6
Produto Escalar: 32.00
Produto Vetorial: [-3.00, 6.00, -3.00]
Explicação
  • computeDotProduct() calcula o produto escalar multiplicando os componentes correspondentes dos vetores.
  • computeCrossProduct() calcula o produto vetorial usando a fórmula padrão do produto vetorial de vetores 3D.
  • A função main() demonstra o cálculo e a exibição do produto escalar e vetorial.

Imprimir o Resultado

Neste passo final, irá melhorar o programa de operações vetoriais adicionando saída formatada e criando uma função para imprimir os resultados dos vetores de forma clara e legível.

Atualize o ficheiro vector_operations.c com a seguinte implementação melhorada:

cd ~/project
nano vector_operations.c

Adicione a nova função de impressão e modifique o programa principal:

#include <stdio.h>

#define VECTOR_SIZE 3

void readVector(float vector[], int size) {
    printf("Introduza %d componentes do vetor (separadas por espaço): ", 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];
}

// Nova função para imprimir o vetor com formatação
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];

    // Introdução de vetores
    printf("Entrada de Vetores:\n");
    printVector("Vetor 1", vector1, VECTOR_SIZE);
    readVector(vector1, VECTOR_SIZE);

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

    // Calcular resultados
    float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
    computeCrossProduct(vector1, vector2, crossProductResult);

    // Imprimir resultados formatados
    printf("\nResultados das Operações Vetoriais:\n");
    printVector("Vetor 1", vector1, VECTOR_SIZE);
    printVector("Vetor 2", vector2, VECTOR_SIZE);
    printf("Produto Escalar: %.2f\n", dotProduct);
    printVector("Produto Vetorial", crossProductResult, VECTOR_SIZE);

    return 0;
}

Compile e execute o programa atualizado:

gcc vector_operations.c -o vector_operations
./vector_operations

Exemplo de saída:

Entrada de Vetores:
Vetor 1: [0.00, 0.00, 0.00]
Introduza 3 componentes do vetor (separadas por espaço): 1 2 3
Vetor 2: [0.00, 0.00, 0.00]
Introduza 3 componentes do vetor (separadas por espaço): 4 5 6

Resultados das Operações Vetoriais:
Vetor 1: [1.00, 2.00, 3.00]
Vetor 2: [4.00, 5.00, 6.00]
Produto Escalar: 32.00
Produto Vetorial: [-3.00, 6.00, -3.00]
Explicação
  • Adicionada a função printVector() para criar uma saída de vetor consistente e formatada.
  • A função main() melhorada para demonstrar a entrada de vetores e a impressão dos resultados.
  • Legibilidade melhorada dos vetores e resultados de cálculos.
  • Fornece um formato de saída limpo e profissional para operações vetoriais.

Resumo

Neste laboratório, aprendeu a ler componentes de vetores em programação C e a realizar cálculos de produto escalar e vetorial. Criou um programa que permite aos utilizadores introduzir componentes de vetores e, em seguida, calcula o produto escalar ou vetorial dos vetores. Os pontos principais de aprendizagem incluem a definição de uma função para ler componentes de vetores, a implementação das fórmulas de produto escalar e vetorial e a impressão dos resultados.

O programa demonstra como trabalhar com vetores 3D em C e aplicar operações vetoriais fundamentais. Seguindo as instruções passo a passo, adquiriu experiência prática na manipulação de estruturas de dados de vetores e na realização de operações aritméticas vetoriais comuns.