Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ode/ode-0.9/OPCODE/Ice/IceSegment.cpp @ 216

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

[Physik] add ode-0.9

File size: 1.9 KB
Line 
1///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2/**
3 *      Contains code for segments.
4 *      \file           IceSegment.cpp
5 *      \author         Pierre Terdiman
6 *      \date           April, 4, 2000
7 */
8///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9
10///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11/**
12 *      Segment class.
13 *      A segment is defined by S(t) = mP0 * (1 - t) + mP1 * t, with 0 <= t <= 1
14 *      Alternatively, a segment is S(t) = Origin + t * Direction for 0 <= t <= 1.
15 *      Direction is not necessarily unit length. The end points are Origin = mP0 and Origin + Direction = mP1.
16 *
17 *      \class          Segment
18 *      \author         Pierre Terdiman
19 *      \version        1.0
20 */
21///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
22
23///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
24// Precompiled Header
25#include "Stdafx.h"
26
27using namespace IceMaths;
28
29float Segment::SquareDistance(const Point& point, float* t)     const
30{
31        Point Diff = point - mP0;
32        Point Dir = mP1 - mP0;
33        float fT = Diff | Dir;
34
35        if(fT<=0.0f)
36        {
37                fT = 0.0f;
38        }
39        else
40        {
41                float SqrLen= Dir.SquareMagnitude();
42                if(fT>=SqrLen)
43                {
44                        fT = 1.0f;
45                        Diff -= Dir;
46                }
47                else
48                {
49                        fT /= SqrLen;
50                        Diff -= fT*Dir;
51                }
52        }
53
54        if(t)   *t = fT;
55
56        return Diff.SquareMagnitude();
57}
Note: See TracBrowser for help on using the repository browser.