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    }