]> git.mxchange.org Git - flightgear.git/commitdiff
Updates by Christian Mayer.
authorcurt <curt>
Wed, 20 Oct 1999 22:19:07 +0000 (22:19 +0000)
committercurt <curt>
Wed, 20 Oct 1999 22:19:07 +0000 (22:19 +0000)
27 files changed:
src/WeatherCM/FGAirPressureItem.cpp
src/WeatherCM/FGAirPressureItem.h
src/WeatherCM/FGCloud.h
src/WeatherCM/FGCloudItem.cpp
src/WeatherCM/FGCloudItem.h
src/WeatherCM/FGGlobalWeatherDatabase.cpp
src/WeatherCM/FGGlobalWeatherDatabase.h
src/WeatherCM/FGLocalWeatherDatabase.cpp
src/WeatherCM/FGLocalWeatherDatabase.h
src/WeatherCM/FGMicroWeather.cpp
src/WeatherCM/FGMicroWeather.h
src/WeatherCM/FGPhysicalProperties.cpp
src/WeatherCM/FGPhysicalProperties.h
src/WeatherCM/FGPhysicalProperty.cpp
src/WeatherCM/FGPhysicalProperty.h
src/WeatherCM/FGSnowRain.h
src/WeatherCM/FGTemperatureItem.h
src/WeatherCM/FGTurbulenceItem.cpp
src/WeatherCM/FGTurbulenceItem.h
src/WeatherCM/FGVaporPressureItem.h
src/WeatherCM/FGVoronoi.cpp
src/WeatherCM/FGVoronoi.h
src/WeatherCM/FGWeatherDefs.h
src/WeatherCM/FGWeatherFeature.h
src/WeatherCM/FGWeatherUtils.h
src/WeatherCM/FGWindItem.cpp
src/WeatherCM/FGWindItem.h

index 916f36f4579d5fe97e80896dd25c6620fbf39053..7f981e0bd238f40838fa3a0613608d38fb9c688b 100644 (file)
@@ -5,7 +5,7 @@
  Date started: 28.05.99
  Called by:    FGMicroWeather
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -35,6 +35,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
index 9040b5705f4f6463cbc7b4a2a5f610c8c5e2fa23..3b4d422f096bb6b5e9dabb04b31f7640ab3286be 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -35,6 +35,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -46,8 +48,9 @@ HISTORY
 /****************************************************************************/
 /* INCLUDES                                                                */
 /****************************************************************************/
-#include "FGWeatherDefs.h"
 #include <math.h>
+
+#include "FGWeatherDefs.h"
                
 /****************************************************************************/
 /* DEFINES                                                                 */
