用类实现C++中的矢量量

矢量是一个既有大小又有方向的量。在这里,数量只是数量的数量或大小,方向是数量的方向。例如,考虑“北20英里”的说法。在上面的陈述中,20是震级,北方是方向。

null

图片[1]-用类实现C++中的矢量量-yiteyi-C++库

例子 :

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.

通常,向量表示为:

V=席+YJ+ZK

式中,X、Y和Z分别是i、j和k方向上向量V的大小。

可以对向量执行的各种操作:

  1. 添加向量: 矢量相加是通过将两个矢量对应的X、Y和Z幅值相加得到合成矢量。 例子: v1=1i+2j+3k v2=3i+2j+1k 因此,合成向量v=v1+v2=4i+4j+4k
  2. 向量的点积: 两个向量v1和v2的点积计算如下:
    v = v1 . v2
      = magnitude(v1)*magnitude(v2)*Cos(θ)
    
    Where, θ is the angle between the vectors v1 and v2.
    

    例子: v1=1i+2j+3k v2=3i+2j+1k 因此,v=v1。v2=3+4+3=10

  3. 向量的叉积: 向量的叉积是通过使用向量a=axi+ayj+azk和b=bxi+byj+bzk的行列式来完成的

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

    例子: v1=3i+4j+2k v2=6i+3j+9k 因此,v=v1 X v2=30i–15j–15k

下面是使用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;
}


输出:

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

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享