Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ode/ode-0.9/OPCODE/Ice/IceLSS.h @ 216

Last change on this file since 216 was 216, checked in by mathiask, 16 years ago

[Physik] add ode-0.9

File size: 3.9 KB
Line 
1///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2/**
3 *      Contains code for line-swept spheres.
4 *      \file           IceLSS.h
5 *      \author         Pierre Terdiman
6 *      \date           April, 4, 2000
7 */
8///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9
10///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11// Include Guard
12#ifndef __ICELSS_H__
13#define __ICELSS_H__
14
15        class ICEMATHS_API LSS : public Segment
16        {
17                public:
18                //! Constructor
19                inline_                 LSS()                                                                                                                                   {}
20                //! Constructor
21                inline_                 LSS(const Segment& seg, float radius) : Segment(seg), mRadius(radius)   {}
22                //! Destructor
23                inline_                 ~LSS()                                                                                                                                  {}
24
25                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
26                /**
27                 *      Computes an OBB surrounding the LSS.
28                 *      \param          box             [out] the OBB
29                 */
30                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
31                                void    ComputeOBB(OBB& box);
32
33                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
34                /**
35                 *      Tests if a point is contained within the LSS.
36                 *      \param          pt      [in] the point to test
37                 *      \return         true if inside the LSS
38                 *      \warning        point and LSS must be in same space
39                 */
40                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
41                inline_ bool    Contains(const Point& pt)       const   { return SquareDistance(pt) <= mRadius*mRadius; }
42
43                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
44                /**
45                 *      Tests if a sphere is contained within the LSS.
46                 *      \param          sphere  [in] the sphere to test
47                 *      \return         true if inside the LSS
48                 *      \warning        sphere and LSS must be in same space
49                 */
50                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
51                inline_ bool    Contains(const Sphere& sphere)
52                                                {
53                                                        float d = mRadius - sphere.mRadius;
54                                                        if(d>=0.0f)     return SquareDistance(sphere.mCenter) <= d*d;
55                                                        else            return false;
56                                                }
57
58                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
59                /**
60                 *      Tests if an LSS is contained within the LSS.
61                 *      \param          lss             [in] the LSS to test
62                 *      \return         true if inside the LSS
63                 *      \warning        both LSS must be in same space
64                 */
65                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
66                inline_ bool    Contains(const LSS& lss)
67                                                {
68                                                        // We check the LSS contains the two spheres at the start and end of the sweep
69                                                        return Contains(Sphere(lss.mP0, lss.mRadius)) && Contains(Sphere(lss.mP0, lss.mRadius));
70                                                }
71
72                                float   mRadius;        //!< Sphere radius
73        };
74
75#endif // __ICELSS_H__
Note: See TracBrowser for help on using the repository browser.