@@ -64,31 +67,30 @@ FGAirPressureItem operator-(const FGAirPressureItem& arg);
 class FGAirPressureItem
 {
 private:
-    WeatherPrecition value;
+    WeatherPrecision value;
+
 protected:
 public:
 
-    FGAirPressureItem(const WeatherPrecition& v)    {value = v;}
-    FGAirPressureItem()                                    {value = FG_WEATHER_DEFAULT_AIRPRESSURE;}
-
-    //WeatherPrecition getValue(WeatherPrecition alt) { return value * pow(1.0 - 0.0065*alt/288.0, 5.255); };
+    FGAirPressureItem(const WeatherPrecision v)        {value = v;}
+    FGAirPressureItem()                                {value = FG_WEATHER_DEFAULT_AIRPRESSURE;}
 
-    WeatherPrecition getValue(const WeatherPrecition& alt) const
+    WeatherPrecision getValue(const WeatherPrecision& alt) const
     { 
-       return (WeatherPrecition)((value / 101325.0) *
+       return (WeatherPrecision)((value / 101325.0) *
            (
            1.01325e5 + alt * (-1.19459535223623e1 + alt * (5.50461110007561e-4 + alt * (-1.13574703113648e-8 + alt * 8.61601726143988e-14)))
            ));
     };
    
-    FGAirPressureItem& operator*=(const WeatherPrecition& arg);
+    FGAirPressureItem& operator*=(const WeatherPrecision   arg);
     FGAirPressureItem& operator+=(const FGAirPressureItem& arg);
     FGAirPressureItem& operator-=(const FGAirPressureItem& arg);
 
     friend FGAirPressureItem operator-(const FGAirPressureItem& arg);
 };
 
-inline FGAirPressureItem& FGAirPressureItem::operator*= (const WeatherPrecition& arg)
+inline FGAirPressureItem& FGAirPressureItem::operator*= (const WeatherPrecision arg)
 {
   value *= arg;
   return *this;
index 29f39b36cfc63dedab70ded21f89b160e2722b1a..2995e08929a0e57ea3b8373e15f7ba8b397093af 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -34,6 +34,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
index 7626fd4a4215fb51ff33fa04851d98c91a422a06..d3d74e915f3588774b2a1358fe15c5086ffda486 100644 (file)
@@ -5,7 +5,7 @@
  Date started: 28.05.99
  Called by:    FGMicroWeather
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -36,6 +36,8 @@ HISTORY
 09.10.1999 Christian Mayer     changed CloudItem on Durks request
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
index 8ef3c1a9bbcd80e2f21a7054048e67e1a9b9ffb8..652ddccd743eeb54be6575f31ddc229afaf81729 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -25,7 +25,7 @@
 
 FUNCTIONAL DESCRIPTION
 ------------------------------------------------------------------------------
-Air pressure item that is stored in the micro weather class
+Cloud item that is stored in the micro weather class
 
 HISTORY
 ------------------------------------------------------------------------------
@@ -35,6 +35,8 @@ HISTORY
 09.10.1999 Christian Mayer     changed CloudItem on Durks request
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -58,17 +60,17 @@ HISTORY
 class FGCloudItem
 {
 private:
-    WeatherPrecition thickness;
-    WeatherPrecition density;
+    WeatherPrecision thickness;
+    WeatherPrecision density;
 
 protected:
 public:
 
-    FGCloudItem(const WeatherPrecition& t, const WeatherPrecition& d)  {thickness = t; density = d;}
-    FGCloudItem()                                                      {thickness = 0.0; density = 0.0;}
+    FGCloudItem(const WeatherPrecision t, const WeatherPrecision d) {thickness = t; density = d;}
+    FGCloudItem()                                                  {thickness = 0.0; density = 0.0;}
 
-    WeatherPrecition getThickness(void) const { return thickness; }
-    WeatherPrecition getDensity  (void) const { return density;   }
+    WeatherPrecision getThickness(void) const { return thickness; }
+    WeatherPrecision getDensity  (void) const { return density;   }
 };
 
 /****************************************************************************/
index 7818e6adf57ebe59bf6111e808905f03b10fef5a..10b9b984a010dc9a63d25e49c4eb34e9c34e2e63 100644 (file)
@@ -5,7 +5,7 @@
  Date started: 28.05.99
  Called by:    main program
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -37,6 +37,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -60,23 +62,28 @@ HISTORY
 /*   |     \      \                If p isn't in the triangle the algoritm */
 /*  x1------q------x2              extrapolates it's value                 */
 /****************************************************************************/
-template<class P, class V>
-V triangle_interpolate(const P& x1, const V& v1, const P& x2, const V& v2, const P& x3, const V& v3, const P& p)
+template<class V>
+V triangle_interpolate(const sgVec2& x1, const V& v1, const sgVec2& x2, const V& v2, const sgVec2& x3, const V& v3, const sgVec2& p)
 {
-    P q;
+    sgVec2 q;
     V q_value;
     
-    q = x1 + (x2 - x1)*( ((x3-x1).x()*(x1-x2).y() - (x1-x2).x()*(x3-x1).y())/((p-x3).x()*(x2-x1).y() - (x2-x1).x()*(p-x3).y()) );
+    //q = x1 + (x2 - x1)*( ((x3-x1).x()*(x1-x2).y() - (x1-x2).x()*(x3-x1).y())/((p-x3).x()*(x2-x1).y() - (x2-x1).x()*(p-x3).y()) );
     
-    q_value = v1 + (v2 - v1) * (x1.distance3D(q) / x1.distance3D(x2));
+    sgSubVec2  (q, x2, x1);
+    sgScaleVec2(q,         (x3[0]-x1[0])*(x1[1]-x2[1]) - (x1[0]-x2[0])*(x3[1]-x1[1])   );
+    sgScaleVec2(q, 1.0 / ( (p [0]-x3[0])*(x2[1]-x1[1]) - (x2[0]-x1[0])*(p [1]-x3[1]) ) );
+    sgAddVec2  (q, x1);
+
+    q_value = v1 + (v2 - v1) * ( sgDistanceVec2(x1, q) / sgDistanceVec2(x1, x2) );
     
-    return q_value + (v3 - q_value) * (q.distance3D(p) / q.distance3D(x3));
+    return q_value + (v3 - q_value) * ( sgDistanceVec2(q, p) / sgDistanceVec2(q, x3));
 }
 
 /****************************************************************************/
 /* Constructor and Destructor                                              */
 /****************************************************************************/
-FGGlobalWeatherDatabase::FGGlobalWeatherDatabase(const FGGlobalWeatherDatabaseStatus& s)
+FGGlobalWeatherDatabase::FGGlobalWeatherDatabase(const FGGlobalWeatherDatabaseStatus s)
 {
     DatabaseStatus = s;        
 }
@@ -89,11 +96,11 @@ FGGlobalWeatherDatabase::~FGGlobalWeatherDatabase()
 /* Get the physical properties on the specified point p                            */
 /* do this by interpolating between the 3 closest points                   */
 /****************************************************************************/
-FGPhysicalProperties FGGlobalWeatherDatabase::get(const Point2D& p) const
+FGPhysicalProperties FGGlobalWeatherDatabase::get(const sgVec2& p) const
 {
-    WeatherPrecition distance[3];              //store the 3 closest distances
+    WeatherPrecision distance[3];              //store the 3 closest distances
     FGPhysicalProperties2DVectorConstIt iterator[3];   //and the coresponding iterators
-    WeatherPrecition d;
+    WeatherPrecision d;
     
     distance[0] = 9.46e15;     //init with a distance that every calculated
     distance[1] = 9.46e15;     //distance is guranteed to be shorter as
@@ -101,7 +108,7 @@ FGPhysicalProperties FGGlobalWeatherDatabase::get(const Point2D& p) const
     
     for (FGPhysicalProperties2DVectorConstIt it=database.begin(); it!=database.end(); it++)
     {  //go through the whole database
-       d = it->p.distance2Dsquared(p);
+       d = sgScalarProductVec2(it->p, p);
        
        if (d<distance[0])
        {
@@ -135,7 +142,7 @@ FGPhysicalProperties FGGlobalWeatherDatabase::get(const Point2D& p) const
 /****************************************************************************/
 /* update the database. Since the last call we had dt seconds              */
 /****************************************************************************/
-void FGGlobalWeatherDatabase::update(const WeatherPrecition& dt)
+void FGGlobalWeatherDatabase::update(const WeatherPrecision dt)
 {
     // I've got nothing to update here (yet...)
 }
@@ -143,11 +150,11 @@ void FGGlobalWeatherDatabase::update(const WeatherPrecition& dt)
 /****************************************************************************/
 /* Add a physical property on the specified point p                        */
 /****************************************************************************/
-void FGGlobalWeatherDatabase::add(const Point2D& p, const FGPhysicalProperties& x)
+void FGGlobalWeatherDatabase::add(const sgVec2& p, const FGPhysicalProperties& x)
 {
     FGPhysicalProperties2D e;
     
-    e.p = p;
+    sgCopyVec2(e.p, p);
     
     e.Wind = x.Wind;   
     e.Turbulence = x.Turbulence;         
@@ -167,11 +174,11 @@ void FGGlobalWeatherDatabase::add(const Point2D& p, const FGPhysicalProperties&
 /* Change the closest physical property to p. If p is further away than            */
 /* tolerance I'm returning false otherwise true                                    */
 /****************************************************************************/
-bool FGGlobalWeatherDatabase::change(const FGPhysicalProperties2D& p, const WeatherPrecition& tolerance)
+bool FGGlobalWeatherDatabase::change(const FGPhysicalProperties2D& p, const WeatherPrecision tolerance)
 {
     for (FGPhysicalProperties2DVectorIt it = database.begin(); it != database.end(); it++)
     {
-       if (it->p.distance3Dsquared(p.p) < (tolerance*tolerance))
+       if (sgScalarProductVec2(it->p, p.p) < (tolerance*tolerance))
        {   //assume that's my point
            (*it) = p;
            return true;
@@ -185,25 +192,25 @@ bool FGGlobalWeatherDatabase::change(const FGPhysicalProperties2D& p, const Weat
 /* Get all, but at least min, stored point in the circle around p with the  */
 /* radius r                                                                */
 /****************************************************************************/
-FGPhysicalProperties2DVector FGGlobalWeatherDatabase::getAll(const Point2D& p, const WeatherPrecition& r, const unsigned int& min)
+FGPhysicalProperties2DVector FGGlobalWeatherDatabase::getAll(const sgVec2& p, const WeatherPrecision r, const unsigned int min)
 {
     FGPhysicalProperties2DVector ret_list;
     
-    if ((DatabaseStatus == FGGlobalWeatherDatabase_only_static)
-       ||(DatabaseStatus == FGGlobalWeatherDatabase_working) )
+    if (  (DatabaseStatus == FGGlobalWeatherDatabase_only_static)
+       ||(DatabaseStatus == FGGlobalWeatherDatabase_working    ) )
     {  //doest it make sense?
        
        FGPhysicalProperties2DVectorIt *it;         //store the closest entries
-       WeatherPrecition *d;
+       WeatherPrecision *d;
        unsigned int act_it = 0;
        int i;
        
        it = new FGPhysicalProperties2DVectorIt[min+1];
-       d = new WeatherPrecition[min+1];
+       d = new WeatherPrecision[min+1];
        
        for (it[0]=database.begin(); it[act_it]!=database.end(); it[act_it]++)
        {       //go through the whole database
-           d[act_it] = it[act_it]->p.distance2Dsquared(p);
+           d[act_it] = sgScalarProductVec2(it[act_it]->p, p);
            
            if (r >= d[act_it])
            {   //add it
@@ -213,7 +220,7 @@ FGPhysicalProperties2DVector FGGlobalWeatherDatabase::getAll(const Point2D& p, c
            {
                if (act_it>0)
                {   //figure out if this distance belongs to the closest ones
-                   WeatherPrecition dummy;
+                   WeatherPrecision dummy;
                    FGPhysicalProperties2DVectorIt dummyIt;
                    
                    for (i = act_it++; i >= 0;)
index e231af2a42b796833f59cdfa5edccdbac014f863..33449b1175ae920feff6767fbd25ff68c9ea21d1 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -37,6 +37,8 @@ HISTORY
 30.06.1999 Christian Mayer     STL portability
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -48,18 +50,27 @@ HISTORY
 /****************************************************************************/
 /* INCLUDES                                                                */
 /****************************************************************************/
-#include "FGPhysicalProperties.h"
-#include "FGPhysicalProperty.h"
-#include "sg.h"
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
 #include <Include/compiler.h>
+
 #include <vector>
 #include STL_IOSTREAM
+
+#include <sg.h>
+
+#include "FGPhysicalProperties.h"
+#include "FGPhysicalProperty.h"
                
 /****************************************************************************/
 /* DEFINES                                                                 */
 /****************************************************************************/
 FG_USING_STD(vector);
+#ifndef FG_HAVE_NATIVE_SGI_COMPILERS
 FG_USING_STD(iostream);
+#endif
 FG_USING_NAMESPACE(std);
 
 enum FGGlobalWeatherDatabaseStatus {
@@ -86,50 +97,63 @@ public:
     /************************************************************************/
     /* Constructor and Destructor                                          */
     /************************************************************************/
-    FGGlobalWeatherDatabase(const FGGlobalWeatherDatabaseStatus& s = FGGlobalWeatherDatabase_not_used);
+    FGGlobalWeatherDatabase(const FGGlobalWeatherDatabaseStatus s = FGGlobalWeatherDatabase_not_used);
     ~FGGlobalWeatherDatabase();
 
     /************************************************************************/
     /* Get the physical properties on the specified point p                */
     /************************************************************************/
-    FGPhysicalProperties get(const Point2D& p) const;
-    FGPhysicalProperties get(const sgVec2& p) const {return get(Point2D(p[0], p[1]));}
-    inline FGPhysicalProperty get(const Point3D& p) const {return FGPhysicalProperty(get(Point2D(p)), p.elev());}
-    inline FGPhysicalProperty get(const sgVec3& p) const {return FGPhysicalProperty(get(Point2D(p[0], p[1])), p[3]);}
+    FGPhysicalProperties get(const sgVec2& p) const; 
+    FGPhysicalProperty   get(const sgVec3& p) const 
+    {
+       sgVec2 temp;
+       sgSetVec2( temp, p[0], p[1] );
+
+       return FGPhysicalProperty( get(temp), p[3] );
+    }
 
     /************************************************************************/
     /* update the database. Since the last call we had dt seconds          */
     /************************************************************************/
-    void update(const WeatherPrecition& dt);
+    void update(const WeatherPrecision dt);
 
     /************************************************************************/
     /* Add a physical property on the specified point p                            */
     /************************************************************************/
-    void add(const Point2D& p, const FGPhysicalProperties& x);
-    inline void add(const FGPhysicalProperties2D& x) {database.push_back(x);}
+    void add(const sgVec2& p, const FGPhysicalProperties& x);
+    void add(const FGPhysicalProperties2D& x) 
+    {
+       database.push_back(x);
+    }
 
     /************************************************************************/
     /* Change the closest physical property to p. If p is further away than */
     /* tolerance I'm returning false otherwise true                        */
     /************************************************************************/
-    bool change(const FGPhysicalProperties2D& p, const WeatherPrecition& tolerance = 0.0000001);
+    bool change(const FGPhysicalProperties2D& p, const WeatherPrecision tolerance = 0.0000001);
 
     /************************************************************************/
     /* Get all stored points in the circle around p with the radius r, but  */
     /* at least min points.                                                */
     /************************************************************************/
-    FGPhysicalProperties2DVector getAll(const Point2D& p, const WeatherPrecition& r, const unsigned int& min = 0);
+    FGPhysicalProperties2DVector getAll(const sgVec2& p, const WeatherPrecision r, const unsigned int min = 0);
+    FGPhysicalProperties2DVector getAll(const sgVec3& p, const WeatherPrecision r, const unsigned int min = 0)
+    {
+       sgVec2 temp;
+       sgSetVec2(temp, p[0], p[1]);
+
+       return getAll(temp, r, min);
+    }
 
     /************************************************************************/
     /* get/set the operating status of the database                        */
     /************************************************************************/
-    FGGlobalWeatherDatabaseStatus getDatabaseStatus(void) const { return DatabaseStatus; }
+    FGGlobalWeatherDatabaseStatus getDatabaseStatus(void) const    { return DatabaseStatus; }
     void setDatabaseStatus(const FGGlobalWeatherDatabaseStatus& s) { DatabaseStatus = s; }
 
     /************************************************************************/
     /* Dump the whole database                                             */
     /************************************************************************/
-    //friend istream& operator>> ( istream&, Point3D& );
     friend ostream& operator<< ( ostream& out, const FGGlobalWeatherDatabase& p );
 
 };
@@ -146,4 +170,4 @@ inline ostream& operator<< ( ostream& out, const FGGlobalWeatherDatabase& p )
 }
 
 /****************************************************************************/
-#endif /*FGGlobalWeatherDatabase_H*/
\ No newline at end of file
+#endif /*FGGlobalWeatherDatabase_H*/
index 7d284e011f4b25696971a7494e8097826cd3d7b3..f88e87b7e46e157d8a845d8fa0a2c469c545f4e8 100644 (file)
@@ -5,7 +5,7 @@
  Date started: 28.05.99
  Called by:    main program
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -36,17 +36,21 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
 /* INCLUDES                                                                */
 /****************************************************************************/
+#include <Include/compiler.h>
+#include <Include/fg_constants.h>
+
+#include <Aircraft/aircraft.hxx>
+
 #include "FGLocalWeatherDatabase.h"
 #include "FGVoronoi.h"
-#include "fg_constants.h"
 
-#include <Aircraft/aircraft.hxx>
-#include <Include/fg_constants.h>
 
 /****************************************************************************/
 /********************************** CODE ************************************/
@@ -55,7 +59,7 @@ HISTORY
 /****************************************************************************/
 /* return the index (better: ID) of the area with point p                  */
 /****************************************************************************/
-unsigned int FGLocalWeatherDatabase::AreaWith(const Point2D& p) const
+unsigned int FGLocalWeatherDatabase::AreaWith(const sgVec2& p) const
 {
     
     for (FGMicroWeatherList::size_type i = 0; i != WeatherAreas.size(); i++)
@@ -74,7 +78,7 @@ void FGLocalWeatherDatabase::tileLocalWeather(const FGPhysicalProperties2DVector
 {
     FGVoronoiInputList input;
 
-    for (FGPhysicalProperties2DVector::const_iterator it1 = EntryList.begin(); it1 != EntryList.end(); it1++)
+    for (FGPhysicalProperties2DVectorConstIt it1 = EntryList.begin(); it1 != EntryList.end(); it1++)
        input.push_back(FGVoronoiInput(it1->p, *it1));
 
     FGVoronoiOutputList output = Voronoiate(input);
@@ -89,7 +93,7 @@ void FGLocalWeatherDatabase::tileLocalWeather(const FGPhysicalProperties2DVector
 FGLocalWeatherDatabase* FGLocalWeatherDatabase::theFGLocalWeatherDatabase = 0;
 FGLocalWeatherDatabase *WeatherDatabase;
 
-FGLocalWeatherDatabase::FGLocalWeatherDatabase(const Point3D& posititon, const WeatherPrecition& visibility, const DatabaseWorkingType& type)
+FGLocalWeatherDatabase::FGLocalWeatherDatabase(const sgVec3& posititon, const WeatherPrecision visibility, const DatabaseWorkingType type)
 {
     cerr << "Initializing FGLocalWeatherDatabase\n";
     cerr << "-----------------------------------\n";
@@ -102,10 +106,10 @@ FGLocalWeatherDatabase::FGLocalWeatherDatabase(const Point3D& posititon, const W
     }
 
     setWeatherVisibility(visibility);
-    //WeatherVisibility = visibility;
+
     DatabaseStatus = type;
     global = 0;            //just get sure...
-    last_known_position = posititon;
+    sgCopyVec3(last_known_position, posititon);
 
 
     theFGLocalWeatherDatabase = this;
@@ -127,7 +131,7 @@ FGLocalWeatherDatabase::FGLocalWeatherDatabase(const Point3D& posititon, const W
     case manual:
     case default_mode:
        {
-           vector<Point2D> emptyList;
+           vector<sgVec2Wrap> emptyList;
            WeatherAreas.push_back(FGMicroWeather(FGPhysicalProperties2D(), emptyList));   //in these cases I've only got one tile
        }
        break;
@@ -152,7 +156,7 @@ FGLocalWeatherDatabase::~FGLocalWeatherDatabase()
 /****************************************************************************/
 /* reset the whole database                                                */
 /****************************************************************************/
-void FGLocalWeatherDatabase::reset(const DatabaseWorkingType& type)
+void FGLocalWeatherDatabase::reset(const DatabaseWorkingType type)
 {
     //delete global database if necessary
     if ((DatabaseStatus == use_global) && (type != use_global))
@@ -169,23 +173,23 @@ void FGLocalWeatherDatabase::reset(const DatabaseWorkingType& type)
 /****************************************************************************/
 /* update the database. Since the last call we had dt seconds              */
 /****************************************************************************/
-void FGLocalWeatherDatabase::update(const WeatherPrecition& dt)
+void FGLocalWeatherDatabase::update(const WeatherPrecision dt)
 {
     if (DatabaseStatus==use_global)
        global->update(dt);
 }
 
-void FGLocalWeatherDatabase::update(const Point3D& p) //position has changed
+void FGLocalWeatherDatabase::update(const sgVec3& p) //position has changed
 {
-    last_known_position = p;
+    sgCopyVec3(last_known_position, p);
     //cerr << "****\nupdate inside\n";
     //cerr << "Parameter: " << p << "\n";
     //cerr << "****\n";
 }
 
-void FGLocalWeatherDatabase::update(const Point3D& p, const WeatherPrecition& dt)   //time and/or position has changed
+void FGLocalWeatherDatabase::update(const sgVec3& p, const WeatherPrecision dt)   //time and/or position has changed
 {
-    last_known_position = p;
+    sgCopyVec3(last_known_position, p);
 
     if (DatabaseStatus==use_global)
        global->update(dt);
@@ -194,29 +198,19 @@ void FGLocalWeatherDatabase::update(const Point3D& p, const WeatherPrecition& dt
 /****************************************************************************/
 /* Get the physical properties on the specified point p        out of the database */
 /****************************************************************************/
-FGPhysicalProperty FGLocalWeatherDatabase::get(const Point3D& p) const
+FGPhysicalProperty FGLocalWeatherDatabase::get(const sgVec3& p) const
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
-       return WeatherAreas[a-1].get(p.elev());
+       return WeatherAreas[a-1].get(p[3]);
     else    //point is outside => ask GlobalWeatherDatabase
        return global->get(p);
 }
 
-FGPhysicalProperty FGLocalWeatherDatabase::get(const sgVec3& p) const
-{
-    Point3D temp(p[0], p[1], p[2]);
-
-    unsigned int a = AreaWith(temp);
-    if (a != 0)
-       return WeatherAreas[a-1].get(temp.elev());
-    else    //point is outside => ask GlobalWeatherDatabase
-       return global->get(temp);
-}
-
 FGPhysicalProperties FGLocalWeatherDatabase::get(const sgVec2& p) const
 {
-    Point3D temp(p[0], p[1], 0.0);
+    sgVec3 temp;
+    sgSetVec3(temp, p[0], p[1], 0.0);
 
     unsigned int a = AreaWith(temp);
     if (a != 0)
@@ -225,12 +219,12 @@ FGPhysicalProperties FGLocalWeatherDatabase::get(const sgVec2& p) const
        return global->get(p);
 }
 
-WeatherPrecition FGLocalWeatherDatabase::getAirDensity(const Point3D& p) const
+WeatherPrecision FGLocalWeatherDatabase::getAirDensity(const sgVec3& p) const
 {
     FGPhysicalProperty dummy;
     unsigned int a = AreaWith(p);
     if (a != 0)
-       dummy = WeatherAreas[a-1].get(p.elev());
+       dummy = WeatherAreas[a-1].get(p[3]);
     else    //point is outside => ask GlobalWeatherDatabase
        dummy = global->get(p);
 
@@ -239,82 +233,66 @@ WeatherPrecition FGLocalWeatherDatabase::getAirDensity(const Point3D& p) const
        (dummy.Temperature*FG_WEATHER_DEFAULT_AIRPRESSURE);
 }
 
-WeatherPrecition FGLocalWeatherDatabase::getAirDensity(const sgVec3& p) const
-{
-    Point3D temp(p[0], p[1], p[2]);
-
-    FGPhysicalProperty dummy;
-    unsigned int a = AreaWith(temp);
-    if (a != 0)
-       dummy = WeatherAreas[a-1].get(temp.elev());
-    else    //point is outside => ask GlobalWeatherDatabase
-       dummy = global->get(temp);
-
-    return 
-       (dummy.AirPressure*FG_WEATHER_DEFAULT_AIRDENSITY*FG_WEATHER_DEFAULT_TEMPERATURE) / 
-       (dummy.Temperature*FG_WEATHER_DEFAULT_AIRPRESSURE);
-}
-
 /****************************************************************************/
 /* Add a weather feature at the point p and surrounding area               */
 /****************************************************************************/
-void FGLocalWeatherDatabase::addWind(const WeatherPrecition alt, const Point3D& x, const Point2D& p)
+void FGLocalWeatherDatabase::addWind(const WeatherPrecision alt, const sgVec3& x, const sgVec2& p)
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
        WeatherAreas[a-1].addWind(alt, x);
 }
 
-void FGLocalWeatherDatabase::addTurbulence(const WeatherPrecition alt, const Point3D& x, const Point2D& p)
+void FGLocalWeatherDatabase::addTurbulence(const WeatherPrecision alt, const sgVec3& x, const sgVec2& p)
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
        WeatherAreas[a-1].addTurbulence(alt, x);
 }
 
-void FGLocalWeatherDatabase::addTemperature(const WeatherPrecition alt, const WeatherPrecition x, const Point2D& p)
+void FGLocalWeatherDatabase::addTemperature(const WeatherPrecision alt, const WeatherPrecision x, const sgVec2& p)
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
        WeatherAreas[a-1].addTemperature(alt, x);
 }
 
-void FGLocalWeatherDatabase::addAirPressure(const WeatherPrecition alt, const WeatherPrecition x, const Point2D& p)
+void FGLocalWeatherDatabase::addAirPressure(const WeatherPrecision alt, const WeatherPrecision x, const sgVec2& p)
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
        WeatherAreas[a-1].addAirPressure(alt, x);
 }
 
-void FGLocalWeatherDatabase::addVaporPressure(const WeatherPrecition alt, const WeatherPrecition x, const Point2D& p)
+void FGLocalWeatherDatabase::addVaporPressure(const WeatherPrecision alt, const WeatherPrecision x, const sgVec2& p)
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
        WeatherAreas[a-1].addVaporPressure(alt, x);
 }
 
-void FGLocalWeatherDatabase::addCloud(const WeatherPrecition alt, const FGCloudItem& x, const Point2D& p)
+void FGLocalWeatherDatabase::addCloud(const WeatherPrecision alt, const FGCloudItem& x, const sgVec2& p)
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
        WeatherAreas[a-1].addCloud(alt, x);
 }
 
-void FGLocalWeatherDatabase::setSnowRainIntensity(const WeatherPrecition& x, const Point2D& p)
+void FGLocalWeatherDatabase::setSnowRainIntensity(const WeatherPrecision x, const sgVec2& p)
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
        WeatherAreas[a-1].setSnowRainIntensity(x);
 }
 
-void FGLocalWeatherDatabase::setSnowRainType(const SnowRainType& x, const Point2D& p)
+void FGLocalWeatherDatabase::setSnowRainType(const SnowRainType x, const sgVec2& p)
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
        WeatherAreas[a-1].setSnowRainType(x);
 }
 
-void FGLocalWeatherDatabase::setLightningProbability(const WeatherPrecition& x, const Point2D& p)
+void FGLocalWeatherDatabase::setLightningProbability(const WeatherPrecision x, const sgVec2& p)
 {
     unsigned int a = AreaWith(p);
     if (a != 0)
@@ -370,9 +348,12 @@ void FGLocalWeatherDatabase::setProperties(const FGPhysicalProperties2D& x)
 void fgUpdateWeatherDatabase(void)
 {
     //cerr << "FGLocalWeatherDatabase::update()\n";
-    WeatherDatabase->update( Point3D(
+    sgVec3 position;
+    sgSetVec3(position, 
        current_aircraft.fdm_state->get_Latitude(),
        current_aircraft.fdm_state->get_Longitude(),
-       current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER) );
+       current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER);
+
+    WeatherDatabase->update( position );
 }
 
index aa0c008e0fdfa5a1d7841997ffd8826958964341..dcd6c016bccc078df73deb769f5a1716569b1736 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -36,6 +36,8 @@ HISTORY
 30.06.1999 Christian Mayer     STL portability
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -56,6 +58,7 @@ HISTORY
 #include <XGL/xgl.h>
 
 #include <vector>
+
 #include "sg.h"
 
 #include "FGPhysicalProperties.h"
@@ -79,10 +82,10 @@ private:
 protected:
     FGGlobalWeatherDatabase *global;   //point to the global database
 
-    typedef vector<FGMicroWeather> FGMicroWeatherList;
+    typedef vector<FGMicroWeather>       FGMicroWeatherList;
     typedef FGMicroWeatherList::iterator FGMicroWeatherListIt;
 
-    typedef vector<Point2D> pointVector;
+    typedef vector<sgVec2>      pointVector;
     typedef vector<pointVector> tileVector;
 
     /************************************************************************/
@@ -92,9 +95,22 @@ protected:
 
     FGMicroWeatherList WeatherAreas;
 
-    WeatherPrecition WeatherVisibility;        //how far do I need to simulate the
+    WeatherPrecision WeatherVisibility;        //how far do I need to simulate the
                                        //local weather? Unit: metres
-    Point3D last_known_position;
+    sgVec3 last_known_position;
+
+
+    /************************************************************************/
+    /* return the index of the area with point p                           */
+    /************************************************************************/
+    unsigned int AreaWith(const sgVec2& p) const;
+    unsigned int AreaWith(const sgVec3& p) const
+    {
+       sgVec2 temp;
+       sgSetVec2(temp, p[0], p[1]);
+
+       return AreaWith(temp);
+    }
 
 public:
     static FGLocalWeatherDatabase *theFGLocalWeatherDatabase;  
@@ -108,60 +124,65 @@ public:
        default_mode    //use only default values
     };
 
-protected:
     DatabaseWorkingType DatabaseStatus;
 
-    /************************************************************************/
-    /* return the index of the area with point p                           */
-    /************************************************************************/
-    unsigned int AreaWith(const Point2D& p) const;
-
-public:
     /************************************************************************/
     /* Constructor and Destructor                                          */
     /************************************************************************/
     FGLocalWeatherDatabase(
-       const Point3D& posititon,
-       const WeatherPrecition& visibility = DEFAULT_WEATHER_VISIBILIY,
-       const DatabaseWorkingType& type = PREFERED_WORKING_TYPE);
+       const sgVec3&             posititon,
+       const WeatherPrecision    visibility = DEFAULT_WEATHER_VISIBILIY,
+       const DatabaseWorkingType type       = PREFERED_WORKING_TYPE);
+
+    FGLocalWeatherDatabase(
+       const WeatherPrecision    posititon_lat,
+       const WeatherPrecision    posititon_lon,
+       const WeatherPrecision    posititon_alt,
+       const WeatherPrecision    visibility = DEFAULT_WEATHER_VISIBILIY,
+       const DatabaseWorkingType type       = PREFERED_WORKING_TYPE)
+    {
+       sgVec3 position;
+       sgSetVec3( position, posititon_lat, posititon_lon, posititon_alt );
+
+       FGLocalWeatherDatabase( position, visibility, type );
+    }
+
     ~FGLocalWeatherDatabase();
 
     /************************************************************************/
     /* reset the whole database                                                    */
     /************************************************************************/
-    void reset(const DatabaseWorkingType& type = PREFERED_WORKING_TYPE);
+    void reset(const DatabaseWorkingType type = PREFERED_WORKING_TYPE);
 
     /************************************************************************/
     /* update the database. Since the last call we had dt seconds          */
     /************************************************************************/
-    void update(const WeatherPrecition& dt);                   //time has changed
-    void update(const Point3D& p);                             //position has  changed
-    void update(const Point3D& p, const WeatherPrecition& dt); //time and/or position has changed
+    void update(const WeatherPrecision dt);                    //time has changed
+    void update(const sgVec3& p);                              //position has  changed
+    void update(const sgVec3& p, const WeatherPrecision dt);   //time and/or position has changed
 
     /************************************************************************/
     /* Get the physical properties on the specified point p                */
     /************************************************************************/
-    FGPhysicalProperty get(const Point3D& p) const;
-    FGPhysicalProperty get(const sgVec3& p) const;
     FGPhysicalProperties get(const sgVec2& p) const;
+    FGPhysicalProperty   get(const sgVec3& p) const;
 
-    WeatherPrecition getAirDensity(const Point3D& p) const;
-    WeatherPrecition getAirDensity(const sgVec3& p) const;
+    WeatherPrecision     getAirDensity(const sgVec3& p) const;
     
     /************************************************************************/
     /* Add a weather feature at the point p and surrounding area           */
     /************************************************************************/
 
-    void addWind(const WeatherPrecition alt, const Point3D& x, const Point2D& p);
-    void addTurbulence(const WeatherPrecition alt, const Point3D& x, const Point2D& p);
-    void addTemperature(const WeatherPrecition alt, const WeatherPrecition x, const Point2D& p);
-    void addAirPressure(const WeatherPrecition alt, const WeatherPrecition x, const Point2D& p);
-    void addVaporPressure(const WeatherPrecition alt, const WeatherPrecition x, const Point2D& p);
-    void addCloud(const WeatherPrecition alt, const FGCloudItem& x, const Point2D& p);
+    void addWind         (const WeatherPrecision alt, const sgVec3& x,          const sgVec2& p);
+    void addTurbulence   (const WeatherPrecision alt, const sgVec3& x,          const sgVec2& p);
+    void addTemperature  (const WeatherPrecision alt, const WeatherPrecision x, const sgVec2& p);
+    void addAirPressure  (const WeatherPrecision alt, const WeatherPrecision x, const sgVec2& p);
+    void addVaporPressure(const WeatherPrecision alt, const WeatherPrecision x, const sgVec2& p);
+    void addCloud        (const WeatherPrecision alt, const FGCloudItem& x,     const sgVec2& p);
 
-    void setSnowRainIntensity(const WeatherPrecition& x, const Point2D& p);
-    void setSnowRainType(const SnowRainType& x, const Point2D& p);
-    void setLightningProbability(const WeatherPrecition& x, const Point2D& p);
+    void setSnowRainIntensity   (const WeatherPrecision x, const sgVec2& p);
+    void setSnowRainType        (const SnowRainType x,     const sgVec2& p);
+    void setLightningProbability(const WeatherPrecision x, const sgVec2& p);
 
     void addProperties(const FGPhysicalProperties2D& x);    //add a property
     void setProperties(const FGPhysicalProperties2D& x);    //change a property
@@ -169,8 +190,8 @@ public:
     /************************************************************************/
     /* get/set weather visibility                                          */
     /************************************************************************/
-    void setWeatherVisibility(const WeatherPrecition& visibility);
-    WeatherPrecition getWeatherVisibility(void) const;
+    void             setWeatherVisibility(const WeatherPrecision visibility);
+    WeatherPrecision getWeatherVisibility(void) const;
 };
 
 extern FGLocalWeatherDatabase *WeatherDatabase;
@@ -179,7 +200,7 @@ void fgUpdateWeatherDatabase(void);
 /****************************************************************************/
 /* get/set weather visibility                                              */
 /****************************************************************************/
-void inline FGLocalWeatherDatabase::setWeatherVisibility(const WeatherPrecition& visibility)
+void inline FGLocalWeatherDatabase::setWeatherVisibility(const WeatherPrecision visibility)
 {
     if (visibility >= MINIMUM_WEATHER_VISIBILIY)
        WeatherVisibility = visibility;
@@ -210,7 +231,7 @@ void inline FGLocalWeatherDatabase::setWeatherVisibility(const WeatherPrecition&
 
 }
 
-WeatherPrecition inline FGLocalWeatherDatabase::getWeatherVisibility(void) const
+WeatherPrecision inline FGLocalWeatherDatabase::getWeatherVisibility(void) const
 {
     //cerr << "FGLocalWeatherDatabase::getWeatherVisibility() = " << WeatherVisibility << "\n";
     return WeatherVisibility;
index 6ee133fc36223167f9664d2c3d869993997ab90a..600e72581f56f48453d17dbc8987fb2235cba093 100644 (file)
@@ -5,7 +5,7 @@
  Date started: 28.05.99
  Called by:    FGLocalWeatherDatabase
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -35,13 +35,17 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
 /* INCLUDES                                                                */
 /****************************************************************************/
+#include <Include/compiler.h>
+#include <Include/fg_constants.h>
+
 #include "FGMicroWeather.h"
-#include "fg_constants.h"
 
 /****************************************************************************/
 /********************************** CODE ************************************/
@@ -60,48 +64,48 @@ FGMicroWeather::~FGMicroWeather()
 /* Add the features to the micro weather                                   */
 /* return succss                                                           */
 /****************************************************************************/
-void FGMicroWeather::addWind(const WeatherPrecition alt, const Point3D& x)
+void FGMicroWeather::addWind(const WeatherPrecision alt, const FGWindItem& x)
 {
     StoredWeather.Wind[alt] = x;
 }
 
-void FGMicroWeather::addTurbulence(const WeatherPrecition alt, const Point3D& x)
+void FGMicroWeather::addTurbulence(const WeatherPrecision alt, const FGTurbulenceItem& x)
 {
     StoredWeather.Turbulence[alt] = x;
 }
 
-void FGMicroWeather::addTemperature(const WeatherPrecition alt, const WeatherPrecition x)
+void FGMicroWeather::addTemperature(const WeatherPrecision alt, const WeatherPrecision x)
 {
     StoredWeather.Temperature[alt] = x;
 }
 
-void FGMicroWeather::addAirPressure(const WeatherPrecition alt, const WeatherPrecition x)
+void FGMicroWeather::addAirPressure(const WeatherPrecision alt, const WeatherPrecision x)
 {
     cerr << "Error: caught attempt to add AirPressure which is logical wrong\n";
     //StoredWeather.AirPressure[alt] = x;
 }
 
-void FGMicroWeather::addVaporPressure(const WeatherPrecition alt, const WeatherPrecition x)
+void FGMicroWeather::addVaporPressure(const WeatherPrecision alt, const WeatherPrecision x)
 {
     StoredWeather.VaporPressure[alt] = x;
 }
 
-void FGMicroWeather::addCloud(const WeatherPrecition alt, const FGCloudItem& x)
+void FGMicroWeather::addCloud(const WeatherPrecision alt, const FGCloudItem& x)
 {
     StoredWeather.Clouds[alt] = x;
 }
 
-void FGMicroWeather::setSnowRainIntensity(const WeatherPrecition& x)
+void FGMicroWeather::setSnowRainIntensity(const WeatherPrecision x)
 {
     StoredWeather.SnowRainIntensity = x;
 }
 
-void FGMicroWeather::setSnowRainType(const SnowRainType& x)
+void FGMicroWeather::setSnowRainType(const SnowRainType x)
 {
     StoredWeather.snowRainType = x;
 }
 
-void FGMicroWeather::setLightningProbability(const WeatherPrecition& x)
+void FGMicroWeather::setLightningProbability(const WeatherPrecision x)
 {
     StoredWeather.LightningProbability = x;
 }
@@ -122,7 +126,7 @@ inline const int FG_SIGN(const T& x) {
     return x < T(0) ? -1 : 1;
 }
 
-bool FGMicroWeather::hasPoint(const Point2D& p) const
+bool FGMicroWeather::hasPoint(const sgVec2& p) const
 {
     if (position.size()==0)
        return true;    //no border => this tile is infinite
@@ -132,7 +136,7 @@ bool FGMicroWeather::hasPoint(const Point2D& p) const
 
     //when I'm here I've got at least 2 points
     
-    WeatherPrecition t;
+    WeatherPrecision t;
     signed char side1, side2;
     const_positionListIt it = position.begin();
     const_positionListIt it2 = it; it2++;
@@ -143,19 +147,21 @@ bool FGMicroWeather::hasPoint(const Point2D& p) const
        if (it2 == position.end())
            break;
 
-       if (fabs(it->x() - it2->x()) >= FG_EPSILON)
+       if (fabs(it->p[0] - it2->p[0]) >= FG_EPSILON)
        {
-           t = (it->y() - it2->y()) / (it->x() - it2->x());
-           side1 = FG_SIGN (t * (StoredWeather.p.x() - it2->x()) + it2->y() - StoredWeather.p.y());
-           side2 = FG_SIGN (t * (              p.x() - it2->x()) + it2->y() -               p.y());
+           t = (it->p[1] - it2->p[1]) / (it->p[0] - it2->p[0]);
+
+           side1 = FG_SIGN (t * (StoredWeather.p[0] - it2->p[0]) + it2->p[1] - StoredWeather.p[1]);
+           side2 = FG_SIGN (t * (              p[0] - it2->p[0]) + it2->p[1] -               p[1]);
            if ( side1 != side2 ) 
                return false; //cout << "failed side check\n";
        }
        else
        {
-           t = (it->x() - it2->x()) / (it->y() - it2->y());
-           side1 = FG_SIGN (t * (StoredWeather.p.y() - it2->y()) + it2->x() - StoredWeather.p.x());
-           side2 = FG_SIGN (t * (              p.y() - it2->y()) + it2->x() -               p.x());
+           t = (it->p[0] - it2->p[0]) / (it->p[1] - it2->p[1]);
+
+           side1 = FG_SIGN (t * (StoredWeather.p[1] - it2->p[1]) + it2->p[0] - StoredWeather.p[0]);
+           side2 = FG_SIGN (t * (              p[1] - it2->p[1]) + it2->p[0] -               p[0]);
            if ( side1 != side2 ) 
                return false; //cout << "failed side check\n";
        }
index 3f55c3404d82580297f6e579ab2e58d683d70f6d..18e37e19a5c9768023ea52d416c9e720aa4615ba 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -35,6 +35,8 @@ HISTORY
 30.06.1999 Christian Mayer     STL portability
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -46,22 +48,23 @@ HISTORY
 /****************************************************************************/
 /* INCLUDES                                                                */
 /****************************************************************************/
+#include <set>
+
+#include "sg.h"
+#include "FGWeatherVectorWrap.h"
+
+#include "FGWeatherDefs.h"
+
 //Include all the simulated weather features
 #include "FGCloud.h"
 #include "FGSnowRain.h"
 
 #include "FGAirPressureItem.h"
-#include "FGTemperatureItem.h"
 #include "FGWindItem.h"
 #include "FGTurbulenceItem.h"
-#include "FGVaporPressureItem.h"
 
-#include "FGWeatherDefs.h"
 #include "FGPhysicalProperties.h"
 #include "FGPhysicalProperty.h"
-#include <Voronoi/point2d.h>
-
-#include <set>
 
 /****************************************************************************/
 /* DEFINES                                                                 */
@@ -76,13 +79,12 @@ class FGMicroWeather
 {
 private:
 protected:
-    typedef vector<Point2D> positionList;
-    typedef positionList::iterator positionListIt;
+    typedef vector<sgVec2Wrap>           positionList;
+    typedef positionList::iterator       positionListIt;
     typedef positionList::const_iterator const_positionListIt;
     positionList position;     //the points that specify the outline of the
                                //micro weather (lat/lon)
 
-
     FGPhysicalProperties2D StoredWeather;    //property if nothing is specified
 
 public:
@@ -95,39 +97,45 @@ public:
     /************************************************************************/
     /* Add a feature to the micro weather                                  */
     /************************************************************************/
-    void addWind(const WeatherPrecition alt, const Point3D& x);
-    void addTurbulence(const WeatherPrecition alt, const Point3D& x);
-    void addTemperature(const WeatherPrecition alt, const WeatherPrecition x);
-    void addAirPressure(const WeatherPrecition alt, const WeatherPrecition x);
-    void addVaporPressure(const WeatherPrecition alt, const WeatherPrecition x);
-    void addCloud(const WeatherPrecition alt, const FGCloudItem& x);
+    void addWind         (const WeatherPrecision alt, const FGWindItem&       x);
+    void addTurbulence   (const WeatherPrecision alt, const FGTurbulenceItem& x);
+    void addTemperature  (const WeatherPrecision alt, const WeatherPrecision  x);
+    void addAirPressure  (const WeatherPrecision alt, const WeatherPrecision  x);
+    void addVaporPressure(const WeatherPrecision alt, const WeatherPrecision  x);
+    void addCloud        (const WeatherPrecision alt, const FGCloudItem&      x);
 
-    void setSnowRainIntensity(const WeatherPrecition& x);
-    void setSnowRainType(const SnowRainType& x);
-    void setLightningProbability(const WeatherPrecition& x);
+    void setSnowRainIntensity   (const WeatherPrecision x);
+    void setSnowRainType        (const SnowRainType x);
+    void setLightningProbability(const WeatherPrecision x);
 
-    void setStoredWeather(const FGPhysicalProperties2D& x);
+    void setStoredWeather       (const FGPhysicalProperties2D& x);
 
     /************************************************************************/
     /* get physical properties in the micro weather                        */
     /* NOTE: I don't neet to speify a positon as the properties don't      */
     /*       change in a micro weather                                     */
     /************************************************************************/
-    inline FGPhysicalProperty get(const WeatherPrecition& altitude) const
+    FGPhysicalProperties get(void) const
     {
-       return FGPhysicalProperty(StoredWeather, altitude);
+       return FGPhysicalProperties();
     }
 
-    inline FGPhysicalProperties get(void) const
+    FGPhysicalProperty   get(const WeatherPrecision altitude) const
     {
-       return FGPhysicalProperties();
+       return FGPhysicalProperty(StoredWeather, altitude);
     }
 
     /************************************************************************/
     /* return true if p is inside this micro weather                       */
     /************************************************************************/
-    inline bool hasPoint(const Point3D& p) const { return hasPoint((Point2D) p); } 
-    bool hasPoint(const Point2D& p) const;
+    bool hasPoint(const sgVec2& p) const;
+    bool hasPoint(const sgVec3& p) const 
+    { 
+       sgVec2 temp;
+       sgSetVec2(temp, p[0], p[1]);
+
+       return hasPoint( temp ); 
+    } 
 };
 
 /****************************************************************************/
index 3acb90cb25189f8f7b86719d4cf070bc830c45fb..df3d1c7b254344b4139ffe9e036ed5a5ca473c39 100644 (file)
@@ -5,7 +5,7 @@
  Date started: 28.05.99
  Called by:    main program
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -35,6 +35,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -48,15 +50,17 @@ HISTORY
 /****************************************************************************/
 FGPhysicalProperties::FGPhysicalProperties()
 {
+    sgVec3 zero;
+    sgZeroVec3( zero );
     /************************************************************************/
     /* This standart constructor fills the class with a standard weather    */
     /************************************************************************/
 
-    Wind[-1000.0] = Point3D(0.0);      //no Wind by default
-    Wind[10000.0] = Point3D(0.0);      //no Wind by default
+    Wind[-1000.0] = FGWindItem(zero);              //no Wind by default
+    Wind[10000.0] = FGWindItem(zero);              //no Wind by default
 
-    Turbulence[-1000.0] = Point3D(0.0);        //no Turbulence by default
-    Turbulence[10000.0] = Point3D(0.0);        //no Turbulence by default
+    Turbulence[-1000.0] = FGTurbulenceItem(zero);   //no Turbulence by default
+    Turbulence[10000.0] = FGTurbulenceItem(zero);   //no Turbulence by default
 
     //Initialice with the CINA atmosphere
     Temperature[    0.0] = +15.0 + 273.16;  
@@ -81,7 +85,7 @@ unsigned int FGPhysicalProperties::getNumberOfCloudLayers(void) const
 
 FGCloudItem FGPhysicalProperties::getCloudLayer(unsigned int nr) const
 {
-    map<WeatherPrecition,FGCloudItem>::const_iterator CloudsIt = Clouds.begin();
+    map<WeatherPrecision,FGCloudItem>::const_iterator CloudsIt = Clouds.begin();
 
     //set the iterator to the 'nr'th entry
     for (; nr > 0; nr--)
index 9e62be9e8365c77dad603dd745af366b9b61bde1..3d235f291313d4a3df4e702cf577aa4d91e98daa 100644 (file)
@@ -1,10 +1,10 @@
-/*******-*- Mode: C++ -*-************************************************************
+/*****************************************************************************
 
  Header:       FGPhysicalProperties.h  
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -36,6 +36,8 @@ HISTORY
 30.06.1999 Christian Mayer     STL portability
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -48,124 +50,136 @@ HISTORY
 /* INCLUDES                                                                */
 /****************************************************************************/
 #include <Include/compiler.h>
+
+#include <iostream>
 #include <vector>
 #include <map>
 
-FG_USING_STD(vector);
-FG_USING_STD(map);
-FG_USING_NAMESPACE(std);
+#include "sg.h"
 
-#include <Math/point3d.hxx>
-#include <Voronoi/point2d.h>
 #include "FGWeatherDefs.h"
 
 #include "FGAirPressureItem.h"
+#include "FGWindItem.h"
+#include "FGTurbulenceItem.h"
 
 #include "FGCloudItem.h"
 #include "FGSnowRain.h"
 
+FG_USING_STD(vector);
+FG_USING_STD(map);
+FG_USING_NAMESPACE(std);
+
+/****************************************************************************/
+/* FOREWARD DEFINITIONS                                                            */
+/****************************************************************************/
+class FGPhysicalProperties2D;
+ostream& operator<< ( ostream& out, const FGPhysicalProperties2D& p );
+
 class FGPhysicalProperties
 {
 public:
-    typedef WeatherPrecition Altitude;  
+    typedef WeatherPrecision Altitude;  
 
-    map<Altitude,Point3D> Wind;                            //all Wind vectors
-    map<Altitude,Point3D> Turbulence;              //all Turbulence vectors
-    map<Altitude,WeatherPrecition> Temperature;            //in deg. Kelvin (I *only* accept SI!)
-    FGAirPressureItem AirPressure;                 //in Pascal (I *only* accept SI!)
-    map<Altitude,WeatherPrecition> VaporPressure;   //in Pascal (I *only* accept SI!)
+    map<Altitude,FGWindItem>       Wind;           //all Wind vectors
+    map<Altitude,FGTurbulenceItem> Turbulence;     //all Turbulence vectors
+    map<Altitude,WeatherPrecision> Temperature;            //in deg. Kelvin (I *only* accept SI!)
+    FGAirPressureItem              AirPressure;            //in Pascal (I *only* accept SI!)
+    map<Altitude,WeatherPrecision> VaporPressure;   //in Pascal (I *only* accept SI!)
 
-    map<Altitude,FGCloudItem> Clouds;              //amount of covering and type
+    map<Altitude,FGCloudItem>      Clouds;         //amount of covering and type
 
-    WeatherPrecition SnowRainIntensity;     //this also stands for hail, snow,...
-    SnowRainType     snowRainType;         
-    WeatherPrecition LightningProbability;
+    WeatherPrecision              SnowRainIntensity;     //this also stands for hail, snow,...
+    SnowRainType                  snowRainType;            
+    WeatherPrecision              LightningProbability;
 
     FGPhysicalProperties();   //consructor to fill it with FG standart weather
 
     //return values at specified altitudes
-    Point3D WindAt(const WeatherPrecition& a) const;
-    Point3D TurbulenceAt(const WeatherPrecition& a) const;
-    WeatherPrecition TemperatureAt(const WeatherPrecition& a) const;
-    WeatherPrecition AirPressureAt(const WeatherPrecition& a) const;
-    WeatherPrecition VaporPressureAt(const WeatherPrecition& a) const;
+    void            WindAt         (sgVec3 ret, const WeatherPrecision a) const;
+    void            TurbulenceAt   (sgVec3 ret, const WeatherPrecision a) const;
+    WeatherPrecision TemperatureAt  (const WeatherPrecision a) const;
+    WeatherPrecision AirPressureAt  (const WeatherPrecision a) const;
+    WeatherPrecision VaporPressureAt(const WeatherPrecision a) const;
 
     //for easier access to the cloud stuff:
     unsigned int getNumberOfCloudLayers(void) const;
-    FGCloudItem getCloudLayer(unsigned int nr) const;
+    FGCloudItem  getCloudLayer(unsigned int nr) const;
     
-    FGPhysicalProperties& operator = ( const FGPhysicalProperties& p ); 
-    FGPhysicalProperties& operator *= ( const WeatherPrecition& d ); 
-    FGPhysicalProperties& operator += ( const FGPhysicalProperties& p); 
-    FGPhysicalProperties& operator -= ( const FGPhysicalProperties& p); 
+    FGPhysicalProperties& operator =  ( const FGPhysicalProperties& p ); 
+    FGPhysicalProperties& operator *= ( const WeatherPrecision      d ); 
+    FGPhysicalProperties& operator += ( const FGPhysicalProperties& p ); 
+    FGPhysicalProperties& operator -= ( const FGPhysicalProperties& p ); 
 };
 
-typedef vector<FGPhysicalProperties> FGPhysicalPropertiesVector;
-typedef FGPhysicalPropertiesVector::iterator FGPhysicalPropertiesVectorIt;
-typedef FGPhysicalPropertiesVector::const_iterator FGPhysicalPropertiesVectorConstIt;
-
-class FGPhysicalProperties2D;
-ostream& operator<< ( ostream& out, const FGPhysicalProperties2D& p );
-
 class FGPhysicalProperties2D : public FGPhysicalProperties
 {
 public:
-    Point2D p;     //position of the property (lat/lon)
+    sgVec2 p;      //position of the property (lat/lon)
     friend ostream& operator<< ( ostream& out, const FGPhysicalProperties2D& p );
 
     FGPhysicalProperties2D() {}
 
-    FGPhysicalProperties2D(const FGPhysicalProperties& prop, const Point2D& pos) 
+    FGPhysicalProperties2D(const FGPhysicalProperties& prop, const sgVec2& pos) 
     {
-       Wind = prop.Wind; Turbulence = prop.Turbulence; Temperature = prop.Temperature;
-       AirPressure = prop.AirPressure; VaporPressure = prop.VaporPressure; p = pos;
+       Wind = prop.Wind; 
+       Turbulence = prop.Turbulence;
+       Temperature = prop.Temperature;
+       AirPressure = prop.AirPressure; 
+       VaporPressure = prop.VaporPressure; 
+       sgCopyVec2(p, pos);
     }
 };
 
-typedef vector<FGPhysicalProperties2D> FGPhysicalProperties2DVector;
-typedef FGPhysicalProperties2DVector::iterator FGPhysicalProperties2DVectorIt;
+typedef vector<FGPhysicalProperties>                 FGPhysicalPropertiesVector;
+typedef FGPhysicalPropertiesVector::iterator         FGPhysicalPropertiesVectorIt;
+typedef FGPhysicalPropertiesVector::const_iterator   FGPhysicalPropertiesVectorConstIt;
+
+typedef vector<FGPhysicalProperties2D>               FGPhysicalProperties2DVector;
+typedef FGPhysicalProperties2DVector::iterator       FGPhysicalProperties2DVectorIt;
 typedef FGPhysicalProperties2DVector::const_iterator FGPhysicalProperties2DVectorConstIt;
 
 inline ostream& operator<< ( ostream& out, const FGPhysicalProperties2D& p )
 {
-    typedef map<FGPhysicalProperties::Altitude, Point3D         >::const_iterator vector_iterator;
-    typedef map<FGPhysicalProperties::Altitude, WeatherPrecition>::const_iterator scalar_iterator;
+    typedef map<FGPhysicalProperties::Altitude, FGWindItem      >::const_iterator wind_iterator;
+    typedef map<FGPhysicalProperties::Altitude, FGTurbulenceItem>::const_iterator turbulence_iterator;
+    typedef map<FGPhysicalProperties::Altitude, WeatherPrecision>::const_iterator scalar_iterator;
 
-    out << "Position: " << p.p << endl;
+    out << "Position: (" << p.p[0] << ", " << p.p[1] << ", " << p.p[2] << ")\n";
     
     out << "Stored Wind: ";
-    for (vector_iterator WindIt = p.Wind.begin(); 
-                        WindIt != p.Wind.end(); 
-                        WindIt++)
-       out << "(" << WindIt->first << ") at " << WindIt->second << "m; ";
-    out << endl;
+    for (wind_iterator       WindIt = p.Wind.begin(); 
+                            WindIt != p.Wind.end(); 
+                            WindIt++)
+       out << "(" << WindIt->first << ") at (" << WindIt->second.x() << ", " << WindIt->second.y() << ", " << WindIt->second.z() << ") m; ";
+    out << "\n";
 
     out << "Stored Turbulence: ";
-    for (vector_iterator TurbulenceIt = p.Turbulence.begin(); 
-                        TurbulenceIt != p.Turbulence.end(); 
-                        TurbulenceIt++)
-       out << "(" << TurbulenceIt->first << ") at " << TurbulenceIt->second << "m; ";
-    out << endl;
+    for (turbulence_iterator TurbulenceIt = p.Turbulence.begin(); 
+                            TurbulenceIt != p.Turbulence.end(); 
+                            TurbulenceIt++)
+       out << "(" << TurbulenceIt->first << ") at (" << TurbulenceIt->second.x() << ", " << TurbulenceIt->second.y() << ", " << TurbulenceIt->second.z() << ") m; ";
+    out << "\n";
 
     out << "Stored Temperature: ";
-    for (scalar_iterator TemperatureIt = p.Temperature.begin(); 
-                        TemperatureIt != p.Temperature.end(); 
-                        TemperatureIt++)
+    for (scalar_iterator     TemperatureIt = p.Temperature.begin(); 
+                            TemperatureIt != p.Temperature.end(); 
+                            TemperatureIt++)
        out << TemperatureIt->first << " at " << TemperatureIt->second << "m; ";
-    out << endl;
+    out << "\n";
 
     out << "Stored AirPressure: ";
     out << p.AirPressure.getValue(0) << " at " << 0.0 << "m; ";
-    out << endl;
+    out << "\n";
 
     out << "Stored VaporPressure: ";
-    for (scalar_iterator VaporPressureIt = p.VaporPressure.begin(); 
-                        VaporPressureIt != p.VaporPressure.end(); 
-                        VaporPressureIt++)
+    for (scalar_iterator     VaporPressureIt = p.VaporPressure.begin(); 
+                            VaporPressureIt != p.VaporPressure.end(); 
+                            VaporPressureIt++)
        out << VaporPressureIt->first << " at " << VaporPressureIt->second << "m; ";
-    out << endl;
+    out << "\n";
 
-    return out << endl;
+    return out << "\n";
 }
 
 
@@ -179,31 +193,32 @@ inline FGPhysicalProperties& FGPhysicalProperties::operator = ( const FGPhysical
     return *this;
 }
 
-inline FGPhysicalProperties& FGPhysicalProperties::operator *= ( const WeatherPrecition& d )
+inline FGPhysicalProperties& FGPhysicalProperties::operator *= ( const WeatherPrecision d )
 {
-    typedef map<FGPhysicalProperties::Altitude, Point3D         >::iterator vector_iterator;
-    typedef map<FGPhysicalProperties::Altitude, WeatherPrecition>::iterator scalar_iterator;
-
-    for (vector_iterator WindIt = Wind.begin(); 
-                        WindIt != Wind.end(); 
-                        WindIt++)
-       WindIt->second *= d;
-
-    for (vector_iterator TurbulenceIt = Turbulence.begin(); 
-                         TurbulenceIt != Turbulence.end(); 
-                         TurbulenceIt++)
-       TurbulenceIt->second  *= d;
-
-    for (scalar_iterator TemperatureIt = Temperature.begin(); 
-                         TemperatureIt != Temperature.end(); 
-                         TemperatureIt++)
+    typedef map<FGPhysicalProperties::Altitude, FGWindItem      >::iterator wind_iterator;
+    typedef map<FGPhysicalProperties::Altitude, FGTurbulenceItem>::iterator turbulence_iterator;
+    typedef map<FGPhysicalProperties::Altitude, WeatherPrecision>::iterator scalar_iterator;
+
+    for (wind_iterator       WindIt = Wind.begin(); 
+                            WindIt != Wind.end(); 
+                            WindIt++)
+       WindIt->second*= d;
+
+    for (turbulence_iterator TurbulenceIt = Turbulence.begin(); 
+                            TurbulenceIt != Turbulence.end(); 
+                            TurbulenceIt++)
+       TurbulenceIt->second *= d;
+
+    for (scalar_iterator     TemperatureIt = Temperature.begin(); 
+                             TemperatureIt != Temperature.end(); 
+                             TemperatureIt++)
        TemperatureIt->second *= d;
 
     AirPressure *= d;
 
-    for (scalar_iterator VaporPressureIt = VaporPressure.begin(); 
-                         VaporPressureIt != VaporPressure.end(); 
-                         VaporPressureIt++)
+    for (scalar_iterator     VaporPressureIt = VaporPressure.begin(); 
+                             VaporPressureIt != VaporPressure.end(); 
+                             VaporPressureIt++)
        VaporPressureIt->second *= d;
 
     return *this;
@@ -211,32 +226,33 @@ inline FGPhysicalProperties& FGPhysicalProperties::operator *= ( const WeatherPr
 
 inline FGPhysicalProperties& FGPhysicalProperties::operator += (const FGPhysicalProperties& p)
 {
-    typedef map<FGPhysicalProperties::Altitude, Point3D         >::const_iterator vector_iterator;
-    typedef map<FGPhysicalProperties::Altitude, WeatherPrecition>::const_iterator scalar_iterator;
+    typedef map<FGPhysicalProperties::Altitude, FGWindItem      >::const_iterator wind_iterator;
+    typedef map<FGPhysicalProperties::Altitude, FGTurbulenceItem>::const_iterator turbulence_iterator;
+    typedef map<FGPhysicalProperties::Altitude, WeatherPrecision>::const_iterator scalar_iterator;
 
-    for (vector_iterator WindIt = p.Wind.begin(); 
-                        WindIt != p.Wind.end(); 
-                        WindIt++ )
+    for (wind_iterator       WindIt = p.Wind.begin(); 
+                            WindIt != p.Wind.end(); 
+                            WindIt++)
        if (!Wind.insert(*WindIt).second)           //when it's not inserted => it's already existing
            Wind[WindIt->first] += WindIt->second;  //=> add the value
            
-    for (vector_iterator TurbulenceIt = p.Turbulence.begin(); 
-                        TurbulenceIt != p.Turbulence.end(); 
-                         TurbulenceIt++)
+    for (turbulence_iterator TurbulenceIt = p.Turbulence.begin(); 
+                            TurbulenceIt != p.Turbulence.end(); 
+                            TurbulenceIt++)
        if (!Turbulence.insert(*TurbulenceIt).second)   
            Turbulence[TurbulenceIt->first] += TurbulenceIt->second;
-           
-    for (scalar_iterator TemperatureIt = p.Temperature.begin(); 
-                         TemperatureIt != p.Temperature.end(); 
-                         TemperatureIt++)
+
+    for (scalar_iterator     TemperatureIt = p.Temperature.begin(); 
+                             TemperatureIt != p.Temperature.end(); 
+                             TemperatureIt++)
        if (!Temperature.insert(*TemperatureIt).second) 
            Temperature[TemperatureIt->first] += TemperatureIt->second;
            
     AirPressure += p.AirPressure.getValue(0.0);
            
-    for (scalar_iterator VaporPressureIt = p.VaporPressure.begin(); 
-                         VaporPressureIt != p.VaporPressure.end(); 
-                         VaporPressureIt++)
+    for (scalar_iterator     VaporPressureIt = p.VaporPressure.begin(); 
+                             VaporPressureIt != p.VaporPressure.end(); 
+                             VaporPressureIt++)
        if (!VaporPressure.insert(*VaporPressureIt).second)     
            VaporPressure[VaporPressureIt->first] += VaporPressureIt->second;
 
@@ -245,32 +261,33 @@ inline FGPhysicalProperties& FGPhysicalProperties::operator += (const FGPhysical
 
 inline FGPhysicalProperties& FGPhysicalProperties::operator -= (const FGPhysicalProperties& p)
 {
-    typedef map<FGPhysicalProperties::Altitude, Point3D         >::const_iterator vector_iterator;
-    typedef map<FGPhysicalProperties::Altitude, WeatherPrecition>::const_iterator scalar_iterator;
+    typedef map<FGPhysicalProperties::Altitude, FGWindItem      >::const_iterator wind_iterator;
+    typedef map<FGPhysicalProperties::Altitude, FGTurbulenceItem>::const_iterator turbulence_iterator;
+    typedef map<FGPhysicalProperties::Altitude, WeatherPrecision>::const_iterator scalar_iterator;
 
-    for (vector_iterator WindIt = p.Wind.begin(); 
-                        WindIt != p.Wind.end(); 
-                        WindIt++ )
+    for (wind_iterator       WindIt = p.Wind.begin(); 
+                            WindIt != p.Wind.end(); 
+                            WindIt++)
        if (!Wind.insert( make_pair(WindIt->first, -WindIt->second) ).second)   //when it's not inserted => it's already existing
            Wind[WindIt->first] -= WindIt->second;                              //=> substract the value
            
-    for (vector_iterator TurbulenceIt = p.Turbulence.begin(); 
-                        TurbulenceIt != p.Turbulence.end(); 
-                         TurbulenceIt++)
+    for (turbulence_iterator TurbulenceIt = p.Turbulence.begin(); 
+                            TurbulenceIt != p.Turbulence.end(); 
+                            TurbulenceIt++)
        if (!Turbulence.insert( make_pair(TurbulenceIt->first, -TurbulenceIt->second) ).second) 
            Turbulence[TurbulenceIt->first] -= TurbulenceIt->second;
            
-    for (scalar_iterator TemperatureIt = p.Temperature.begin(); 
-                         TemperatureIt != p.Temperature.end(); 
-                         TemperatureIt++)
+    for (scalar_iterator     TemperatureIt = p.Temperature.begin(); 
+                             TemperatureIt != p.Temperature.end(); 
+                             TemperatureIt++)
        if (!Temperature.insert( make_pair(TemperatureIt->first, -TemperatureIt->second) ).second)      
            Temperature[TemperatureIt->first] -= TemperatureIt->second;
            
     AirPressure -= p.AirPressure.getValue(0.0);
            
-    for (scalar_iterator VaporPressureIt = p.VaporPressure.begin(); 
-                         VaporPressureIt != p.VaporPressure.end(); 
-                         VaporPressureIt++)
+    for (scalar_iterator     VaporPressureIt = p.VaporPressure.begin(); 
+                             VaporPressureIt != p.VaporPressure.end(); 
+                             VaporPressureIt++)
        if (!VaporPressure.insert( make_pair(VaporPressureIt->first, -VaporPressureIt->second) ).second)        
            VaporPressure[VaporPressureIt->first] -= VaporPressureIt->second;
 
@@ -279,33 +296,37 @@ inline FGPhysicalProperties& FGPhysicalProperties::operator -= (const FGPhysical
 }
 
 
-inline Point3D FGPhysicalProperties::WindAt(const WeatherPrecition& a) const
+inline void FGPhysicalProperties::WindAt(sgVec3 ret, const WeatherPrecision a) const
 {
-    typedef map<FGPhysicalProperties::Altitude, Point3D>::const_iterator vector_iterator;
+    typedef map<FGPhysicalProperties::Altitude, FGWindItem>::const_iterator vector_iterator;
 
     vector_iterator it = Wind.lower_bound(a);
     vector_iterator it2 = it;
     it--;
 
     //now I've got it->alt < a < it2->alt so I can interpolate
-    return ( (it2->second - it->second)/(it2->first - it->first) ) * (a - it2->first) + it2->second; 
+    sgSubVec3(ret, *it2->second.getValue(), *it->second.getValue());
+    sgScaleVec3(ret, (a - it2->first) / (it2->first - it->first));
+    sgAddVec3(ret, *it2->second.getValue());
 }
 
-inline Point3D FGPhysicalProperties::TurbulenceAt(const WeatherPrecition& a) const
+inline void FGPhysicalProperties::TurbulenceAt(sgVec3 ret, const WeatherPrecision a) const
 {
-    typedef map<FGPhysicalProperties::Altitude, Point3D>::const_iterator vector_iterator;
+    typedef map<FGPhysicalProperties::Altitude, FGTurbulenceItem>::const_iterator vector_iterator;
 
     vector_iterator it = Turbulence.lower_bound(a);
     vector_iterator it2 = it;
     it--;
 
     //now I've got it->alt < a < it2->alt so I can interpolate
-    return ( (it2->second - it->second)/(it2->first - it->first) ) * (a - it2->first) + it2->second; 
+    sgSubVec3(ret, *it2->second.getValue(), *it->second.getValue());
+    sgScaleVec3(ret, (a - it2->first) / (it2->first - it->first));
+    sgAddVec3(ret, *it2->second.getValue());
 }
 
-inline WeatherPrecition FGPhysicalProperties::TemperatureAt(const WeatherPrecition& a) const
+inline WeatherPrecision FGPhysicalProperties::TemperatureAt(const WeatherPrecision a) const
 {
-    typedef map<FGPhysicalProperties::Altitude, WeatherPrecition>::const_iterator scalar_iterator;
+    typedef map<FGPhysicalProperties::Altitude, WeatherPrecision>::const_iterator scalar_iterator;
 
     scalar_iterator it = Temperature.lower_bound(a);
     scalar_iterator it2 = it;
@@ -315,14 +336,14 @@ inline WeatherPrecition FGPhysicalProperties::TemperatureAt(const WeatherPreciti
     return ( (it2->second - it->second)/(it2->first - it->first) ) * (a - it2->first) + it2->second; 
 }
 
-inline WeatherPrecition FGPhysicalProperties::AirPressureAt(const WeatherPrecition& a) const
+inline WeatherPrecision FGPhysicalProperties::AirPressureAt(const WeatherPrecision a) const
 {
     return AirPressure.getValue(a);
 }
 
-inline WeatherPrecition FGPhysicalProperties::VaporPressureAt(const WeatherPrecition& a) const
+inline WeatherPrecision FGPhysicalProperties::VaporPressureAt(const WeatherPrecision a) const
 {
-    typedef map<FGPhysicalProperties::Altitude, WeatherPrecition>::const_iterator scalar_iterator;
+    typedef map<FGPhysicalProperties::Altitude, WeatherPrecision>::const_iterator scalar_iterator;
 
     scalar_iterator it = VaporPressure.lower_bound(a);
     scalar_iterator it2 = it;
@@ -333,12 +354,12 @@ inline WeatherPrecition FGPhysicalProperties::VaporPressureAt(const WeatherPreci
 }
 
 
-inline FGPhysicalProperties operator * (FGPhysicalProperties a, const WeatherPrecition& b)
+inline FGPhysicalProperties operator * (FGPhysicalProperties a, const WeatherPrecision b)
 {
     return a *= b;
 }
 
-inline FGPhysicalProperties operator * (const WeatherPrecition& b, FGPhysicalProperties a)
+inline FGPhysicalProperties operator * (const WeatherPrecision b, FGPhysicalProperties a)
 {
     return a *= b;
 }
index a28c27caafdd58892ec719af97d8312a866aac4b..54c4a48794e1583083ac519a8353ef4894a334ac 100644 (file)
@@ -5,7 +5,7 @@
  Date started: 28.05.99
  Called by:    main program
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -35,36 +35,34 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
 /* INCLUDES                                                                */
 /****************************************************************************/
-#include "FGPhysicalProperty.h"
 #include "FGWeatherDefs.h"
+#include "FGPhysicalProperty.h"
 
 /****************************************************************************/
 /********************************** CODE ************************************/
 /****************************************************************************/
 FGPhysicalProperty::FGPhysicalProperty()
 {
-    Wind.setx(0.0);            //Wind vector
-    Wind.sety(0.0);            //Wind vector
-    Wind.setz(0.0);            //Wind vector
+    sgZeroVec3(Wind);          //Wind vector
 
-    Turbulence.setx(0.0);      //Turbulence vector
-    Turbulence.sety(0.0);      //Turbulence vector
-    Turbulence.setz(0.0);      //Turbulence vector
+    sgZeroVec3(Turbulence);    //Turbulence vector
 
     Temperature = FG_WEATHER_DEFAULT_TEMPERATURE;      //a nice warm day
     AirPressure = FG_WEATHER_DEFAULT_AIRPRESSURE;      //mbar, that's ground level
     VaporPressure = FG_WEATHER_DEFAULT_VAPORPRESSURE;  //that gives about 50% relatvie humidity
 }
 
-FGPhysicalProperty::FGPhysicalProperty(const FGPhysicalProperties& p, const WeatherPrecition& altitude)
+FGPhysicalProperty::FGPhysicalProperty(const FGPhysicalProperties& p, const WeatherPrecision altitude)
 {
-    Wind = p.WindAt(altitude);
-    Turbulence = p.TurbulenceAt(altitude);
+    p.WindAt(Wind, altitude);
+    p.TurbulenceAt(Turbulence, altitude);
     Temperature = p.TemperatureAt(altitude);
     AirPressure = p.AirPressureAt(altitude);
     VaporPressure = p.VaporPressureAt(altitude);
index 3452dfdf381ca60b86f37277193eea7964625236..e546588035e07ab88584840bda6feb47e3eac015 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -36,6 +36,8 @@ HISTORY
 30.06.1999 Christian Mayer     STL portability
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -48,63 +50,68 @@ HISTORY
 /* INCLUDES                                                                */
 /****************************************************************************/
 #include <Include/compiler.h>
+
 #include <vector>
-FG_USING_STD(vector);
-FG_USING_NAMESPACE(std);
 
-#include <Math/point3d.hxx>
-#include <Voronoi/point2d.h>
+#include "sg.h"
+
 #include "FGWeatherDefs.h"
 #include "FGPhysicalProperties.h"
 
+FG_USING_STD(vector);
+FG_USING_NAMESPACE(std);
+
 /****************************************************************************/
 /* used for output:                                                        */
 /****************************************************************************/
+class FGPhysicalProperty;
+bool operator == (const FGPhysicalProperty& a, const FGPhysicalProperty& b);  // p1 == p2?
+
 class FGPhysicalProperty
 {
 private:
 protected:
 public:
-    Point3D Wind;                      //Wind vector
-    Point3D Turbulence;                        //Turbulence vector
-    WeatherPrecition Temperature;      //in deg. Kelvin (I *only* accept SI!)
-    WeatherPrecition AirPressure;      //in Pascal (I *only* accept SI!)
-    WeatherPrecition VaporPressure;    //in Pascal (I *only* accept SI!)
+    sgVec3           Wind;             //Wind vector
+    sgVec3           Turbulence;       //Turbulence vector
+    WeatherPrecision Temperature;      //in deg. Kelvin (I *only* accept SI!)
+    WeatherPrecision AirPressure;      //in Pascal (I *only* accept SI!)
+    WeatherPrecision VaporPressure;    //in Pascal (I *only* accept SI!)
 
     FGPhysicalProperty();   //consructor to fill it with FG standart weather
-    FGPhysicalProperty(const FGPhysicalProperties& p, const WeatherPrecition& altitude);
+    FGPhysicalProperty(const FGPhysicalProperties& p, const WeatherPrecision altitude);
 
     //allow calculations for easier handling such as interpolating
-    FGPhysicalProperty& operator = ( const FGPhysicalProperty& p );     // assignment of a Point3D
-    FGPhysicalProperty& operator += ( const FGPhysicalProperty& p );    // incrementation by a Point3D
-    FGPhysicalProperty& operator -= ( const FGPhysicalProperty& p );    // decrementation by a Point3D
-    FGPhysicalProperty& operator *= ( const double& d );                // multiplication by a constant
-    FGPhysicalProperty& operator /= ( const double& d );                // division by a constant
-
-    friend FGPhysicalProperty operator - (const FGPhysicalProperty& p);                    // -p1
-    friend bool operator == (const FGPhysicalProperty& a, const FGPhysicalProperty& b);  // p1 == p2?
+    FGPhysicalProperty& operator =  ( const FGPhysicalProperty& p );   // assignment of a FGPhysicalProperty
+    FGPhysicalProperty& operator += ( const FGPhysicalProperty& p );   // incrementation by a FGPhysicalProperty
+    FGPhysicalProperty& operator -= ( const FGPhysicalProperty& p );   // decrementation by a FGPhysicalProperty
+    FGPhysicalProperty& operator *= ( const double d );                        // multiplication by a constant
+    FGPhysicalProperty& operator /= ( const double d );                        // division by a constant
+
+    friend FGPhysicalProperty operator - (const FGPhysicalProperty& p);                        // -p1
+    friend bool operator == (const FGPhysicalProperty& a, const FGPhysicalProperty& b);        // p1 == p2?
 };
 
-typedef vector<FGPhysicalProperty> FGPhysicalPropertyVector;
-typedef FGPhysicalPropertyVector::iterator FGPhysicalPropertyVectorIt;
-typedef FGPhysicalPropertyVector::const_iterator FGPhysicalPropertyVectorConstIt;
-
 class FGPhysicalProperty3D : public FGPhysicalProperty
 {
 private:
 protected:
 public:
-    Point3D p;     //position of the property (lat/lon/alt)
+    sgVec3 p;      //position of the property (lat/lon/alt)
 };
 
-typedef vector<FGPhysicalProperty3D> FGPhysicalProperty3DVector;
-typedef FGPhysicalProperty3DVector::iterator FGPhysicalProperty3DVectorIt;
+typedef vector<FGPhysicalProperty>               FGPhysicalPropertyVector;
+typedef FGPhysicalPropertyVector::iterator       FGPhysicalPropertyVectorIt;
+typedef FGPhysicalPropertyVector::const_iterator FGPhysicalPropertyVectorConstIt;
+
+typedef vector<FGPhysicalProperty3D>               FGPhysicalProperty3DVector;
+typedef FGPhysicalProperty3DVector::iterator       FGPhysicalProperty3DVectorIt;
 typedef FGPhysicalProperty3DVector::const_iterator FGPhysicalProperty3DVectorConstIt;
 
 inline FGPhysicalProperty& FGPhysicalProperty::operator = ( const FGPhysicalProperty& p )
 {
-    Wind = p.Wind
-    Turbulence = p.Turbulence
+    sgCopyVec3(Wind, p.Wind)
+    sgCopyVec3(Turbulence, p.Turbulence)
     Temperature = p.Temperature; 
     AirPressure = p.AirPressure; 
     VaporPressure = p.VaporPressure; 
@@ -113,8 +120,8 @@ inline FGPhysicalProperty& FGPhysicalProperty::operator = ( const FGPhysicalProp
 
 inline FGPhysicalProperty& FGPhysicalProperty::operator += ( const FGPhysicalProperty& p )
 {
-    Wind += p.Wind
-    Turbulence += p.Turbulence
+    sgAddVec3(Wind, p.Wind)
+    sgAddVec3(Turbulence, p.Turbulence)
     Temperature += p.Temperature; 
     AirPressure += p.AirPressure; 
     VaporPressure += p.VaporPressure; 
@@ -123,28 +130,28 @@ inline FGPhysicalProperty& FGPhysicalProperty::operator += ( const FGPhysicalPro
 
 inline FGPhysicalProperty& FGPhysicalProperty::operator -= ( const FGPhysicalProperty& p )
 {
-    Wind -= p.Wind
-    Turbulence -= p.Turbulence
+    sgSubVec3(Wind, p.Wind)
+    sgSubVec3(Turbulence, p.Turbulence)
     Temperature -= p.Temperature; 
     AirPressure -= p.AirPressure; 
     VaporPressure -= p.VaporPressure; 
     return *this;
 }
 
-inline FGPhysicalProperty& FGPhysicalProperty::operator *= ( const double& d )
+inline FGPhysicalProperty& FGPhysicalProperty::operator *= ( const double d )
 {
-    Wind *= d
-    Turbulence *= d
+    sgScaleVec3(Wind, d)
+    sgScaleVec3(Turbulence, d)
     Temperature *= d; 
     AirPressure *= d; 
     VaporPressure *= d; 
     return *this;
 }
 
-inline FGPhysicalProperty& FGPhysicalProperty::operator /= ( const double& d )
+inline FGPhysicalProperty& FGPhysicalProperty::operator /= ( const double d )
 {
-    Wind /= d
-    Turbulence /= d
+    sgScaleVec3(Wind, 1.0 / d)
+    sgScaleVec3(Turbulence, 1.0 / d)
     Temperature /= d; 
     AirPressure /= d; 
     VaporPressure /= d; 
@@ -154,8 +161,8 @@ inline FGPhysicalProperty& FGPhysicalProperty::operator /= ( const double& d )
 inline  FGPhysicalProperty operator - (const FGPhysicalProperty& p)
 {
     FGPhysicalProperty x;
-    x.Wind = -p.Wind
-    x.Turbulence = -p.Turbulence
+    sgNegateVec3(x.Wind, p.Wind)
+    sgNegateVec3(x.Turbulence, p.Turbulence)
     x.Temperature = -p.Temperature; 
     x.AirPressure = -p.AirPressure; 
     x.VaporPressure = -p.VaporPressure; 
@@ -165,8 +172,8 @@ inline  FGPhysicalProperty operator - (const FGPhysicalProperty& p)
 inline bool operator == (const FGPhysicalProperty& a, const FGPhysicalProperty& b)
 {
     return (
-    (a.Wind == b.Wind) &&
-    (a.Turbulence == b.Turbulence) && 
+    sgEqualVec3(a.Wind, b.Wind) &&
+    sgEqualVec3(a.Turbulence, b.Turbulence) && 
     (a.Temperature == b.Temperature) && 
     (a.AirPressure == b.AirPressure) && 
     (a.VaporPressure == b.VaporPressure)); 
@@ -187,21 +194,20 @@ inline FGPhysicalProperty operator - (const FGPhysicalProperty& a, const FGPhysi
     return FGPhysicalProperty(a) -= b;
 }
 
-inline FGPhysicalProperty operator * (const FGPhysicalProperty& a, const WeatherPrecition& b)
+inline FGPhysicalProperty operator * (const FGPhysicalProperty& a, const WeatherPrecision b)
 {
     return FGPhysicalProperty(a) *= b;
 }
 
-inline FGPhysicalProperty operator * (const WeatherPrecition& b, const FGPhysicalProperty& a)
+inline FGPhysicalProperty operator * (const WeatherPrecision b, const FGPhysicalProperty& a)
 {
     return FGPhysicalProperty(a) *= b;
 }
 
-inline FGPhysicalProperty operator / (const FGPhysicalProperty& a, const WeatherPrecition& b)
+inline FGPhysicalProperty operator / (const FGPhysicalProperty& a, const WeatherPrecision b)
 {
     return FGPhysicalProperty(a) *= (1.0/b);
 }
 
-
 /****************************************************************************/
 #endif /*FGPhysicalProperty_H*/
index 6cdd0079d1c66630e2be88287e1d6dd7d60347bc..b1dd713d4d7bb8cb9ba24878b2fba30f40442c2a 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -34,6 +34,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
index 063acbf1fb9b75cc287bd21931ece05140fba88b..8e519902a0c2aa99eed839ce7468fa407263bce1 100644 (file)
@@ -48,7 +48,7 @@ HISTORY
 /****************************************************************************/
 #include "FGWeatherDefs.h"
 
-//for the case that mutable isn't supported:
+// for the case that mutable isn't supported:
 #include "Include/compiler.h"
                
 /****************************************************************************/
@@ -63,20 +63,20 @@ FGTemperatureItem operator-(const FGTemperatureItem& arg);
 class FGTemperatureItem
 {
 private:
-    mutable WeatherPrecition value;
-    WeatherPrecition alt;
+    mutable WeatherPrecision value;
+    WeatherPrecision alt;
 
 protected:
 public:
 
-    FGTemperatureItem(const WeatherPrecition& a, const WeatherPrecition& v) {alt = a; value = v;}
-    FGTemperatureItem(const WeatherPrecition& v)                           {alt = 0.0; value = v;}
-    FGTemperatureItem()                                                            {alt = 0.0; value = (WeatherPrecition)FG_WEATHER_DEFAULT_TEMPERATURE;}
+    FGTemperatureItem(const WeatherPrecision& a, const WeatherPrecision& v) {alt = a; value = v;}
+    FGTemperatureItem(const WeatherPrecision& v)                           {alt = 0.0; value = v;}
+    FGTemperatureItem()                                                            {alt = 0.0; value = (WeatherPrecision)FG_WEATHER_DEFAULT_TEMPERATURE;}
 
-    WeatherPrecition getValue() const { return value; };
-    WeatherPrecition getAlt()   const { return alt;   };  
+    WeatherPrecision getValue() const { return value; };
+    WeatherPrecision getAlt()   const { return alt;   };  
 
-    FGTemperatureItem& operator*= (const WeatherPrecition& arg);
+    FGTemperatureItem& operator*= (const WeatherPrecision& arg);
     FGTemperatureItem& operator+= (const FGTemperatureItem& arg);
     FGTemperatureItem& operator-= (const FGTemperatureItem& arg);
 
@@ -85,7 +85,7 @@ public:
     
 };
 
-inline FGTemperatureItem& FGTemperatureItem::operator*= (const WeatherPrecition& arg)
+inline FGTemperatureItem& FGTemperatureItem::operator*= (const WeatherPrecision& arg)
 {
   value *= arg;
   return *this;
index 8595b4ad16b6d87ed932667731979fc16c02e5fb..0b66fd32ef758001291e118a58671b58f729f85e 100644 (file)
@@ -5,7 +5,7 @@
  Date started: 28.05.99
  Called by:    FGMicroWeather
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -35,6 +35,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -45,8 +47,4 @@ HISTORY
 /****************************************************************************/
 /********************************** CODE ************************************/
 /****************************************************************************/
-bool operator<(const FGTurbulenceItem& arg1, const FGTurbulenceItem& arg2)
-{
-    return arg1.alt < arg2.alt;
-}
 
index 4cc927a6156ee9414f7a33a1949ad038bc2952ed..2b9fa3c7cbba07292709ab9d90c1f7214468e296 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -32,9 +32,10 @@ HISTORY
 28.05.1999 Christian Mayer     Created
 16.06.1999 Durk Talsma         Portability for Linux
 20.06.1999 Christian Mayer     added lots of consts
-10.10.1999 Christian Mayer     added mutable for gcc 2.95 portability
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -46,12 +47,10 @@ HISTORY
 /****************************************************************************/
 /* INCLUDES                                                                */
 /****************************************************************************/
-#include <Math/point3d.hxx>
+#include "sg.h"
+
 #include "FGWeatherDefs.h"
 
-//for the case that mutable isn't supported:
-#include "Include/compiler.h"
-       
 /****************************************************************************/
 /* DEFINES                                                                 */
 /****************************************************************************/
@@ -64,48 +63,52 @@ FGTurbulenceItem operator-(const FGTurbulenceItem& arg);
 class FGTurbulenceItem
 {
 private:
-    mutable Point3D value;
-    WeatherPrecition alt;
+    sgVec3 value;
 
 protected:
 public:
-    FGTurbulenceItem(const WeatherPrecition& a, const Point3D& v)   {alt = a; value = v;}
-    FGTurbulenceItem(const Point3D& v)                             {alt = 0.0; value = v;}
-    FGTurbulenceItem()                                             {alt = 0.0; value = Point3D(0.0);}
+    FGTurbulenceItem(const sgVec3& v)  { sgCopyVec3(value, v);}
+    FGTurbulenceItem()                 { sgZeroVec3(value);   }
+
+    void          getValue(sgVec3 ret) const { sgCopyVec3(ret, value); };
+    const sgVec3* getValue(void)       const { return &value; };
 
-    Point3D         getValue() const { return value; };
-    WeatherPrecition getAlt()   const { return alt; };
+    WeatherPrecision x(void) const { return value[0]; };
+    WeatherPrecision y(void) const { return value[1]; };
+    WeatherPrecision z(void) const { return value[2]; };
 
-    FGTurbulenceItem& operator*= (const WeatherPrecition& arg);
+    FGTurbulenceItem& operator*= (const WeatherPrecision  arg);
     FGTurbulenceItem& operator+= (const FGTurbulenceItem& arg);
     FGTurbulenceItem& operator-= (const FGTurbulenceItem& arg);
 
-    friend bool operator<(const FGTurbulenceItem& arg1, const FGTurbulenceItem& arg2 );
     friend FGTurbulenceItem operator-(const FGTurbulenceItem& arg);
-
 };
 
-inline FGTurbulenceItem& FGTurbulenceItem::operator*= (const WeatherPrecition& arg)
+inline FGTurbulenceItem& FGTurbulenceItem::operator*= (const WeatherPrecision arg)
 {
-  value *= arg;
+  sgScaleVec3(value, arg);
   return *this;
 }
 
 inline FGTurbulenceItem& FGTurbulenceItem::operator+= (const FGTurbulenceItem& arg)
 {
-  value += arg.value;
+  sgAddVec3(value, *arg.getValue());
   return *this;
 }
 
 inline FGTurbulenceItem& FGTurbulenceItem::operator-= (const FGTurbulenceItem& arg)
 {
-  value -= arg.value;
+  sgSubVec3(value, *arg.getValue());
   return *this;
 }
 
 inline FGTurbulenceItem operator-(const FGTurbulenceItem& arg)
 {
-    return FGTurbulenceItem(arg.alt, -arg.value);
+    sgVec3 temp;
+
+    sgNegateVec3(temp, *arg.getValue());
+
+    return FGTurbulenceItem(temp);
 }
 
 /****************************************************************************/
index 1a990e1e9e3b88e447a17a96df905854453f74dd..d9709aafb7490c2d4d95cee38c28b1f674c2e807 100644 (file)
@@ -63,20 +63,20 @@ FGVaporPressureItem operator-(const FGVaporPressureItem& arg);
 class FGVaporPressureItem
 {
 private:
-    mutable WeatherPrecition value;
-    WeatherPrecition alt;
+    mutable WeatherPrecision value;
+    WeatherPrecision alt;
 
 protected:
 public:
 
-    FGVaporPressureItem(const WeatherPrecition& a, const WeatherPrecition& v)  {alt = a; value = v;}
-    FGVaporPressureItem(const WeatherPrecition& v)                             {alt = 0.0; value = v;}
+    FGVaporPressureItem(const WeatherPrecision& a, const WeatherPrecision& v)  {alt = a; value = v;}
+    FGVaporPressureItem(const WeatherPrecision& v)                             {alt = 0.0; value = v;}
     FGVaporPressureItem()                                                      {alt = 0.0; value = FG_WEATHER_DEFAULT_VAPORPRESSURE;}
 
-    WeatherPrecition getValue() const { return value; };
-    WeatherPrecition getAlt()   const { return alt;   };
+    WeatherPrecision getValue() const { return value; };
+    WeatherPrecision getAlt()   const { return alt;   };
 
-    FGVaporPressureItem& operator*= (const WeatherPrecition& arg);
+    FGVaporPressureItem& operator*= (const WeatherPrecision& arg);
     FGVaporPressureItem& operator+= (const FGVaporPressureItem& arg);
     FGVaporPressureItem& operator-= (const FGVaporPressureItem& arg);
 
@@ -85,7 +85,7 @@ public:
 
 };
 
-inline FGVaporPressureItem& FGVaporPressureItem::operator*= (const WeatherPrecition& arg)
+inline FGVaporPressureItem& FGVaporPressureItem::operator*= (const WeatherPrecision& arg)
 {
   value *= arg;
   return *this;
index f645d19fcce9c92085c2db4e0decb31e9a494f0b..903b23f1963e1cfbc5dcac0adb44805de8b7ba35 100644 (file)
@@ -3,9 +3,8 @@
  Module:       FGVoronoi.cpp
  Author:       Christian Mayer
  Date started: 28.05.99
- Called by:    main program
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -38,6 +37,8 @@ HISTORY
 16.06.99   Durk Talsma         Portability for Linux
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -67,12 +68,12 @@ FGVoronoiOutputList Voronoiate(const FGVoronoiInputList& input)
 
     PointList p2ds;
 
-    FGVoronoiInputList::iterator it1;
+    FGVoronoiInputList::const_iterator it1;
 
     //get the points
-    for (it1 = (FGVoronoiInputList::iterator)input.begin(); it1 != input.end(); it1++)
+    for (it1 = input.begin(); it1 != input.end(); it1++)
     {
-       p2ds.push_back(VoronoiPoint(it1->position.x(), it1->position.y()));
+       p2ds.push_back(VoronoiPoint(it1->position[0], it1->position[1]));
     }
 
     cl.clear();        //make sure that it's empty
@@ -104,28 +105,35 @@ FGVoronoiOutputList Voronoiate(const FGVoronoiInputList& input)
        PointList::iterator it3 = it2->boundary.begin();
        
        if (it3->infinity == false)
-           boundary.push_back( *it3 );
+           boundary.push_back( sgVec2Wrap(it3->p) );
        else
        {
-           Point2D direction_vector = *it3;
+           sgVec2 direction_vector;
+           sgCopyVec2(direction_vector, it3->p);
+
            it3++;
-           boundary.push_back( (*it3) + direction_vector);
+           sgAddVec2(direction_vector, it3->p);
+
+           boundary.push_back( direction_vector );
        }
        
        for (; it3 != it2->boundary.end(); it3++)
        {
-           boundary.push_back( *it3 );
+           boundary.push_back( sgVec2Wrap(it3->p) );
            
        }
 
        it3--;
        if (it3->infinity == true)
        {
-           Point2D direction_vector = *it3;
+           sgVec2 direction_vector;
+           sgCopyVec2(direction_vector, it3->p);
+
            it3--;
-           Point2D value = *it3;
+           sgAddVec2(direction_vector, it3->p);
+
            boundary.pop_back();
-           boundary.push_back(value + direction_vector);
+           boundary.push_back(direction_vector);
        }
 
        ret_list.push_back(FGVoronoiOutput(boundary, input[it2->ID].value));
@@ -182,8 +190,8 @@ bool readsites(PointList input)
 
     while(It != input.end())
     {  
-       sites[nsites].coord.x = It->x();
-       sites[nsites].coord.y = It->y();
+       sites[nsites].coord.x = It->p[0];
+       sites[nsites].coord.y = It->p[1];
 
        sites[nsites].sitenbr = nsites;
        sites[nsites].refcnt = 0;
index 178e0efc30851fe01c0c60c131ae95aef80f6db0..c96894ee128b269a62b2e47ae90bf20e20adc5cb 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -39,6 +39,8 @@ HISTORY
 30.06.1999 Christian Mayer     STL portability
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -51,27 +53,32 @@ HISTORY
 /* INCLUDES                                                                */
 /****************************************************************************/
 #include "compiler.h"
+
 #include <vector>
-#include <set>
 
-#include <Voronoi/point2d.h>
+#include "sg.h"
+
+#include "FGWeatherVectorWrap.h"
 #include "FGPhysicalProperties.h"
                
 /****************************************************************************/
 /* DEFINES                                                                 */
 /****************************************************************************/
 FG_USING_STD(vector);
-FG_USING_STD(set);
 FG_USING_NAMESPACE(std);
 
-typedef vector<Point2D>        Point2DList;
+typedef vector<sgVec2Wrap>     Point2DList;
 
 struct FGVoronoiInput
 {
-    Point2D position;
+    sgVec2 position;
     FGPhysicalProperties2D value;
 
-    FGVoronoiInput(const Point2D& p, const FGPhysicalProperties2D& v) { position = p; value = v; }
+    FGVoronoiInput(const sgVec2& p, const FGPhysicalProperties2D& v) 
+    { 
+       sgCopyVec2(position, p); 
+       value = v; 
+    }
 };
 
 struct FGVoronoiOutput
@@ -79,10 +86,14 @@ struct FGVoronoiOutput
     Point2DList boundary;
     FGPhysicalProperties2D value;
 
-    FGVoronoiOutput(const Point2DList& b, const FGPhysicalProperties2D& v) {boundary = b; value = v;};
+    FGVoronoiOutput(const Point2DList& b, const FGPhysicalProperties2D& v) 
+    {
+       boundary = b; 
+       value = v;
+    };
 };
 
-typedef vector<FGVoronoiInput> FGVoronoiInputList;
+typedef vector<FGVoronoiInput>  FGVoronoiInputList;
 typedef vector<FGVoronoiOutput> FGVoronoiOutputList;
 
 /****************************************************************************/
index 8b3063bd3642a772d82ddfbb8b0eaf29b78e780a..49a6c774faaaa9e7890697b30218d7820b6c1d74 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -34,6 +34,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -49,7 +51,7 @@ HISTORY
 /****************************************************************************/
 /* DEFINES                                                                 */
 /****************************************************************************/
-typedef float WeatherPrecition;
+typedef float WeatherPrecision;
 
 //set the minimum visibility to get a at least half way realistic weather
 #define MINIMUM_WEATHER_VISIBILIY 10.0    /* metres */
@@ -57,10 +59,11 @@ typedef float WeatherPrecition;
 //prefered way the database is working
 #define PREFERED_WORKING_TYPE default_mode
 
-#define FG_WEATHER_DEFAULT_TEMPERATURE (15.0+273.16)       /*15°C or 288.16°K*/
+#define FG_WEATHER_DEFAULT_TEMPERATURE   (15.0+273.16)     /*15°C or 288.16°K*/
 #define FG_WEATHER_DEFAULT_VAPORPRESSURE (0.0)             /*in Pascal 1 Pa = N/m^2*/
-#define FG_WEATHER_DEFAULT_AIRPRESSURE (1013.25*100.0)     /*in Pascal 1 Pa = N/m^2*/
-#define FG_WEATHER_DEFAULT_AIRDENSITY (1.22501)                    /*in kg/m^3*/
+#define FG_WEATHER_DEFAULT_AIRPRESSURE   (1013.25*100.0)    /*in Pascal 1 Pa = N/m^2*/
+#define FG_WEATHER_DEFAULT_AIRDENSITY    (1.22501)         /*in kg/m^3*/
+
 /****************************************************************************/
 /* CLASS DECLARATION                                                       */
 /****************************************************************************/
index c0a261ad9412d3b532c266a839e60b8353df56d2..4f5836744a7111809e7e72761e5c81a0814fd989 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -36,6 +36,8 @@ HISTORY
 30.06.1999 Christian Mayer     STL portability
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -48,11 +50,9 @@ HISTORY
 /* INCLUDES                                                                */
 /****************************************************************************/
 #include <Include/compiler.h>
-#include <vector>
-FG_USING_STD(vector);
-FG_USING_NAMESPACE(std);
 
-#include <Math/point3d.hxx>
+#include "sg.h"
+
 #include "FGWeatherDefs.h"
                
 /****************************************************************************/
@@ -74,15 +74,15 @@ class FGWeatherFeature
 {
 private:
 protected:
-    Point3D position;              //middle of the feature in lat/lon/alt
-    WeatherPrecition minSize;      //smalest size of the feature
+    sgVec3 position;               //middle of the feature in lat/lon/alt
+    WeatherPrecision minSize;      //smalest size of the feature
                                    //=> a disk is specifies
 
     LayerType FeatureType; 
 
 public:
-    LayerType getFeature(void) const { return FeatureType; }
-    bool isFeature(const LayerType& f) const {return (f == FeatureType);}
+    LayerType getFeature(void)         const { return FeatureType; }
+    bool isFeature(const LayerType& f) const { return (f == FeatureType); }
 };
 
 /****************************************************************************/
index 5e3ca61f8aa9167b0024ceb7bbf30c64291cd657..502120960bc4c5c5fbb1297ac547800b60fbec15 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -35,6 +35,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -78,7 +80,7 @@ HISTORY
 #define SAT_VP_CONST2 7.444072452
 #define SAT_VP_CONST3 235.3120919
 
-inline WeatherPrecition sat_vp(const WeatherPrecition& temp)
+inline WeatherPrecision sat_vp(const WeatherPrecision temp)
 {
     //old:
     //return 6.112 * pow( 10, (7.5*dp)/(237.7+dp) );    //in mbar
@@ -90,21 +92,21 @@ inline WeatherPrecition sat_vp(const WeatherPrecition& temp)
     return SAT_VP_CONST1 * pow( 10, (SAT_VP_CONST2*temp)/(SAT_VP_CONST3+temp) );    //in pascal
 }
 
-inline WeatherPrecition rel_hum(const WeatherPrecition& act_vp, const WeatherPrecition& sat_vp)
+inline WeatherPrecision rel_hum(const WeatherPrecision act_vp, const WeatherPrecision sat_vp)
 {
     return (act_vp / sat_vp) * 100;    //in %
 }
 
-inline WeatherPrecition dp(const WeatherPrecition& sat_vp)
+inline WeatherPrecision dp(const WeatherPrecision sat_vp)
 {
     return (SAT_VP_CONST3*log10(sat_vp/SAT_VP_CONST1))/(SAT_VP_CONST2-log10(sat_vp/SAT_VP_CONST1)); //in °C 
 }
 
-inline WeatherPrecition wb(const WeatherPrecition& t, const WeatherPrecition& p, const WeatherPrecition& dp)
+inline WeatherPrecision wb(const WeatherPrecision t, const WeatherPrecision p, const WeatherPrecision dp)
 {
-    WeatherPrecition e = sat_vp(dp); 
-    WeatherPrecition tcur, tcvp, peq, diff;
-    WeatherPrecition tmin, tmax;
+    WeatherPrecision e = sat_vp(dp); 
+    WeatherPrecision tcur, tcvp, peq, diff;
+    WeatherPrecision tmin, tmax;
 
     if (t > dp)
     {
@@ -137,37 +139,37 @@ inline WeatherPrecition wb(const WeatherPrecition& t, const WeatherPrecition& p,
 
 }
 
-inline WeatherPrecition Celsius(const WeatherPrecition& celsius)
+inline WeatherPrecision Celsius(const WeatherPrecision celsius)
 {
     return celsius + 273.16;                           //Kelvin
 }
 
-inline WeatherPrecition Fahrenheit(const WeatherPrecition& fahrenheit)
+inline WeatherPrecision Fahrenheit(const WeatherPrecision fahrenheit)
 {
     return (fahrenheit * 9.0 / 5.0) + 32.0 + 273.16;   //Kelvin
 }
 
-inline WeatherPrecition Kelvin2Celsius(const WeatherPrecition& kelvin)
+inline WeatherPrecision Kelvin2Celsius(const WeatherPrecision kelvin)
 {
     return kelvin - 273.16;                            //Celsius
 }
 
-inline WeatherPrecition Kelvin2Fahrenheit(const WeatherPrecition& kelvin)
+inline WeatherPrecision Kelvin2Fahrenheit(const WeatherPrecision kelvin)
 {
     return ((kelvin - 273.16) * 9.0 / 5.0) + 32.0;      //Fahrenheit
 }
 
-inline WeatherPrecition Celsius2Fahrenheit(const WeatherPrecition& celsius)
+inline WeatherPrecision Celsius2Fahrenheit(const WeatherPrecision celsius)
 {
     return (celsius * 9.0 / 5.0) + 32.0;                //Fahrenheit
 }
 
-inline WeatherPrecition Fahrenheit2Celsius(const WeatherPrecition& fahrenheit)
+inline WeatherPrecision Fahrenheit2Celsius(const WeatherPrecision fahrenheit)
 {
     return (fahrenheit - 32.0) * 5.0 / 9.0;            //Celsius
 }
 
-inline WeatherPrecition Torr2Pascal(const WeatherPrecition& torr)
+inline WeatherPrecision Torr2Pascal(const WeatherPrecision torr)
 {
     return (101325.0/760.0)*torr;
 }
index 47bcd9d52c7ae9a8f749b5aef99f738a01bdedc2..88d01345b9967f7cc07896e3fa0862518a113c79 100644 (file)
@@ -5,7 +5,7 @@
  Date started: 28.05.99
  Called by:    FGMicroWeather
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -35,6 +35,8 @@ HISTORY
 20.06.1999 Christian Mayer     added lots of consts
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -45,8 +47,4 @@ HISTORY
 /****************************************************************************/
 /********************************** CODE ************************************/
 /****************************************************************************/
-bool operator<(const FGWindItem& arg1, const FGWindItem& arg2)
-{
-    return arg1.alt < arg2.alt;
-}
 
index 5bd7e9ff7a8f8d04fb650de612ba9ce527e73702..b06dbd2c582bb9ba56040b1321df6f5bea609b44 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Christian Mayer
  Date started: 28.05.99
 
- ---------- Copyright (C) 1999  Christian Mayer (vader@t-online.de) ----------
+ -------- Copyright (C) 1999 Christian Mayer (fgfs@christianmayer.de) --------
 
  This program is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free Software
@@ -32,9 +32,10 @@ HISTORY
 28.05.1999 Christian Mayer     Created
 16.06.1999 Durk Talsma         Portability for Linux
 20.06.1999 Christian Mayer     added lots of consts
-10.10.1999 Christian Mayer     added mutable for gcc 2.95 portability
 11.10.1999 Christian Mayer     changed set<> to map<> on Bernie Bright's 
                                suggestion
+19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
+                               and lots of wee code cleaning
 *****************************************************************************/
 
 /****************************************************************************/
@@ -46,12 +47,10 @@ HISTORY
 /****************************************************************************/
 /* INCLUDES                                                                */
 /****************************************************************************/
-#include <Math/point3d.hxx>
+#include "sg.h"
+
 #include "FGWeatherDefs.h"
 
-//for the case that mutable isn't supported:
-#include "Include/compiler.h"
-               
 /****************************************************************************/
 /* DEFINES                                                                 */
 /****************************************************************************/
@@ -64,50 +63,55 @@ FGWindItem operator-(const FGWindItem& arg);
 class FGWindItem
 {
 private:
-    mutable Point3D value;
-    WeatherPrecition alt;
+    sgVec3 value;
 
 protected:
 public:
 
-    FGWindItem(const WeatherPrecition& a, const Point3D& v) {alt = a; value = v;}
-    FGWindItem(const Point3D& v)                           {alt = 0.0; value = v;}
-    FGWindItem()                                           {alt = 0.0; value = Point3D(0.0);}
+    FGWindItem(const sgVec3& v)        { sgCopyVec3(value, v); }
+    FGWindItem()               { sgZeroVec3(value);    }
 
-    Point3D          getValue() const { return value; };
-    WeatherPrecition getAlt()   const { return alt;   };
+    void          getValue(sgVec3 ret) const { sgCopyVec3(ret, value); };
+    const sgVec3* getValue(void)       const { return &value;          };
 
-    FGWindItem& operator*= (const WeatherPrecition& arg);
-    FGWindItem& operator+= (const FGWindItem& arg);
-    FGWindItem& operator-= (const FGWindItem& arg);
+    WeatherPrecision x(void) const { return value[0]; };
+    WeatherPrecision y(void) const { return value[1]; };
+    WeatherPrecision z(void) const { return value[2]; };
 
-    friend bool operator<(const FGWindItem& arg1, const FGWindItem& arg2);
-    friend FGWindItem operator-(const FGWindItem& arg);
+    FGWindItem& operator*= (const WeatherPrecision arg);
+    FGWindItem& operator+= (const FGWindItem&      arg);
+    FGWindItem& operator-= (const FGWindItem&      arg);
 
+    friend FGWindItem operator-(const FGWindItem& arg);
 };
 
-inline FGWindItem& FGWindItem::operator*= (const WeatherPrecition& arg)
+inline FGWindItem& FGWindItem::operator*= (const WeatherPrecision arg)
 {
-  value *= arg;
+  sgScaleVec3(value, arg);
   return *this;
 }
 
 inline FGWindItem& FGWindItem::operator+= (const FGWindItem& arg)
 {
-  value += arg.value;
+  sgAddVec3(value, *arg.getValue());
   return *this;
 }
 
 inline FGWindItem& FGWindItem::operator-= (const FGWindItem& arg)
 {
-  value -= arg.value;
+  sgSubVec3(value, *arg.getValue());
   return *this;
 }
 
 
 inline FGWindItem operator-(const FGWindItem& arg)
 {
-    return FGWindItem(arg.alt, -arg.value);
+    sgVec3 temp;
+
+    sgNegateVec3(temp, *arg.getValue());
+
+    return FGWindItem(temp);
 }
+
 /****************************************************************************/
 #endif /*FGWindItem_H*/