1
0
mirror of https://gitlab.com/MisterBiggs/julia-for-matlabbers.git synced 2025-06-15 22:56:44 +00:00

more work on orbits example

This commit is contained in:
Anson 2021-08-15 23:54:42 -07:00
parent 5dd72d28b9
commit 3a573847da
2 changed files with 76 additions and 35 deletions

File diff suppressed because one or more lines are too long

107
index.jl
View File

@ -378,8 +378,24 @@ md"""
# ╔═╡ f6d87354-ac46-4202-92f8-b39a0db13327
μ = 3.986004418e14u"m^3/s^2" # Standard Gravitational Parameter for Earth
# ╔═╡ f8039870-2570-47d0-8d46-30922415ec9d
earth_radius = 6378u"km"
# ╔═╡ 863cd607-a459-49ae-9049-983f3374f523
abstract type Orbit end
# ╔═╡ 44daff45-f608-47e3-ad6e-fca43532f322
struct Elliptic_Orbit
struct Circular_Orbit <: Orbit
"""Simple 2d circular orbit"""
r::typeof(.1u"km") # altitude
end
# ╔═╡ efb58b79-24e4-45c6-ad45-aeaa339d82fd
ISS = Circular_Orbit(420u"km")
# ╔═╡ ad3a2b19-5639-4d11-8d89-bc54772d639b
struct Elliptic_Orbit <: Orbit
"""Simple 2d elliptic orbit"""
r::typeof(.1u"km") # altitude
a::typeof(.1u"km") # semimajor axis
@ -387,48 +403,70 @@ struct Elliptic_Orbit
function Elliptic_Orbit(r, a, e)
@assert e < 1 "Eccentricity must be less than 1!"
@assert 0 < e "Eccentricity must be greater than 0!"
new(r, a, e)
end
function Elliptic_Orbit(r)
new(r,r,0) # we'll pretend circular orbits count for this example
function Elliptic_Orbit(perigee, apogee)
a = (perigee + apogee) / 2
e = 1 - (perigee/a)
r = a*((1-e^2)/(1+e)) # Assume θ is 0 since we aren't keeping track of it
Elliptic_Orbit(r,a,e)
end
end
# ╔═╡ efb58b79-24e4-45c6-ad45-aeaa339d82fd
ISS = Elliptic_Orbit(420u"km")
# ╔═╡ b4e08868-d48a-4f66-9d20-f45ea4d83f00
sat = Elliptic_Orbit(earth_radius+537.0u"km", earth_radius+9040.9u"km")
# ╔═╡ 3efd8a29-6a56-4f5c-9cab-0f08875b2064
function get_velocity(o::Circular_Orbit)
v = sqrt(μ/o.r)
return v |> u"km/s"
end
# ╔═╡ 59207a25-fa6d-4369-979d-cd9cc2f094cf
function get_velocity(o::Elliptic_Orbit)
v = sqrt(μ*(2/o.r - 1/o.a))
return v |> u"km/s"
end
# ╔═╡ 59207a25-fa6d-4369-979d-cd9cc2f094cf
function get_period(o::Elliptic_Orbit)
T = 2*π*sqrt(o.a^3/μ)
return T |> u"s"
end
# ╔═╡ 5a4b673b-babb-4e11-a292-d71087fa32bc
# ╔═╡ a6c72acc-39fc-4dfc-8126-64c6b35145d1
get_period(ISS)
# ╔═╡ d79a6752-77ba-496f-96c3-d9904db0a46b
# ╔═╡ 11fb3a28-edf3-46ff-8c4a-5286793b6e43
get_velocity(ISS)
# ╔═╡ 026321df-6991-4b59-aaba-c467b267a477
whatsit(u"m")
# ╔═╡ 3955b9d6-7514-4712-ba22-929afda3c77c
typeof(1.1u"km")
# ╔═╡ a7bacb81-0f19-4d2d-9588-61e912689001
Elliptic_Orbit(1,2,.9)
# ╔═╡ 79a9ab94-06a8-4613-8f60-358e08f0f32e
get_velocity(sat)
# ╔═╡ c3d943b4-809d-4a96-a99d-be7653ba2c8b
begin
function Plots.plot(orbit::Elliptic_Orbit)
a = orbit.a |> u"km" |> ustrip
b = orbit.a*sqrt(1-orbit.e^2) |> u"km" |> ustrip
t = 0:.01:2π
x_orbit(t) = a*cos(t)
y_orbit(t) = b*sin(t)
plot(x_orbit, y_orbit, t)
x_earth(t) = ustrip(earth_radius)*cos(t) + a*orbit.e
y_earth(t) = ustrip(earth_radius)*sin(t)
plot!(x_earth,y_earth, t, c=:gray,fill=(0,:blue), legend=false,aspect_ratio=:equal)
title!("Satellite Orbiting Earth")
end
plot(sat)
end
# ╔═╡ 01ba1742-d26e-4271-ab62-0bd9ce5e291d
function get_ΔV(start::Orbit, final::Orbit)
get_velocity(start) - get_velocity(final)
end
# ╔═╡ ad4d24a8-f601-4522-a3eb-c01f6fd68aec
get_ΔV(ISS,sat)
# ╔═╡ 2d0de5db-5558-41e0-96d5-a3317d151aff
# ╔═╡ 8924673f-e99c-44b3-be6d-2abf0b2f5e23
@ -1401,17 +1439,20 @@ version = "0.9.1+5"
# ╠═9ea4584c-8177-4f69-9739-b2faa93281a8
# ╠═f43812d2-9f87-489a-9317-e7aa19ffd3bc
# ╠═f6d87354-ac46-4202-92f8-b39a0db13327
# ╠═f8039870-2570-47d0-8d46-30922415ec9d
# ╠═863cd607-a459-49ae-9049-983f3374f523
# ╠═44daff45-f608-47e3-ad6e-fca43532f322
# ╠═efb58b79-24e4-45c6-ad45-aeaa339d82fd
# ╠═ad3a2b19-5639-4d11-8d89-bc54772d639b
# ╠═b4e08868-d48a-4f66-9d20-f45ea4d83f00
# ╠═3efd8a29-6a56-4f5c-9cab-0f08875b2064
# ╠═59207a25-fa6d-4369-979d-cd9cc2f094cf
# ╠═5a4b673b-babb-4e11-a292-d71087fa32bc
# ╠═a6c72acc-39fc-4dfc-8126-64c6b35145d1
# ╠═d79a6752-77ba-496f-96c3-d9904db0a46b
# ╠═026321df-6991-4b59-aaba-c467b267a477
# ╠═3955b9d6-7514-4712-ba22-929afda3c77c
# ╠═a7bacb81-0f19-4d2d-9588-61e912689001
# ╠═11fb3a28-edf3-46ff-8c4a-5286793b6e43
# ╠═79a9ab94-06a8-4613-8f60-358e08f0f32e
# ╠═c3d943b4-809d-4a96-a99d-be7653ba2c8b
# ╠═01ba1742-d26e-4271-ab62-0bd9ce5e291d
# ╠═ad4d24a8-f601-4522-a3eb-c01f6fd68aec
# ╠═2d0de5db-5558-41e0-96d5-a3317d151aff
# ╠═8924673f-e99c-44b3-be6d-2abf0b2f5e23
# ╠═3f7ae2df-9d4d-46d3-b12e-22107a560b66
# ╠═fbc06121-d53a-4a64-9497-63d7f3583fbb