1   package org.wcb.e6b;
2   
3   /**
4    * Created by IntelliJ IDEA.
5    * User: wbogaardt
6    * Date: Aug 23, 2005
7    * Time: 7:02:17 PM
8    * To change this template use File | Settings | File Templates.
9    */
10  
11  public class DensityAltitude extends AbstractE6B {
12  
13      private int prAltitude;
14      private double centigradeTemp;
15      private double densityAltitude;
16      private int fahrenheitTemp;
17  
18      /**
19       * The current pressure altitude setting.
20       * @return Pressure altitdue in feet
21       */
22      public int getPressureAltitude() {
23          return prAltitude;
24      }
25  
26      /**
27       * Sets the pressure altitude.
28       * @param altitude in feet
29       */
30      public void setPressureAltitude(int altitude) {
31          this.prAltitude = altitude;
32      }
33  
34      /**
35       * the Temperature in fahrenheit.
36       * @return  current temp
37       */
38      public int getFahrenheitTemp() {
39          return fahrenheitTemp;
40      }
41  
42      /**
43       * Sets the current temperature.
44       * @param temp the current fahrenheit temp
45       */
46      public void setFahrenheitTemp(int temp) {
47          this.fahrenheitTemp = temp;
48      }
49  
50      /**
51       * The centigrade temperature set.
52       * @return current temp set.
53       */
54      public double getCentigradeTemp() {
55          return centigradeTemp;
56      }
57  
58      /**
59       * Get the current centigrade temp.
60       * @param centigrade temp current
61       */
62      public void setCentigradeTemp(double centigrade) {
63          this.centigradeTemp = centigrade;
64      }
65  
66      /**
67       * called after the above methods set.
68       */
69      public void calculate() {
70          if (fahrenheitTemp > 0) {
71              setCentigradeTemp((int) E6bConverter.fahrenheitToCelsius(fahrenheitTemp));
72          }
73          double tempKelvineConversion = E6bConverter.centigradeToKelvin(centigradeTemp);
74          double tempSpread = 273.15 + (15 - (.0019812 * prAltitude));
75          densityAltitude = prAltitude + (tempSpread / .0019812) * (1 - (Math.pow(tempSpread / tempKelvineConversion, .2349690)));
76          //densityAltitude = prAltitude + (272.30 / .0019812) * (1 - Math.pow((272.30 / kelvineConversion), 0.2349690));
77      }
78  
79      /**
80       * the result value after calling calculate().
81       * @return the density altitude.
82       */
83      public long densityAltitude() {
84          return Math.round(densityAltitude);
85      }
86  
87  }