Lượng vectơ có độ lớn và phương hướng. Triển khai bằng class với các phép toán: cộng, trừ, tích vô hướng, tích có hướng, độ lớn.
Ví dụ
#include <cmath>
#include <iostream>
using namespace std;
class Vector {
private:
int x, y, z;
public:
Vector(int x, int y, int z) : x(x), y(y), z(z) {}
Vector operator+(Vector v);
Vector operator-(Vector v);
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);
};
Vector Vector::operator+(Vector v) { return Vector(x+v.x, y+v.y, z+v.z); }
Vector Vector::operator-(Vector v) { return Vector(x-v.x, y-v.y, z-v.z); }
int Vector::operator^(Vector v) { return x*v.x + y*v.y + z*v.z; }
Vector Vector::operator*(Vector v) {
return Vector(y*v.z - z*v.y, z*v.x - x*v.z, x*v.y - y*v.x);
}
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;
}
int main() {
Vector V1(3,4,2), V2(6,3,9);
cout << "V1 = " << V1;
cout << "V2 = " << V2;
cout << "V1 + V2 = " << (V1 + V2);
cout << "Dot Product: " << (V1 ^ V2);
cout << "Cross Product: " << (V1 * V2);
return 0;
}
Đầu ra
V1 = 3i + 4j + 2k V2 = 6i + 3j + 9k V1 + V2 = 9i + 7j + 11k Dot Product: 48 Cross Product: 30i -15j -15k