Retrait d'instances de mc"clone"
This commit is contained in:
		
							
								
								
									
										219
									
								
								SQCSim2021/vector3.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								SQCSim2021/vector3.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,219 @@
 | 
			
		||||
#ifndef VECTOR3_H__
 | 
			
		||||
#define VECTOR3_H__
 | 
			
		||||
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <cmath>
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
class Vector3
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	Vector3();
 | 
			
		||||
	Vector3(const T& x, const T& y, const T& z);
 | 
			
		||||
	~Vector3();
 | 
			
		||||
 | 
			
		||||
	T Length() const;
 | 
			
		||||
	void Normalize();
 | 
			
		||||
	void Zero();
 | 
			
		||||
 | 
			
		||||
	T Dot(const Vector3<T>& v) const;
 | 
			
		||||
	Vector3<T> Cross(const Vector3<T>& v) const;
 | 
			
		||||
 | 
			
		||||
	Vector3<T> operator+(const Vector3<T>& v) const;
 | 
			
		||||
	Vector3<T> operator-(const Vector3<T>& v) const;
 | 
			
		||||
	Vector3<T> operator-() const;
 | 
			
		||||
	Vector3<T> operator+(const T& v) const;
 | 
			
		||||
	Vector3<T> operator-(const T& v) const;
 | 
			
		||||
	Vector3<T> operator/(const T& v) const;
 | 
			
		||||
	Vector3<T> operator*(const T& v) const;
 | 
			
		||||
 | 
			
		||||
	Vector3<T>& operator=(const Vector3<T>& v);
 | 
			
		||||
 | 
			
		||||
	Vector3<T>& operator+=(const Vector3<T>& v);
 | 
			
		||||
	Vector3<T>& operator-=(const Vector3<T>& v);
 | 
			
		||||
	Vector3<T>& operator+=(const T& v);
 | 
			
		||||
	Vector3<T>& operator-=(const T& v);
 | 
			
		||||
	Vector3<T>& operator/=(const T& v);
 | 
			
		||||
	Vector3<T>& operator*=(const T& v);
 | 
			
		||||
 | 
			
		||||
	bool operator==(const Vector3<T>& v) const;
 | 
			
		||||
	bool operator!=(const Vector3<T>& v) const;
 | 
			
		||||
 | 
			
		||||
	void Afficher() const;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	T x, y, z;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef Vector3<int> Vector3i;
 | 
			
		||||
typedef Vector3<float> Vector3f;
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
inline std::ostream& operator<<(std::ostream& out, const Vector3<T>& v)
 | 
			
		||||
{
 | 
			
		||||
	out << "[" << v.x << ", " << v.y << ", " << v.z << "]";
 | 
			
		||||
    return out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>::Vector3()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>::Vector3(const T& x, const T& y, const T& z) : x(x), y(y), z(z)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>::~Vector3()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
T Vector3<T>::Length() const
 | 
			
		||||
{
 | 
			
		||||
	return sqrt(x*x + y*y + z*z);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
void Vector3<T>::Normalize()
 | 
			
		||||
{
 | 
			
		||||
	T len = Length();
 | 
			
		||||
	if (len != 0)
 | 
			
		||||
	{
 | 
			
		||||
		x /= len;
 | 
			
		||||
		y /= len;
 | 
			
		||||
		z /= len;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
void Vector3<T>::Zero()
 | 
			
		||||
{
 | 
			
		||||
	x = y = z = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
T Vector3<T>::Dot(const Vector3<T>& v) const
 | 
			
		||||
{
 | 
			
		||||
	return (x * v.x) + (y * v.y) + (z * v.z);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T> Vector3<T>::Cross(const Vector3<T>& v) const
 | 
			
		||||
{
 | 
			
		||||
	return Vector3<T>(
 | 
			
		||||
		y * v.z - v.y * z,
 | 
			
		||||
		z * v.x - v.z * x,
 | 
			
		||||
		x * v.y - v.x * y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T> Vector3<T>::operator+(const Vector3<T>& v) const
 | 
			
		||||
{
 | 
			
		||||
	return Vector3<T>(x + v.x, y + v.y, z + v.z);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T> Vector3<T>::operator-(const Vector3<T>& v) const
 | 
			
		||||
{
 | 
			
		||||
	return Vector3<T>(x - v.x, y - v.y, z - v.z);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T> Vector3<T>::operator-() const
 | 
			
		||||
{
 | 
			
		||||
	return Vector3<T>(-x, -y, -z);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T> Vector3<T>::operator+(const T& v) const
 | 
			
		||||
{
 | 
			
		||||
	return Vector3<T>(x + v, y + v, z + v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T> Vector3<T>::operator-(const T& v) const
 | 
			
		||||
{
 | 
			
		||||
	return Vector3<T>(x - v, y - v, z - v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T> Vector3<T>::operator/(const T& v) const
 | 
			
		||||
{
 | 
			
		||||
	return Vector3<T>(x / v, y / v, z / v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T> Vector3<T>::operator*(const T& v) const
 | 
			
		||||
{
 | 
			
		||||
	return Vector3<T>(x * v, y * v, z * v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>& Vector3<T>::operator=(const Vector3<T>& v)
 | 
			
		||||
{
 | 
			
		||||
	x = v.x;
 | 
			
		||||
	y = v.y;
 | 
			
		||||
	z = v.z;
 | 
			
		||||
	return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>& Vector3<T>::operator+=(const Vector3<T>& v)
 | 
			
		||||
{
 | 
			
		||||
	return (*this = *this + v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>& Vector3<T>::operator-=(const Vector3<T>& v)
 | 
			
		||||
{
 | 
			
		||||
	return (*this = *this - v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>& Vector3<T>::operator+=(const T& v)
 | 
			
		||||
{
 | 
			
		||||
	return (*this = *this + v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>& Vector3<T>::operator-=(const T& v)
 | 
			
		||||
{
 | 
			
		||||
	return (*this = *this - v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>& Vector3<T>::operator/=(const T& v)
 | 
			
		||||
{
 | 
			
		||||
	return (*this = *this / v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
Vector3<T>& Vector3<T>::operator*=(const T& v)
 | 
			
		||||
{
 | 
			
		||||
	return (*this = *this * v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
bool Vector3<T>::operator==(const Vector3<T>& v) const
 | 
			
		||||
{
 | 
			
		||||
	return (x == v.x && y == v.y && z == v.z);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
bool Vector3<T>::operator!=(const Vector3<T>& v) const
 | 
			
		||||
{
 | 
			
		||||
	return !(*this == v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class T>
 | 
			
		||||
void Vector3<T>::Afficher() const
 | 
			
		||||
{
 | 
			
		||||
	std::cout << "[" << x << ", " << y << ", " << z << "]" << std::endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // VECTOR3_H__
 | 
			
		||||
		Reference in New Issue
	
	Block a user