mirror of https://github.com/2martens/uni.git
SE3-1: 2.2 und 2.3 geloest.
This commit is contained in:
parent
6cbe8d1aa9
commit
dc1219fded
180
se3/blatt1.rkt
180
se3/blatt1.rkt
|
@ -35,31 +35,41 @@ Abgebende: Jim 2martens, 2noack, 0giebel
|
|||
)
|
||||
|
||||
; 2.1
|
||||
; Helferfunktion, um dG in Bogenmaß zu errechnen
|
||||
(define (calculateDG widthARad widthBRad distanceLengthRad)
|
||||
; ausrechnen von dG im Bogenmaß
|
||||
(acos
|
||||
; ausrechnen von cos dG im Bogenmaß
|
||||
(+ (*
|
||||
(sin widthARad)
|
||||
(sin widthBRad)
|
||||
)
|
||||
(* (cos widthARad)
|
||||
(cos widthBRad)
|
||||
(cos distanceLengthRad)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
; Helferfunktion, um Differenz der Länge in Bogenmaß zu errechnen
|
||||
(define (calculateDistanceLengthRad lengthA lengthB)
|
||||
; Differenz geographische Längen
|
||||
(define distanceLength
|
||||
(- lengthB lengthA)
|
||||
)
|
||||
; Differenz in Radiant umrechnen
|
||||
(degreeToRadian distanceLength)
|
||||
)
|
||||
|
||||
; breiteA laengeA breiteB laengeB alle in Grad angegeben
|
||||
; westliche Länge und südliche Breite negativ angeben
|
||||
(define (distanzAB breiteA laengeA breiteB laengeB)
|
||||
; Parameter in Radiant umrechnen
|
||||
(define breiteARad (degreeToRadian breiteA))
|
||||
(define breiteBRad (degreeToRadian breiteB))
|
||||
; Differenz geographische Längen
|
||||
(define distanzLaenge
|
||||
(- laengeB laengeA)
|
||||
)
|
||||
; Differenz in Radiant umrechnen
|
||||
(define distanzLaengeRad (degreeToRadian distanzLaenge))
|
||||
(define cosDG
|
||||
; ausrechnen von cos dG im Bogenmaß
|
||||
(+ (*
|
||||
(sin breiteARad)
|
||||
(sin breiteBRad)
|
||||
)
|
||||
(* (cos breiteARad)
|
||||
(cos breiteBRad)
|
||||
(cos distanzLaengeRad)
|
||||
)
|
||||
)
|
||||
)
|
||||
(define dG (acos cosDG))
|
||||
(define distanzLaengeRad (calculateDistanceLengthRad laengeA laengeB))
|
||||
(define dG (calculateDG breiteARad breiteBRad distanzLaengeRad))
|
||||
; umrechen in Kilometer
|
||||
(nmToKM
|
||||
; ermitteln der Entfernung in Seemeilen
|
||||
|
@ -70,10 +80,140 @@ Abgebende: Jim 2martens, 2noack, 0giebel
|
|||
)
|
||||
)
|
||||
|
||||
; ausrechnen der Entfernung von Oslo und Hongkong
|
||||
; ausrechnen der Entfernung zwischen den angegebenen Städten
|
||||
(display "Entfernung Oslo - Hongkong (in km): ")
|
||||
(distanzAB 59.93 10.75 22.2 114.1)
|
||||
(display "Entfernung San Francisco - Honolulu (in km): ")
|
||||
(distanzAB 37.75 -122.45 21.32 -157.83)
|
||||
(display "Entfernung Osterinsel - Lima (in km): ")
|
||||
(distanzAB -27.1 -109.4 -12.1 -77.05)
|
||||
|
||||
; 2.2
|
||||
; breiteA laengeA breiteB laengeB alle in Grad angegeben
|
||||
; westliche Länge und südliche Breite negativ angeben
|
||||
(define (kurswinkel breiteA laengeA breiteB laengeB)
|
||||
; benötigte Variablen bereitstellen
|
||||
(define distanzLaengeRad (calculateDistanceLengthRad laengeA laengeB))
|
||||
(define breiteARad (degreeToRadian breiteA))
|
||||
(define breiteBRad (degreeToRadian breiteB))
|
||||
(define dG (calculateDG breiteARad breiteBRad distanzLaengeRad))
|
||||
; cos alpha r errechnen
|
||||
(define cosAlphaR (/
|
||||
(- (sin breiteBRad)
|
||||
(* (cos dG)
|
||||
(sin breiteARad)
|
||||
)
|
||||
)
|
||||
(* (cos breiteARad)
|
||||
(sin dG)
|
||||
)
|
||||
)
|
||||
)
|
||||
; alpha R bestimmen und in Grad umrechnen.
|
||||
(define alphaR (acos cosAlphaR))
|
||||
(define alphaRGrad (radianToDegree alphaR))
|
||||
; bestimmen, ob Kurs nach Osten geht
|
||||
(define isEastboundA (if (> laengeB laengeA) true false))
|
||||
(define checkNecessary (> 0
|
||||
(* laengeA
|
||||
laengeB)
|
||||
)
|
||||
)
|
||||
; überprüfen, ob offensichtliche Richtung tatsächlich kürzer ist
|
||||
(define isEastbound (if checkNecessary
|
||||
(if (> (- 360
|
||||
(+ (abs laengeB)
|
||||
(abs laengeA)
|
||||
)
|
||||
)
|
||||
(+ (abs laengeB)
|
||||
(abs laengeA)
|
||||
)
|
||||
)
|
||||
isEastboundA
|
||||
(not isEastboundA)
|
||||
)
|
||||
isEastboundA
|
||||
)
|
||||
)
|
||||
; abhängig von der Richtung den Kurswinkel bestimmen
|
||||
(if isEastbound alphaRGrad (- 360
|
||||
alphaRGrad)
|
||||
)
|
||||
)
|
||||
|
||||
; ausrechnen der Kurswinkel auf den angegebenen Routen
|
||||
(display "Kurswinkel Oslo - Hongkong: ")
|
||||
(kurswinkel 59.93 10.75 22.2 114.1)
|
||||
(display "Kurswinkel San Francisco - Honolulu: ")
|
||||
(kurswinkel 37.75 -122.45 21.32 -157.83)
|
||||
(display "Kurswinkel Osterinsel - Lima: ")
|
||||
(kurswinkel -27.1 -109.4 -12.1 -77.05)
|
||||
|
||||
; 2.3
|
||||
; winkelGrad darf maximal eine Nachkommastelle haben und muss in Grad
|
||||
; angegeben sein
|
||||
(define (gradToHimmelsrichtung winkelGrad)
|
||||
; N=0,NNE=22.5,NE=45,ENE=67.5,E=90,ESE=112.5,SE=135,SSE=157.5,S=180
|
||||
; SSW=202.5,SW=225,WSW=247.5,W=270,WNW=292.5,NW=315,NNW=337.5,N=360
|
||||
; ein Kurswinkel ist also immer maximal 11.25 Grad von der nächsten fest
|
||||
; definierten Himmelsrichtung entfernt
|
||||
(define winkelGradModuloReady (* 10 winkelGrad))
|
||||
(define abstand (/ (modulo winkelGradModuloReady 225) 10.0))
|
||||
(define aufrunden (>= abstand 11.25))
|
||||
(define richtungGrad1 (- winkelGrad abstand))
|
||||
(define richtungGrad (if aufrunden
|
||||
(+ richtungGrad1 22.5)
|
||||
richtungGrad1
|
||||
)
|
||||
)
|
||||
(case richtungGrad
|
||||
[(0) "N"]
|
||||
[(22.5) "NNE"]
|
||||
[(45) "NE"]
|
||||
[(67.5) "ENE"]
|
||||
[(90) "E"]
|
||||
[(112.5) "ESE"]
|
||||
[(135) "SE"]
|
||||
[(157.5) "SSE"]
|
||||
[(180) "S"]
|
||||
[(202.5) "SSW"]
|
||||
[(225) "SW"]
|
||||
[(247.5) "WSW"]
|
||||
[(270) "W"]
|
||||
[(292.5) "WNW"]
|
||||
[(315) "NW"]
|
||||
[(337.5) "NNW"]
|
||||
[(360) "N"]
|
||||
)
|
||||
)
|
||||
|
||||
; ausgeben der Himmelsrichtungen für die eben berechneten Kurswinkel
|
||||
(display "Flugrichtung Oslo - Hongkong: ")
|
||||
(gradToHimmelsrichtung 67.4)
|
||||
(display "Flugrichtung San Francisco - Honolulu: ")
|
||||
(gradToHimmelsrichtung 251.8)
|
||||
(display "Flugrichtung Osterinsel - Lima: ")
|
||||
(gradToHimmelsrichtung 70.0)
|
||||
|
||||
; richtung muss als String in Form einer Himmelsrichtung gegeben werden
|
||||
(define (himmelsrichtungToGrad richtung)
|
||||
(case richtung
|
||||
[("N") 0]
|
||||
[("NNE") 22.5]
|
||||
[("NE") 45]
|
||||
[("ENE") 67.5]
|
||||
[("E") 90]
|
||||
[("ESE") 112.5]
|
||||
[("SE") 135]
|
||||
[("SSE") 157.5]
|
||||
[("S") 180]
|
||||
[("SSW") 202.5]
|
||||
[("SW") 225]
|
||||
[("WSW") 247.5]
|
||||
[("W") 270]
|
||||
[("WNW") 292.5]
|
||||
[("NW") 315]
|
||||
[("NNW") 337.5]
|
||||
)
|
||||
)
|
Loading…
Reference in New Issue