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

Лабы / 5 / ROMA / VECTOR

.CPP
Скачиваний:
20
Добавлен:
16.04.2013
Размер:
2.82 Кб
Скачать
#include "point.cpp"
class VECTOR : public POINT {
	public :
		VECTOR ( void );
		VECTOR ( REAL x, REAL y, REAL z );
		VECTOR ( REAL x, REAL y, REAL z ,REAL w);
		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 ){
}

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

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

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

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];
}

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];
}

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

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];
}

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;
}

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

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

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

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

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

	return ( *this );
}

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

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

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

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

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


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