Branch data Line data Source code
1 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 : :
3 : : Header: FGGroundCallback.cpp
4 : : Author: Mathias Froehlich
5 : : Date started: 05/21/04
6 : :
7 : : ------ Copyright (C) 2004 Mathias Froehlich (Mathias.Froehlich@web.de) -------
8 : :
9 : : This program is free software; you can redistribute it and/or modify it under
10 : : the terms of the GNU Lesser General Public License as published by the Free Software
11 : : Foundation; either version 2 of the License, or (at your option) any later
12 : : version.
13 : :
14 : : This program is distributed in the hope that it will be useful, but WITHOUT
15 : : ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 : : FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
17 : : details.
18 : :
19 : : You should have received a copy of the GNU Lesser General Public License along with
20 : : this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21 : : Place - Suite 330, Boston, MA 02111-1307, USA.
22 : :
23 : : Further information about the GNU Lesser General Public License can also be found on
24 : : the world wide web at http://www.gnu.org.
25 : :
26 : : HISTORY
27 : : -------------------------------------------------------------------------------
28 : : 05/21/00 MF Created
29 : :
30 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31 : : SENTRY
32 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
33 : :
34 : : #include "math/FGColumnVector3.h"
35 : : #include "math/FGLocation.h"
36 : : #include "FGGroundCallback.h"
37 : :
38 : : namespace JSBSim {
39 : :
40 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41 : :
42 : 0 : FGGroundCallback::FGGroundCallback()
43 : : {
44 : 0 : mReferenceRadius = 20925650.0; // Sea level radius
45 : 0 : }
46 : :
47 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48 : :
49 : 1 : FGGroundCallback::FGGroundCallback(double ReferenceRadius)
50 : : {
51 : 1 : mReferenceRadius = ReferenceRadius;
52 : 1 : }
53 : :
54 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
55 : :
56 : 1 : FGGroundCallback::~FGGroundCallback()
57 : : {
58 [ + - ][ # # ]: 1 : }
[ # # ]
59 : :
60 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
61 : :
62 : 0 : double FGGroundCallback::GetAltitude(const FGLocation& loc) const
63 : : {
64 : 0 : return loc.GetRadius() - mReferenceRadius;
65 : : }
66 : :
67 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
68 : :
69 : : double FGGroundCallback::GetAGLevel(double t, const FGLocation& loc,
70 : : FGLocation& contact, FGColumnVector3& normal,
71 : 54006 : FGColumnVector3& vel) const
72 : : {
73 : : vel = FGColumnVector3(0.0, 0.0, 0.0);
74 : 54006 : normal = FGColumnVector3(loc).Normalize();
75 : 54006 : double loc_radius = loc.GetRadius(); // Get the radius of the given location
76 : : // (e.g. the CG)
77 : 54006 : double agl = loc_radius - mReferenceRadius;
78 : 54006 : contact = (mReferenceRadius/loc_radius)*FGColumnVector3(loc);
79 : 54006 : return agl;
80 : : }
81 : :
82 [ + + ][ + - ]: 12 : }
|