001 package de.hska.java.aufgaben.objekte;
002
003 /**
004 * Windgeschwindigkeit ist verantwortlich für die Umrechnung
005 * in verschiedene, gebräuchliche Masse von
006 * Windgeschindigkeiten.
007 *
008 * <p>
009 * <a href="http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/objekt_orientierung.html#windgeschwindigkeit">Zurück zum Aufgabentext</a>
010 * </p>
011 *
012 *
013 * @author Christian Pape
014 */
015 public class Windgeschwindigkeit {
016
017 /**
018 * die Geschwindigkeit in Kilometern pro Stunde
019 */
020 private double kilometerProStunde = 0.0;
021
022
023 /**
024 * Erzeugt eine neue Windgeschwindigkeit mit dem
025 * angegebenen Wert in Kilometer / Stunde
026 */
027 public Windgeschwindigkeit(double kilometerProStunde) {
028 this.kilometerProStunde = kilometerProStunde;
029 }
030
031 /**
032 * Gibt genau dann true zurück, wenn die Windgeschwindigkeit
033 * Orkanstärke erreicht hat (mehr als 120 km/h).
034 */
035 public boolean isOrkan() {
036 return getKilometerProStunde() > 120.0;
037 }
038
039 /**
040 * Gibt genau dann true zurück, wenn es
041 * noch windstill ist (weniger als 2 km/h)
042 */
043 public boolean isWindstill() {
044 return getKilometerProStunde() < 2.0;
045 }
046
047 public double getKilometerProStunde() {
048 return kilometerProStunde;
049 }
050
051 /**
052 * Gibt die Windgeschwindigkeit in Knoten (Seemeilen pro Stunde)
053 * zurück. Eine Seemeile ist 1,852 Kilometer lang.
054 */
055 public double getKnoten() {
056 return getKilometerProStunde() / 1.852;
057 }
058
059 /**
060 * Gibt die Windgeschwindigkeit auf der Beaufort-Skala
061 * (0 - 12) zurück. Grössere Werte als 12 sind gibt es nicht.
062 * Der Beaufortwert B ist der gerundete
063 * Wert von B'. B' ist implizit definiert durch
064 * v = 3,01 * B^(3/2), wobei
065 * v die Geschwindigkeit in Kilometern pro Stunde ist und
066 * ^ die Potenzfunktion bezeichnet (es gilt also B^(3/2) = B * sqrt(B) ).
067 */
068 public int getBeaufort() {
069 int beaufort = (int) (Math.pow(getKilometerProStunde() / 3.01, 0.6666) +0.5);
070
071 if (beaufort > 12) {
072 beaufort = 12;
073 }
074
075 return beaufort;
076 }
077 }