Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / Roma / VECTOR

.CPP
Скачиваний:
20
Добавлен:
16.04.2013
Размер:
3.88 Кб
Скачать
#include "point.cpp"
class VECTOR : public POINT {
	public :
		VECTOR ( void );
		VECTOR ( REAL x, REAL y, REAL z );
		VECTOR ( VECTOR& Vector );
		VECTOR ( POINT& Point );
		VECTOR ( POINT& From, POINT& To );
		VECTOR ( POINT *From, POINT *To );
		void Set ( REAL x, REAL y, REAL z );
		void Cross ( VECTOR& v );
		REAL Dot ( VECTOR& v );
		REAL Length ( void );
		void Unit ( void );
		void Make ( POINT *From, POINT *To );
		VECTOR& operator = ( POINT& Point );
		void RotateXZ ( REAL Angle );
		void RotateYZ ( REAL Angle );
	};

////////
VECTOR :: VECTOR ( void ){
}

// Create a vector by giving it initial values.                             //

VECTOR :: VECTOR ( REAL x, REAL y, REAL z ){
	v [0] = x;
	v [1] = y;
	v [2] = z;
}

// Create a vector giving it another vectors values.                        //

VECTOR :: VECTOR ( VECTOR& Vector ){
	v [0] = Vector.v [0];
	v [1] = Vector.v [1];
	v [2] = Vector.v [2];
}

// Create a vector by giving it the values of a point.                      //

VECTOR :: VECTOR ( POINT& Point ){
	v [0] = Point.v [0];
	v [1] = Point.v [1];
	v [2] = Point.v [2];
}

// Create a vector from one point to another.                               //

VECTOR :: VECTOR ( POINT& From, POINT& To ){
	v [0] = To.v [0] - From.v [0];
	v [1] = To.v [1] - From.v [1];
	v [2] = To.v [2] - From.v [2];
}

// Create a vector from one point to another.                               //

VECTOR :: VECTOR ( POINT *From, POINT *To ){
	v [0] = To->v [0] - From->v [0];
	v [1] = To->v [1] - From->v [1];
	v [2] = To->v [2] - From->v [2];
}

// Create a vector by giving it initial values.                             //

void VECTOR :: Set ( REAL x, REAL y, REAL z ){
	v [0] = x;
	v [1] = y;
	v [2] = z;
}

// Create a vector from one point to another.                               //
void VECTOR :: Make ( POINT *From, POINT *To ){
	v [0] = To->v [0] - From->v [0];
	v [1] = To->v [1] - From->v [1];
	v [2] = To->v [2] - From->v [2];
}

// Cross multiply two vectors together ( this vector and another ).         //

void VECTOR :: Cross ( VECTOR& u ){
	REAL x, y, z;

	x = ( v [1] * u.v [2] ) - ( v [2] * u.v [1] );
	y = ( v [2] * u.v [0] ) - ( v [0] * u.v [2] );
	z = ( v [0] * u.v [1] ) - ( v [1] * u.v [0] );

	v [0] = x;
	v [1] = y;
	v [2] = z;
}

// Return the dot product of this vector and another.                       //

REAL VECTOR :: Dot ( VECTOR& u )
{
	return ( v [0] * u.v [0] + v [1] * u.v [1] + v [2] * u.v [2] );
}

// Return the length of this vector.                                        //

REAL VECTOR :: Length ( void ){
	return ( sqrt ( v [0] * v [0] + v [1] * v [1] + v [2] * v [2] ) );
}

// Make this vector unit length by dividing through by length.              //

void VECTOR :: Unit ( void ){
	REAL w;

	w = Length ();
	v [0] /= w;
	v [1] /= w;
	v [2] /= w;
}

// Assign a point to a vector                                               //

VECTOR& VECTOR :: operator = ( POINT& Point ){
	v [0] = Point.v [0];
	v [1] = Point.v [1];
	v [2] = Point.v [2];

	return ( *this );
}

// Rotate a vector in the XZ plane.                                         //

void VECTOR :: RotateXZ ( REAL Angle ){
	REAL Radians = RADIAN ( Angle ), x, z, Cos, Sin;

	Cos = cos ( Radians );
	Sin = sin ( Radians );

	/*	Rotate
		explicitly.	*/

	x = v [0] * Cos - v [2] * Sin;
	z = v [0] * Sin + v [2] * Cos;
	v [0] = x;
	v [2] = z;
}

// Rotate a vector in the YZ plane.                                         //

void VECTOR :: RotateYZ ( REAL Angle ){
	REAL Radians = RADIAN ( Angle ), x, y, Cos, Sin;

	Cos = cos ( Radians );
	Sin = sin ( Radians );

	/*	Rotate
		explicitly.	*/

	x = v [1] * Cos - v [2] * Sin;
	y = v [1] * Sin + v [2] * Cos;
	v [1] = x;
	v [2] = y;
}
Соседние файлы в папке Roma