Air mass: Difference between revisions
Content added Content deleted
(Add Seed7) |
(Add Swift) |
||
Line 780: | Line 780: | ||
90.0 34.32981136 34.36666557 |
90.0 34.32981136 34.36666557 |
||
</pre> |
</pre> |
||
=={{header|Swift}}== |
|||
{{trans|Go}} |
|||
<lang swift>import Foundation |
|||
extension Double { |
|||
var radians: Double { self * .pi / 180 } |
|||
} |
|||
func columnDensity(_ a: Double, _ z: Double) -> Double { |
|||
func rho(_ a: Double) -> Double { |
|||
exp(-a / 8500) |
|||
} |
|||
func height(_ d: Double) -> Double { |
|||
let aa = 6_371_000 + a |
|||
let hh = aa * aa + d * d - 2 * d * aa * cos((180 - z).radians) |
|||
return hh.squareRoot() - 6_371_000 |
|||
} |
|||
var sum = 0.0 |
|||
var d = 0.0 |
|||
while d < 1e7 { |
|||
let delta = max(0.001, 0.001 * d) |
|||
sum += rho(height(d + 0.5 * delta)) * delta |
|||
d += delta |
|||
} |
|||
return sum |
|||
} |
|||
func airMass(altitude: Double, zenith: Double) -> Double { |
|||
return columnDensity(altitude, zenith) / columnDensity(altitude, 0) |
|||
} |
|||
print("Angle 0 m 13700 m") |
|||
print("------------------------------------") |
|||
for z in stride(from: 0.0, through: 90.0, by: 5.0) { |
|||
let air = String( |
|||
format: "%2.0f %11.8f %11.8f", |
|||
z, |
|||
airMass(altitude: 0, zenith: z), |
|||
airMass(altitude: 13700, zenith: z) |
|||
) |
|||
print(air) |
|||
}</lang> |
|||
{{out}} |
|||
<pre>Angle 0 m 13700 m |
|||
------------------------------------ |
|||
0 1.00000000 1.00000000 |
|||
5 1.00380963 1.00380965 |
|||
10 1.01538466 1.01538475 |
|||
15 1.03517744 1.03517765 |
|||
20 1.06399053 1.06399093 |
|||
25 1.10305937 1.10306005 |
|||
30 1.15418974 1.15419083 |
|||
35 1.21998076 1.21998246 |
|||
40 1.30418931 1.30419190 |
|||
45 1.41234169 1.41234567 |
|||
50 1.55280404 1.55281025 |
|||
55 1.73875921 1.73876915 |
|||
60 1.99212000 1.99213665 |
|||
65 2.35199740 2.35202722 |
|||
70 2.89531368 2.89537287 |
|||
75 3.79582352 3.79596149 |
|||
80 5.53885809 5.53928113 |
|||
85 10.07896219 10.08115981 |
|||
90 34.32981136 34.36666557</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |