mirror of
https://gitlab.com/MisterBiggs/julia-for-matlabbers.git
synced 2025-06-16 07:06:48 +00:00
more work on orbits example
This commit is contained in:
parent
5dd72d28b9
commit
3a573847da
File diff suppressed because one or more lines are too long
107
index.jl
107
index.jl
@ -378,8 +378,24 @@ md"""
|
|||||||
# ╔═╡ f6d87354-ac46-4202-92f8-b39a0db13327
|
# ╔═╡ f6d87354-ac46-4202-92f8-b39a0db13327
|
||||||
μ = 3.986004418e14u"m^3/s^2" # Standard Gravitational Parameter for Earth
|
μ = 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
|
# ╔═╡ 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"""
|
"""Simple 2d elliptic orbit"""
|
||||||
r::typeof(.1u"km") # altitude
|
r::typeof(.1u"km") # altitude
|
||||||
a::typeof(.1u"km") # semimajor axis
|
a::typeof(.1u"km") # semimajor axis
|
||||||
@ -387,48 +403,70 @@ struct Elliptic_Orbit
|
|||||||
|
|
||||||
function Elliptic_Orbit(r, a, e)
|
function Elliptic_Orbit(r, a, e)
|
||||||
@assert e < 1 "Eccentricity must be less than 1!"
|
@assert e < 1 "Eccentricity must be less than 1!"
|
||||||
|
@assert 0 < e "Eccentricity must be greater than 0!"
|
||||||
new(r, a, e)
|
new(r, a, e)
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# ╔═╡ b4e08868-d48a-4f66-9d20-f45ea4d83f00
|
||||||
# ╔═╡ efb58b79-24e4-45c6-ad45-aeaa339d82fd
|
sat = Elliptic_Orbit(earth_radius+537.0u"km", earth_radius+9040.9u"km")
|
||||||
ISS = Elliptic_Orbit(420u"km")
|
|
||||||
|
|
||||||
# ╔═╡ 3efd8a29-6a56-4f5c-9cab-0f08875b2064
|
# ╔═╡ 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)
|
function get_velocity(o::Elliptic_Orbit)
|
||||||
v = sqrt(μ*(2/o.r - 1/o.a))
|
v = sqrt(μ*(2/o.r - 1/o.a))
|
||||||
return v |> u"km/s"
|
return v |> u"km/s"
|
||||||
end
|
end
|
||||||
|
|
||||||
# ╔═╡ 59207a25-fa6d-4369-979d-cd9cc2f094cf
|
# ╔═╡ 11fb3a28-edf3-46ff-8c4a-5286793b6e43
|
||||||
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
|
|
||||||
get_velocity(ISS)
|
get_velocity(ISS)
|
||||||
|
|
||||||
# ╔═╡ 026321df-6991-4b59-aaba-c467b267a477
|
# ╔═╡ 79a9ab94-06a8-4613-8f60-358e08f0f32e
|
||||||
whatsit(u"m")
|
get_velocity(sat)
|
||||||
|
|
||||||
# ╔═╡ 3955b9d6-7514-4712-ba22-929afda3c77c
|
|
||||||
typeof(1.1u"km")
|
|
||||||
|
|
||||||
# ╔═╡ a7bacb81-0f19-4d2d-9588-61e912689001
|
|
||||||
Elliptic_Orbit(1,2,.9)
|
|
||||||
|
|
||||||
# ╔═╡ c3d943b4-809d-4a96-a99d-be7653ba2c8b
|
# ╔═╡ 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
|
# ╔═╡ 8924673f-e99c-44b3-be6d-2abf0b2f5e23
|
||||||
@ -1401,17 +1439,20 @@ version = "0.9.1+5"
|
|||||||
# ╠═9ea4584c-8177-4f69-9739-b2faa93281a8
|
# ╠═9ea4584c-8177-4f69-9739-b2faa93281a8
|
||||||
# ╠═f43812d2-9f87-489a-9317-e7aa19ffd3bc
|
# ╠═f43812d2-9f87-489a-9317-e7aa19ffd3bc
|
||||||
# ╠═f6d87354-ac46-4202-92f8-b39a0db13327
|
# ╠═f6d87354-ac46-4202-92f8-b39a0db13327
|
||||||
|
# ╠═f8039870-2570-47d0-8d46-30922415ec9d
|
||||||
|
# ╠═863cd607-a459-49ae-9049-983f3374f523
|
||||||
# ╠═44daff45-f608-47e3-ad6e-fca43532f322
|
# ╠═44daff45-f608-47e3-ad6e-fca43532f322
|
||||||
# ╠═efb58b79-24e4-45c6-ad45-aeaa339d82fd
|
# ╠═efb58b79-24e4-45c6-ad45-aeaa339d82fd
|
||||||
|
# ╠═ad3a2b19-5639-4d11-8d89-bc54772d639b
|
||||||
|
# ╠═b4e08868-d48a-4f66-9d20-f45ea4d83f00
|
||||||
# ╠═3efd8a29-6a56-4f5c-9cab-0f08875b2064
|
# ╠═3efd8a29-6a56-4f5c-9cab-0f08875b2064
|
||||||
# ╠═59207a25-fa6d-4369-979d-cd9cc2f094cf
|
# ╠═59207a25-fa6d-4369-979d-cd9cc2f094cf
|
||||||
# ╠═5a4b673b-babb-4e11-a292-d71087fa32bc
|
# ╠═11fb3a28-edf3-46ff-8c4a-5286793b6e43
|
||||||
# ╠═a6c72acc-39fc-4dfc-8126-64c6b35145d1
|
# ╠═79a9ab94-06a8-4613-8f60-358e08f0f32e
|
||||||
# ╠═d79a6752-77ba-496f-96c3-d9904db0a46b
|
|
||||||
# ╠═026321df-6991-4b59-aaba-c467b267a477
|
|
||||||
# ╠═3955b9d6-7514-4712-ba22-929afda3c77c
|
|
||||||
# ╠═a7bacb81-0f19-4d2d-9588-61e912689001
|
|
||||||
# ╠═c3d943b4-809d-4a96-a99d-be7653ba2c8b
|
# ╠═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
|
# ╠═8924673f-e99c-44b3-be6d-2abf0b2f5e23
|
||||||
# ╠═3f7ae2df-9d4d-46d3-b12e-22107a560b66
|
# ╠═3f7ae2df-9d4d-46d3-b12e-22107a560b66
|
||||||
# ╠═fbc06121-d53a-4a64-9497-63d7f3583fbb
|
# ╠═fbc06121-d53a-4a64-9497-63d7f3583fbb
|
||||||
|
Loading…
x
Reference in New Issue
Block a user