~mulder-nebulon/openracing/PhysX

« back to all changes in this revision

Viewing changes to src/libsimulator/drivers/olethros/geometry.h

  • Committer: Keith Curtis
  • Date: 2009-02-17 02:50:38 UTC
  • Revision ID: keithcu@gmail.com-20090217025038-mx33cu7s4sjhiffo
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// -*- Mode: c++ -*-
 
2
/***************************************************************************
 
3
 
 
4
    file                 : geometry.h
 
5
    created              : Mon Nov 22 0:10:00 CET 2004
 
6
    copyright            : (C) 2004 by Christos Dimitrakakis
 
7
    email                : dimitrak@idiap.ch
 
8
    version              : $Id: geometry.h,v 1.6 2005/04/10 23:37:01 olethros Exp $
 
9
 
 
10
 ***************************************************************************/
 
11
 
 
12
/***************************************************************************
 
13
 *                                                                         *
 
14
 *   This program is free software; you can redistribute it and/or modify  *
 
15
 *   it under the terms of the GNU General Public License as published by  *
 
16
 *   the Free Software Foundation; either version 2 of the License, or     *
 
17
 *   (at your option) any later version.                                   *
 
18
 *                                                                         *
 
19
 ***************************************************************************/
 
20
 
 
21
#ifndef GEOMETRY_H
 
22
#define GEOMETRY_H
 
23
 
 
24
#include <vector>
 
25
 
 
26
class Vector
 
27
{
 
28
 public:
 
29
        enum BoundsCheckingStatus {NO_CHECK_BOUNDS=0, CHECK_BOUNDS=1};
 
30
        float* x;
 
31
        int n;
 
32
        Vector (int N_, enum BoundsCheckingStatus check = NO_CHECK_BOUNDS);
 
33
        Vector (const Vector& rhs);
 
34
        ~Vector ();
 
35
        Vector& operator= (const Vector& rhs);
 
36
        void Resize(int N_);
 
37
        float& operator[] (int index); ///< return element for read-write
 
38
        const float& operator[] (int index) const; ///< return element for read
 
39
        int Size() { return n;}
 
40
private:
 
41
        int maxN;
 
42
        enum BoundsCheckingStatus checking_bounds;
 
43
 
 
44
};
 
45
 
 
46
float DotProd(Vector* A, Vector* B);
 
47
void Sub (Vector* A, Vector* B, Vector* R);
 
48
 
 
49
/// Represent a line as an origin vector and a direction vector.
 
50
class ParametricLine
 
51
{
 
52
 public:
 
53
        Vector* Q; // direction
 
54
        Vector* R; // origin
 
55
        ParametricLine (Vector* A, Vector* B);
 
56
        ~ParametricLine();
 
57
        void PointCoords (float t, Vector* X);
 
58
};
 
59
 
 
60
class ParametricSphere
 
61
{
 
62
 public:
 
63
        Vector* C; //center
 
64
        float r; // radius
 
65
        ParametricSphere(Vector* C, float r);
 
66
        ParametricSphere(int N);
 
67
        ~ParametricSphere();
 
68
};
 
69
 
 
70
 
 
71
Vector* GetNormalToLine(Vector* R);
 
72
float IntersectLineLine(ParametricLine* A, ParametricLine* B);
 
73
float CalculateRadiusPoints (std::vector<Vector> P);
 
74
Vector* IntersectSphereLine(ParametricLine* line, Vector* C, float r);
 
75
 
 
76
void EstimateSphere (std::vector<Vector> P, ParametricSphere* sphere);
 
77
#endif