亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vector.h

?? this keik game source
?? H
字號:
//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/vector.h                         $
// $Revision:: 17                                                             $
//   $Author:: Markd                                                          $
//     $Date:: 9/25/98 4:42p                                                  $
//
// Copyright (C) 1997 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/vector.h                              $
// 
// 17    9/25/98 4:42p Markd
// Fixed a local reference return problem in Quat
// 
// 16    9/05/98 6:57p Markd
// took out int type casts in toAngles
// 
// 15    7/21/98 4:15p Jimdose
// Disabled the - (negate) operator since VC++ generates incorrect code for it
// 
// 14    7/08/98 12:43p Markd
// Added quaternion support
// 
// 13    7/02/98 7:57p Markd
// Added MaxValue function
// 
// 12    7/01/98 8:15p Markd
// Added LerpVector
// 
// 11    5/24/98 2:46p Markd
// Made char *'s into const char *'s
// 
// 10    5/20/98 6:38p Jimdose
// Added toPitch
// 
// 9     5/03/98 4:42p Jimdose
// Simplified class to get rid of bugs when passing into functions
// Replaced vec and vector with x, y, and z
// got rid of pointsTo and Init
// got rid of setX, setY, and setZ.  Direct modifaction of x, y, z is permitted
// got rid of x(), y(), z().  Direct inspection of x,y,z is permitted.
// 
// 8     2/06/98 5:50p Jimdose
// Replace getValue and setValue with [] override to allow random access to
// vector parameters.
// Fixed the -(negate) operator
// 
// 7     2/03/98 11:01a Jimdose
// Added pitch, yaw, roll, value inspection and manipulation.
// Added Init which essential resets the vector to the startup state, for when
// the vector isn't initialized or is memset.
// 
// 5     11/20/97 4:36p Jimdose
// Made multiply work for double * vector as well as vector * double.
// 
// 4     10/27/97 4:22p Jimdose
// Added includes for math.h and stdio.h
// 
// 3     10/27/97 2:59p Jimdose
// Removed dependency on quakedef.h
// 
// 2     9/26/97 6:14p Jimdose
// Added standard Ritual headers
//
// DESCRIPTION:
// C++ implemention of a Vector object.  Handles standard vector operations
// such as addition, subtraction, normalization, scaling, dot product,
// cross product, length, and decomposition into Euler angles.
// 

#ifndef __VECTOR_H__
#define __VECTOR_H__

#include "g_local.h"
#include <math.h>
#include <stdio.h>

class EXPORT_FROM_DLL Vector
	{
	public:
		float		x;
		float		y;
		float		z;

								Vector();
								Vector( vec3_t src );
								Vector( double x, double y, double z );
								Vector( const char *text );

					float		*vec3( void );
					float		pitch( void );
					float		yaw( void );
					float		roll( void );
					float		operator[]( int index ) const;
					float&	operator[]( int index );
					void 		copyTo( vec3_t vec );
					void		setPitch( double x );
					void 		setYaw( double y );
					void 		setRoll( double z );
					void 		setXYZ( double x, double y, double z );
					void		operator=( Vector a );
					void		operator=( vec3_t a );
		friend	Vector	operator+( Vector a, Vector b );
					Vector&	operator+=( Vector a );
		friend	Vector	operator-( Vector a, Vector b );
					Vector&	operator-=( Vector a );
		friend	Vector	operator*( Vector a, double b );
		friend	Vector	operator*( double a, Vector b );
		friend	float		operator*( Vector a, Vector b );
					Vector&	operator*=( double a );
		friend	int		operator==(	Vector a, Vector b );
		friend	int		operator!=(	Vector a, Vector b );
					Vector&	CrossProduct( Vector a, Vector b	);
					float		length( void );
					Vector&	normalize( void );
#if 0
//FIXME
// Some kind of compiler bug in VC++ prevents this from working.
// Returns result of ( -x, -y, -x ) for some reason
					Vector&	operator-();
#endif
		friend	Vector	fabs( Vector a );
					float		toYaw( void	);
					float		toPitch( void );
					Vector	toAngles( void );	
					void		AngleVectors( Vector *forward, Vector *right, Vector *up );
		friend	Vector	LerpVector( Vector w1, Vector w2, float t );
		friend	float		MaxValue( Vector a );
	};

inline float Vector::pitch( void )					{ return x; }
inline float Vector::yaw( void )						{ return y; }
inline float Vector::roll( void )					{ return z; }
inline void  Vector::setPitch( double pitch )	{ x = ( float )pitch; }
inline void  Vector::setYaw( double yaw )			{ y = ( float )yaw; }
inline void  Vector::setRoll( double roll )		{ z = ( float )roll; }

inline void Vector::copyTo
	(
	vec3_t vec
	)

	{
	vec[ 0 ] = x;
	vec[ 1 ] = y;
	vec[ 2 ] = z;
	}

inline float Vector::operator[]
	( 
	int index 
	) const

	{
	assert( ( index >= 0 ) && ( index < 3 ) );
	return ( &x )[ index ];
	}

inline float& Vector::operator[]
	( 
	int index 
	)

	{
	assert( ( index >= 0 ) && ( index < 3 ) );
	return ( &x )[ index ];
	}

inline void  Vector::setXYZ
	( 
	double x,
	double y,
	double z 
	) 
	
	{
	this->x = x;
	this->y = y;
	this->z = z;
	}

inline Vector::Vector()
	{
	x = 0;
	y = 0;
	z = 0;
	}

inline Vector::Vector
	( 
	vec3_t src 
	)

	{
	x = src[ 0 ];
	y = src[ 1 ];
	z = src[ 2 ];
	}

inline Vector::Vector
	( 
	double x,
	double y,
	double z
	)

	{
	this->x = x;
	this->y = y;
	this->z = z;
	}

inline Vector::Vector
	(
	const char *text
	)

	{
	if ( text )
		{
		sscanf( text, "%f %f %f", &x, &y, &z );
		}
	else
		{
		x = 0;
		y = 0;
		z = 0;
		}
	}

inline float *Vector::vec3
	( 
	void
	)

	{
	return &x;
	}

inline void Vector::operator=
	(
	Vector a
	)

	{
	x = a.x;
	y = a.y;
	z = a.z;
	}

inline void Vector::operator=
	(
	vec3_t a
	)

	{
	x = a[ 0 ];
	y = a[ 1 ];
	z = a[ 2 ];
	}

inline Vector operator+
	(
	Vector a,
	Vector b
	)

	{
	return Vector( a.x + b.x, a.y + b.y, a.z + b.z );
	}

inline Vector& Vector::operator+=
	(
	Vector a
	)

	{
	x += a.x;
	y += a.y;
	z += a.z;

	return *this;
	}

inline Vector operator-
	(
	Vector a,
	Vector b
	)

	{
	return Vector( a.x - b.x, a.y - b.y, a.z - b.z );
	}

inline Vector& Vector::operator-=
	(
	Vector a
	)

	{
	x -= a.x;
	y -= a.y;
	z -= a.z;

	return *this;
	}

inline Vector operator*
	(
	Vector a,
	double b
	)

	{
	return Vector( a.x * b, a.y * b, a.z * b );
	}

inline Vector operator*
	(
	double a,
	Vector b
	)

	{
	return b * a;
	}

inline float operator*
	(
	Vector a,
	Vector b
	)

	{
	return a.x * b.x + a.y * b.y + a.z * b.z;
	}

inline Vector& Vector::operator*=
	(
	double a
	)

	{
	x *= a;
	y *= a;
	z *= a;

	return *this;
	}

inline int operator==
	(
	Vector a,
	Vector b
	)

	{
	return ( ( a.x == b.x ) && ( a.y == b.y ) && ( a.z == b.z ) );
	}

inline int operator!=
	(
	Vector a,
	Vector b
	)

	{
	return ( ( a.x != b.x ) || ( a.y != b.y ) || ( a.z != b.z ) );
	}

inline Vector& Vector::CrossProduct
	(
	Vector a,
	Vector b
	)

	{
	x = a.y * b.z - a.z * b.y;
	y = a.z * b.x - a.x * b.z;
	z = a.x * b.y - a.y * b.x;

	return *this;
	}

inline float Vector::length
	(
	void
	)
	
	{
	float	length;
	
	length = x * x + y * y + z * z;
	return ( float )sqrt( length );
	}

inline Vector& Vector::normalize
	(
	void
	)

	{
	float	length, ilength;

	length = this->length();
	if ( length )
		{
		ilength = 1 / length;
		x *= ilength;
		y *= ilength;
		z *= ilength;
		}
		
	return *this;
	}

#if 0
//FIXME
// Some kind of compiler bug in VC++ prevents this from working.
// Returns result of ( -x, -y, -x ) for some reason
inline Vector& Vector::operator-()
	{
	return Vector( -x, -y, -z );
	}
#endif

inline Vector fabs
	( 
	Vector a 
	)

	{
	return Vector( fabs( a.x ), fabs( a.y ), fabs( a.z ) );
	}

inline float MaxValue
	( 
	Vector a 
	)

	{
   float maxy;
   float maxz;
   float max;

   max = fabs( a.x );
   maxy = fabs( a.y );
   maxz = fabs( a.z );
   if ( maxy > max )
      max = maxy;
   if ( maxz > max )
      max = maxz;
	return max;
	}

inline float Vector::toYaw
	(
	void
	)
	
	{
	float yaw;
	
	if ( ( y == 0 ) && ( x == 0 ) )
		{
		yaw = 0;
		}
	else
		{
		yaw = ( float )( ( int )( atan2( y, x ) * 180 / M_PI ) );
		if ( yaw < 0 )
			{
			yaw += 360;
			}
		}

	return yaw;
	}

inline float Vector::toPitch
	(
	void
	)

	{
	float	forward;
	float	pitch;
	
	if ( ( x == 0 ) && ( y == 0 ) )
		{
		if ( z > 0 )
			{
			pitch = 90;
			}
		else
			{
			pitch = 270;
			}
		}
	else
		{
		forward = ( float )sqrt( x * x + y * y );
		pitch = ( float )( ( int )( atan2( z, forward ) * 180 / M_PI ) );
		if ( pitch < 0 )
			{
			pitch += 360;
			}
		}

	return pitch;
	}

inline Vector Vector::toAngles
	(
	void
	)

	{
	float	forward;
	float	yaw, pitch;
	
	if ( ( x == 0 ) && ( y == 0 ) )
		{
		yaw = 0;
		if ( z > 0 )
			{
			pitch = 90;
			}
		else
			{
			pitch = 270;
			}
		}
	else
		{
		yaw = atan2( y, x ) * 180 / M_PI;
		if ( yaw < 0 )
			{
			yaw += 360;
			}

		forward = ( float )sqrt( x * x + y * y );
		pitch = atan2( z, forward ) * 180 / M_PI;
		if ( pitch < 0 )
			{
			pitch += 360;
			}
		}

	return Vector( pitch, yaw, 0 );
	}

inline void Vector::AngleVectors
	(
	Vector *forward,
	Vector *right,
	Vector *up
	)

	{
	float				angle;
	static float	sr, sp, sy, cr, cp, cy; // static to help MS compiler fp bugs
	
	angle = yaw() * ( M_PI * 2 / 360 );
	sy = sin( angle );
	cy = cos( angle );

	angle = pitch() * ( M_PI * 2 / 360 );
	sp = sin( angle );
	cp = cos( angle );

	angle = roll() * ( M_PI * 2 / 360 );
	sr = sin( angle );
	cr = cos( angle );

	if ( forward )
		{
		forward->setXYZ( cp * cy, cp * sy, -sp );
		}

	if ( right )
		{
		right->setXYZ( -1 * sr * sp * cy + -1 * cr * -sy, -1 * sr * sp * sy + -1 * cr * cy,	-1 * sr * cp );
		}

	if ( up )
		{
		up->setXYZ( cr * sp * cy + -sr * -sy, cr * sp * sy + -sr * cy, cr * cp );
		}
	}


#define LERP_DELTA 1e-6
inline Vector LerpVector
	(
   Vector w1,
   Vector w2,
   float t
	)
   {
	double	omega, cosom, sinom, scale0, scale1;

	w1.normalize();
	w2.normalize();

	cosom = w1 * w2;
	if ( ( 1.0 - cosom ) > LERP_DELTA )
		{
		omega = acos( cosom );
		sinom = sin( omega );
		scale0 = sin( ( 1.0 - t ) * omega ) / sinom;
		scale1 = sin( t * omega ) / sinom;
		}
	else
		{
		scale0 = 1.0 - t;
		scale1 = t;
		}

	return ( w1 * scale0 + w2 * scale1 );
   }

class EXPORT_FROM_DLL Quat
	{
	public:
		float		x;
		float		y;
		float		z;
      float    w;

								Quat();
								Quat( Vector angles );
								Quat( float scrMatrix[ 3 ][ 3 ] );
								Quat( double x, double y, double z, double w );

					float		*vec4( void );
					float		operator[]( int index ) const;
					float&	operator[]( int index );
					void 		set( double x, double y, double z, double w );
					void		operator=( Quat a );
		friend	Quat	   operator+( Quat a, Quat b );
					Quat&	   operator+=( Quat a );
		friend	Quat	   operator-( Quat a, Quat b );
					Quat&	   operator-=( Quat a );
		friend	Quat	   operator*( Quat a, double b );
		friend	Quat	   operator*( double a, Quat b );
					Quat&	   operator*=( double a );
		friend	int		operator==(	Quat a, Quat b );
		friend	int		operator!=(	Quat a, Quat b );
					float		length( void );
					Quat&	   normalize( void );
					Quat	   operator-();
					Vector   toAngles( void );	
	};

inline float Quat::operator[]
	( 
	int index 
	) const

	{
	assert( ( index >= 0 ) && ( index < 4 ) );
	return ( &x )[ index ];
	}

inline float& Quat::operator[]
	( 
	int index 
	)

	{
	assert( ( index >= 0 ) && ( index < 4 ) );
	return ( &x )[ index ];
	}

inline float *Quat::vec4
	( 
	void
	)

	{
	return &x;
	}

inline void  Quat::set
	( 
	double x,
	double y,
	double z,
   double w
	) 
	
	{
	this->x = x;
	this->y = y;
	this->z = z;
	this->w = w;
	}

inline Quat::Quat()
	{
	x = 0;
	y = 0;
	z = 0;
   w = 0;
	}

inline Quat::Quat
	( 
   Vector Angles
	)

	{
   EulerToQuat( Angles.vec3(), this->vec4() );
	}

inline Quat::Quat
	( 
   float srcMatrix[ 3 ][ 3 ]
	)

	{
   MatToQuat( srcMatrix, this->vec4() );
	}

inline Quat::Quat
	( 
	double x,
	double y,
	double z,
   double w
	)

	{
	this->x = x;
	this->y = y;
	this->z = z;
	this->w = w;
	}

inline void Quat::operator=
	(
	Quat a
	)

	{
	x = a.x;
	y = a.y;
	z = a.z;
	w = a.w;
	}

inline Quat operator+
	(
	Quat a,
	Quat b
	)

	{
	return Quat( a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w );
	}

inline Quat& Quat::operator+=
	(
	Quat a
	)

	{
	x += a.x;
	y += a.y;
	z += a.z;
	w += a.w;

	return *this;
	}

inline Quat operator-
	(
	Quat a,
	Quat b
	)

	{
	return Quat( a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w );
	}

inline Quat& Quat::operator-=
	(
	Quat a
	)

	{
	x -= a.x;
	y -= a.y;
	z -= a.z;
	w -= a.w;

	return *this;
	}

inline Quat operator*
	(
	Quat a,
	double b
	)

	{
	return Quat( a.x * b, a.y * b, a.z * b, a.w * b );
	}

inline Quat operator*
	(
	double a,
	Quat b
	)

	{
	return b * a;
	}

inline Quat& Quat::operator*=
	(
	double a
	)

	{
	x *= a;
	y *= a;
	z *= a;
	w *= a;

	return *this;
	}

inline int operator==
	(
	Quat a,
	Quat b
	)

	{
	return ( ( a.x == b.x ) && ( a.y == b.y ) && ( a.z == b.z ) && ( a.w == b.w ) );
	}

inline int operator!=
	(
	Quat a,
	Quat b
	)

	{
	return ( ( a.x != b.x ) || ( a.y != b.y ) || ( a.z != b.z ) && ( a.w != b.w ) );
	}

inline float Quat::length
	(
	void
	)
	
	{
	float	length;
	
	length = x * x + y * y + z * z + w * w;
	return ( float )sqrt( length );
	}

inline Quat& Quat::normalize
	(
	void
	)

	{
	float	length, ilength;

	length = this->length();
	if ( length )
		{
		ilength = 1 / length;
		x *= ilength;
		y *= ilength;
		z *= ilength;
		w *= ilength;
		}
		
	return *this;
	}

inline Quat Quat::operator-()
	{
	return Quat( -x, -y, -z, -w );
	}

inline Vector Quat::toAngles
	(
	void
	)

	{
   float m[ 3 ][ 3 ];
   vec3_t angles;

   QuatToMat( this->vec4(), m );
   MatrixToEulerAngles( m, angles );
   return Vector( angles );
	}


#endif /* Vector.h */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品久久| 欧洲av一区二区嗯嗯嗯啊| 男人的j进女人的j一区| 亚洲va中文字幕| 亚洲国产精品久久久久婷婷884 | 日韩一级欧美一级| 欧美裸体一区二区三区| 欧美精品久久99久久在免费线| 欧美午夜电影在线播放| 欧美三级视频在线播放| 欧美丰满少妇xxxbbb| 欧美电影一区二区| 极品少妇xxxx偷拍精品少妇| 亚洲精品国产无套在线观| **性色生活片久久毛片| 自拍视频在线观看一区二区| 亚洲日本欧美天堂| 亚洲综合偷拍欧美一区色| 亚洲国产精品影院| 日韩成人精品视频| 国内精品伊人久久久久影院对白| 精品无人码麻豆乱码1区2区| 国产成人免费在线视频| 成人激情av网| 精品婷婷伊人一区三区三| 91精品国产美女浴室洗澡无遮挡| 91精品国模一区二区三区| 欧美白人最猛性xxxxx69交| 久久精品人人爽人人爽| ...中文天堂在线一区| 亚洲va欧美va人人爽午夜| 久久91精品国产91久久小草 | 欧美在线不卡视频| 欧美一区二区精品在线| 久久久久久一二三区| 国产精品久久久久久户外露出| 夜夜爽夜夜爽精品视频| 日韩av电影免费观看高清完整版在线观看| 美女网站色91| 丁香激情综合国产| 色系网站成人免费| 717成人午夜免费福利电影| 久久久精品2019中文字幕之3| 亚洲欧洲成人av每日更新| 亚洲v精品v日韩v欧美v专区| 久久www免费人成看片高清| 风流少妇一区二区| 欧美综合一区二区三区| 精品久久久久久久久久久久久久久久久| 国产亚洲成年网址在线观看| 亚洲最快最全在线视频| 韩国v欧美v日本v亚洲v| 色婷婷激情综合| 亚洲精品在线一区二区| 一区二区三区中文字幕精品精品 | 久久国产日韩欧美精品| 91小视频在线观看| 亚洲午夜激情网站| 欧美三级日韩三级国产三级| 精品对白一区国产伦| 亚洲资源中文字幕| 国产成人鲁色资源国产91色综| 欧美色大人视频| 亚洲欧洲美洲综合色网| 国产麻豆精品95视频| 欧美精品三级日韩久久| 国产精品九色蝌蚪自拍| 久久精品国产免费看久久精品| 色系网站成人免费| 国产精品天干天干在线综合| 日本欧美肥老太交大片| 日本久久一区二区三区| 国产日产欧产精品推荐色| 日本视频免费一区| 在线观看国产日韩| 中文字幕永久在线不卡| 国产精品88av| 日韩一区二区三区在线| 亚洲bt欧美bt精品777| youjizz久久| 久久久噜噜噜久久中文字幕色伊伊| 日本一区中文字幕| 色婷婷精品久久二区二区蜜臀av| 国产日韩欧美麻豆| 国内精品久久久久影院一蜜桃| 欧美一区二区三区在线电影| 亚洲第一成人在线| 色94色欧美sute亚洲线路一ni| 国产精品久久久久久久久晋中| 国产激情视频一区二区在线观看 | 色综合久久中文综合久久牛| 国产欧美久久久精品影院| 麻豆91在线观看| 91精品国产丝袜白色高跟鞋| 一区二区免费在线| 97精品久久久久中文字幕| 欧美经典三级视频一区二区三区| 国产永久精品大片wwwapp| 精品福利在线导航| 韩国精品在线观看| 久久午夜免费电影| 国产盗摄精品一区二区三区在线| 精品福利在线导航| 国产精品综合久久| 中文字幕二三区不卡| 成人国产精品视频| 国产精品久久久久久福利一牛影视 | 国产性天天综合网| 国产v日产∨综合v精品视频| 国产人伦精品一区二区| 成人一级黄色片| 中文字幕视频一区二区三区久| 99精品国产91久久久久久 | 国产九色精品成人porny | 欧美日韩国产影片| 亚洲观看高清完整版在线观看| 欧洲国产伦久久久久久久| 亚洲福利一区二区三区| 在线综合+亚洲+欧美中文字幕| 日韩精品国产精品| 日韩欧美高清在线| 国产麻豆欧美日韩一区| 中文字幕一区在线观看视频| 色婷婷激情一区二区三区| 亚洲成av人**亚洲成av**| 日韩欧美一级精品久久| 国产在线精品免费| 亚洲欧洲日韩在线| 欧美日韩一区二区三区高清| 日韩和的一区二区| 精品国产免费久久| 成人国产视频在线观看| 亚洲成人免费电影| 精品sm捆绑视频| 91麻豆.com| 日韩不卡免费视频| 国产欧美一区二区精品婷婷 | 日韩欧美视频一区| 国产激情精品久久久第一区二区| 亚洲国产成人自拍| 欧美日韩一区二区三区视频| 精品午夜久久福利影院| 自拍偷拍亚洲欧美日韩| 91精品国产综合久久久久久| 国产成人自拍高清视频在线免费播放| 日韩毛片精品高清免费| 欧美一区二区三区爱爱| 成人av资源网站| 日韩精品国产精品| 国产精品久久久久一区二区三区共| 欧美午夜在线观看| 国产一区二区三区免费在线观看| 中文字幕制服丝袜成人av| 91麻豆精品国产91久久久| 成人国产精品视频| 老司机精品视频导航| 亚洲欧美在线视频| 欧美成人猛片aaaaaaa| 色婷婷综合久久久中文一区二区| 美女看a上一区| 一区二区三区在线视频免费| 久久综合九色综合欧美98| 欧美中文字幕久久| 从欧美一区二区三区| 免费在线欧美视频| 亚洲精品成人在线| 久久久久久影视| 欧美一二三在线| 日本韩国一区二区三区| 国产福利电影一区二区三区| 午夜av电影一区| 一区二区三区在线视频免费| 日本一区二区高清| 精品国产免费人成电影在线观看四季| 欧美伊人久久大香线蕉综合69 | 制服.丝袜.亚洲.另类.中文| 99精品视频一区| 丁香天五香天堂综合| 蜜臀久久久久久久| 亚洲一级二级在线| 专区另类欧美日韩| 日本一区二区高清| 久久影院午夜论| 日韩欧美一级片| 在线不卡免费av| 91污片在线观看| 国产精品自拍一区| 国产精品成人在线观看| 久久精品在这里| 欧美一区二视频| 欧美系列亚洲系列| 在线一区二区视频| 91蜜桃视频在线| www.亚洲国产| 成人激情文学综合网| 国产99久久久国产精品潘金| 国产精品18久久久久久久网站| 国产真实乱偷精品视频免| 蜜臀av国产精品久久久久| 日产国产高清一区二区三区|