#pragma once
#include <cmath>

class Vector3D
{
public:
	Vector3D();
	Vector3D(float x, float y, float z);
	Vector3D(const Vector3D& other);

	~Vector3D();

	// Accessors
	float GetX() const;
	void SetX(const float x);
	float GetY() const;
	void SetY(const float y);
	float GetZ() const;
	void SetZ(const float z);

	const void Normalize();

	static float DotProduct(const Vector3D v1, const Vector3D v2);
	static float Length(const Vector3D v1, const Vector3D v2);
	static Vector3D CrossProduct(const Vector3D v1, const Vector3D v2);

	Vector3D& operator= (const Vector3D& rhs);

	const Vector3D operator+ (const Vector3D& rhs) const;
	const Vector3D operator/ (const int rhs) const;
	const Vector3D operator/ (const float rhs) const;

private:
	float _x;
	float _y;
	float _z;

	void Copy(const Vector3D& other);
};

