PageRenderTime 22ms CodeModel.GetById 18ms app.highlight 3ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/ode/ode_source/OPCODE/Ice/IceSegment.h

http://narutortsproject.googlecode.com/
C++ Header | 55 lines | 26 code | 8 blank | 21 comment | 0 complexity | d85bf6dd52ade182b5952ac251a77016 MD5 | raw file
 1///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 2/**
 3 *	Contains code for segments.
 4 *	\file		IceSegment.h
 5 *	\author		Pierre Terdiman
 6 *	\date		April, 4, 2000
 7 */
 8///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 9
10///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11// Include Guard
12#ifndef __ICESEGMENT_H__
13#define __ICESEGMENT_H__
14
15	class ICEMATHS_API Segment
16	{
17		public:
18		//! Constructor
19		inline_					Segment()															{}
20		//! Constructor
21		inline_					Segment(const Point& p0, const Point& p1) : mP0(p0), mP1(p1)		{}
22		//! Copy constructor
23		inline_					Segment(const Segment& seg) : mP0(seg.mP0), mP1(seg.mP1)			{}
24		//! Destructor
25		inline_					~Segment()															{}
26
27		inline_	const	Point&	GetOrigin()						const	{ return mP0;						}
28		inline_			Point	ComputeDirection()				const	{ return mP1 - mP0;					}
29		inline_			void	ComputeDirection(Point& dir)	const	{ dir = mP1 - mP0;					}
30		inline_			float	ComputeLength()					const	{ return mP1.Distance(mP0);			}
31		inline_			float	ComputeSquareLength()			const	{ return mP1.SquareDistance(mP0);	}
32
33		inline_			void	SetOriginDirection(const Point& origin, const Point& direction)
34								{
35									mP0 = mP1 = origin;
36									mP1 += direction;
37								}
38
39		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
40		/**
41		 *	Computes a point on the segment
42		 *	\param		pt	[out] point on segment
43		 *	\param		t	[in] point's parameter [t=0 => pt = mP0, t=1 => pt = mP1]
44		 */
45		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
46		inline_			void	ComputePoint(Point& pt, float t)	const	{	pt = mP0 + t * (mP1 - mP0);		}
47
48						float	SquareDistance(const Point& point, float* t=null)	const;
49		inline_			float	Distance(const Point& point, float* t=null)			const			{ return sqrtf(SquareDistance(point, t));	}
50
51						Point	mP0;		//!< Start of segment
52						Point	mP1;		//!< End of segment
53	};
54
55#endif // __ICESEGMENT_H__