Uso de la clase para implementar cantidades vectoriales en C++

Una cantidad vectorial es una cantidad que posee tanto magnitud como dirección. Aquí, la magnitud es simplemente la cantidad o el tamaño de la cantidad y la dirección es hacia donde se dirige la cantidad. Por ejemplo, considere la declaración «Vaya 20 millas al norte». En el enunciado anterior, 20 es la magnitud y el Norte es la dirección.

Ejemplos :

Input : Store and display vector with components 3, 4, 5.
Output : 3i + 4j + 5k

Input : Dot Product for V1 = (1, 3, 5), V2 = (2, 3, 0)
Output : 11

where i, j, k are unit vectors in x, y and z directions respectively.

En general, un vector se representa como:

V = Xi + Yj + Zk

Donde, X, Y y Z son la magnitud del vector V en las direcciones i, j y k respectivamente.

Varias operaciones que se pueden realizar en Vectores:

  1. Suma de vectores: La suma de vectores se realiza sumando las magnitudes X, Y y Z correspondientes de los dos vectores para obtener el vector resultante.
    Ejemplo:
    v1 = 1i + 2j + 3k
    v2 = 3i + 2j + 1k
    Por lo tanto, el vector resultante, v = v1 + v2 = 4i + 4j + 4k
  2. Producto escalar de vectores: El producto escalar de dos vectores v1 y v2 se calcula como:
    v = v1 . v2
      = magnitude(v1)*magnitude(v2)*Cos(θ)
    
    Where, θ is the angle between the vectors v1 and v2.
    

    Ejemplo:
    v1 = 1i + 2j + 3k
    v2 = 3i + 2j + 1k
    Por lo tanto, v = v1 . v2 = 3 + 4 + 3 = 10

  3. Producto vectorial de vectores: el producto vectorial de vectores se realiza mediante el uso de determinantes para los vectores a = axi + ayj + azk y b = bxi + byj + bzk

    c = a X b = i(ay*bz – by*az) – j(ax*bz – az*bx) + k(ax*by – bx*ay)

    Ejemplo:
    v1 = 3i + 4j + 2k
    v2 = 6i + 3j + 9k
    Por lo tanto, v = v1 X v2 = 30i – 15j – 15k

A continuación se muestra la implementación de las operaciones anteriores utilizando la clase en C++:

#include <cmath>
#include <iostream>
using namespace std;
  
class Vector {
private:
    int x, y, z;
    // Components of the Vector
  
public:
    Vector(int x, int y, int z)
    {
        // Constructor
        this->x = x;
        this->y = y;
        this->z = z;
    }
    Vector operator+(Vector v); // ADD 2 Vectors
    Vector operator-(Vector v); // Subtraction
    int operator^(Vector v); // Dot Product
    Vector operator*(Vector v); // Cross Product
    float magnitude()
    {
        return sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2));
    }
    friend ostream& operator<<(ostream& out, const Vector& v);
    // To output the Vector
};
  
// Addition of vectors
Vector Vector::operator+(Vector v)
{
    int x1, y1, z1;
    x1 = x + v.x;
    y1 = y + v.y;
    z1 = z + v.z;
    return Vector(x1, y1, z1);
}
  
// Subtraction of vectors
Vector Vector::operator-(Vector v)
{
    int x1, y1, z1;
    x1 = x - v.x;
    y1 = y - v.y;
    z1 = z - v.z;
    return Vector(x1, y1, z1);
}
  
// Dot product of vectors
int Vector::operator^(Vector v)
{
    int x1, y1, z1;
    x1 = x * v.x;
    y1 = y * v.y;
    z1 = z * v.z;
    return (x1 + y1 + z1);
}
  
// Cross product of vectors
Vector Vector::operator*(Vector v)
{
    int x1, y1, z1;
    x1 = y * v.z - z * v.y;
    y1 = z * v.x - x * v.z;
    z1 = x * v.y - y * v.x;
    return Vector(x1, y1, z1);
}
  
// Display Vector
ostream& operator<<(ostream& out, const Vector& v)
{
    out << v.x << "i ";
    if (v.y >= 0)
        out << "+ ";
    out << v.y << "j ";
    if (v.z >= 0)
        out << "+ ";
    out << v.z << "k" << endl;
    return out;
}
  
// Driver program
int main()
{
    // Let us Take the vector quantites :
    // V1 = 3i + 4j + 2k
    // V2 = 6i + 3j + 9k
    Vector V1(3, 4, 2), V2(6, 3, 9);
  
    cout << "V1 = " << V1;
    cout << "V2 = " << V2;
  
    cout << "V1 + V2 = " << (V1 + V2);
    cout << "Dot Product is : " << (V1 ^ V2);
    cout << "Cross Product is : " << (V1 * V2);
  
    return 0;
}
Producción:

V1 = 3i + 4j + 2k
V2 = 6i + 3j + 9k
V1 + V2 = 9i + 7j + 11k
Dot Product is : 48Cross Product is : 30i -15j -15k

Publicación traducida automáticamente

Artículo escrito por KartikArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *