1
0
mirror of https://gitlab.com/Anson-Projects/projects.git synced 2025-06-16 06:56:46 +00:00

2306 lines
74 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
<meta name="generator" content="distill" />
<style type="text/css">
/* Hide doc at startup (prevent jankiness while JS renders/transforms) */
body {
visibility: hidden;
}
</style>
<!--radix_placeholder_import_source-->
<!--/radix_placeholder_import_source-->
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css" data-origin="pandoc">
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ad0000; } /* Alert */
code span.an { color: #5e5e5e; } /* Annotation */
code span.at { color: #20794d; } /* Attribute */
code span.bn { color: #ad0000; } /* BaseN */
code span.bu { } /* BuiltIn */
code span.cf { color: #007ba5; } /* ControlFlow */
code span.ch { color: #20794d; } /* Char */
code span.cn { color: #8f5902; } /* Constant */
code span.co { color: #5e5e5e; } /* Comment */
code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */
code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */
code span.dt { color: #ad0000; } /* DataType */
code span.dv { color: #ad0000; } /* DecVal */
code span.er { color: #ad0000; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #ad0000; } /* Float */
code span.fu { color: #4758ab; } /* Function */
code span.im { } /* Import */
code span.in { color: #5e5e5e; } /* Information */
code span.kw { color: #007ba5; } /* Keyword */
code span.op { color: #5e5e5e; } /* Operator */
code span.ot { color: #007ba5; } /* Other */
code span.pp { color: #ad0000; } /* Preprocessor */
code span.sc { color: #20794d; } /* SpecialChar */
code span.ss { color: #20794d; } /* SpecialString */
code span.st { color: #20794d; } /* String */
code span.va { color: #111111; } /* Variable */
code span.vs { color: #20794d; } /* VerbatimString */
code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
</style>
<!--radix_placeholder_meta_tags-->
<title>Anson's Projects: ISS Eclipse Determination</title>
<meta property="description" itemprop="description" content="Determining how much sunlight a body orbiting a planet is receiving."/>
<link rel="canonical" href="https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"/>
<link rel="license" href="https://creativecommons.org/licenses/by/4.0/"/>
<!-- https://schema.org/Article -->
<meta property="article:published" itemprop="datePublished" content="2021-05-01"/>
<meta property="article:created" itemprop="dateCreated" content="2021-05-01"/>
<meta name="article:author" content="Anson Biggs"/>
<!-- https://developers.facebook.com/docs/sharing/webmasters#markup -->
<meta property="og:title" content="Anson&#39;s Projects: ISS Eclipse Determination"/>
<meta property="og:type" content="article"/>
<meta property="og:description" content="Determining how much sunlight a body orbiting a planet is receiving."/>
<meta property="og:url" content="https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"/>
<meta property="og:image" content="https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/preview.png"/>
<meta property="og:image:width" content="1292"/>
<meta property="og:image:height" content="703"/>
<meta property="og:locale" content="en_US"/>
<meta property="og:site_name" content="Anson&#39;s Projects"/>
<!-- https://dev.twitter.com/cards/types/summary -->
<meta property="twitter:card" content="summary_large_image"/>
<meta property="twitter:title" content="Anson&#39;s Projects: ISS Eclipse Determination"/>
<meta property="twitter:description" content="Determining how much sunlight a body orbiting a planet is receiving."/>
<meta property="twitter:url" content="https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"/>
<meta property="twitter:image" content="https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/preview.png"/>
<meta property="twitter:image:width" content="1292"/>
<meta property="twitter:image:height" content="703"/>
<!-- https://scholar.google.com/intl/en/scholar/inclusion.html#indexing -->
<meta name="citation_title" content="Anson&#39;s Projects: ISS Eclipse Determination"/>
<meta name="citation_fulltext_html_url" content="https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"/>
<meta name="citation_fulltext_world_readable" content=""/>
<meta name="citation_online_date" content="2021/05/01"/>
<meta name="citation_publication_date" content="2021/05/01"/>
<meta name="citation_author" content="Anson Biggs"/>
<!--/radix_placeholder_meta_tags-->
<meta name="citation_reference" content="citation_title=ARISS TLE"/>
<!--radix_placeholder_rmarkdown_metadata-->
<script type="text/json" id="radix-rmarkdown-metadata">
{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","description","draft","author","repository_url","date","fig_width","fig_align","output","categories","bibliography","creative_commons","preview","citation_url","canonical_url"]}},"value":[{"type":"character","attributes":{},"value":["ISS Eclipse Determination"]},{"type":"character","attributes":{},"value":["Determining how much sunlight a body orbiting a planet is receiving."]},{"type":"logical","attributes":{},"value":[false]},{"type":"list","attributes":{},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["name","url"]}},"value":[{"type":"character","attributes":{},"value":["Anson Biggs"]},{"type":"character","attributes":{},"value":["https://ansonbiggs.com"]}]}]},{"type":"character","attributes":{},"value":["https://gitlab.com/lander-team/air-prop-simulation"]},{"type":"character","attributes":{},"value":["05-01-2021"]},{"type":"integer","attributes":{},"value":[6]},{"type":"character","attributes":{},"value":["center"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained"]}},"value":[{"type":"logical","attributes":{},"value":[false]}]}]},{"type":"character","attributes":{},"value":["Julia","Astrodynamics"]},{"type":"character","attributes":{},"value":["citations.bib"]},{"type":"character","attributes":{},"value":["CC BY"]},{"type":"character","attributes":{},"value":["preview.png"]},{"type":"character","attributes":{},"value":["https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"]},{"type":"character","attributes":{},"value":["https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"]}]}
</script>
<!--/radix_placeholder_rmarkdown_metadata-->
<script type="text/json" id="radix-resource-manifest">
{"type":"character","attributes":{},"value":["citations.bib","geometry.svg","iss-eclipse-determination_files/anchor-4.2.2/anchor.min.js","iss-eclipse-determination_files/bowser-1.9.3/bowser.min.js","iss-eclipse-determination_files/distill-2.2.21/template.v2.js","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-6-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-7-J1.png","iss-eclipse-determination_files/header-attrs-2.7/header-attrs.js","iss-eclipse-determination_files/jquery-1.11.3/jquery.min.js","iss-eclipse-determination_files/popper-2.6.0/popper.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-bundle.umd.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-light-border.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.umd.min.js","iss-eclipse-determination_files/webcomponents-2.0.0/webcomponents.js","preview.png","vectors_radiuss.svg"]}
</script>
<!--radix_placeholder_navigation_in_header-->
<meta name="distill:offset" content="../.."/>
<script type="application/javascript">
window.headroom_prevent_pin = false;
window.document.addEventListener("DOMContentLoaded", function (event) {
// initialize headroom for banner
var header = $('header').get(0);
var headerHeight = header.offsetHeight;
var headroom = new Headroom(header, {
tolerance: 5,
onPin : function() {
if (window.headroom_prevent_pin) {
window.headroom_prevent_pin = false;
headroom.unpin();
}
}
});
headroom.init();
if(window.location.hash)
headroom.unpin();
$(header).addClass('headroom--transition');
// offset scroll location for banner on hash change
// (see: https://github.com/WickyNilliams/headroom.js/issues/38)
window.addEventListener("hashchange", function(event) {
window.scrollTo(0, window.pageYOffset - (headerHeight + 25));
});
// responsive menu
$('.distill-site-header').each(function(i, val) {
var topnav = $(this);
var toggle = topnav.find('.nav-toggle');
toggle.on('click', function() {
topnav.toggleClass('responsive');
});
});
// nav dropdowns
$('.nav-dropbtn').click(function(e) {
$(this).next('.nav-dropdown-content').toggleClass('nav-dropdown-active');
$(this).parent().siblings('.nav-dropdown')
.children('.nav-dropdown-content').removeClass('nav-dropdown-active');
});
$("body").click(function(e){
$('.nav-dropdown-content').removeClass('nav-dropdown-active');
});
$(".nav-dropdown").click(function(e){
e.stopPropagation();
});
});
</script>
<style type="text/css">
/* Theme (user-documented overrideables for nav appearance) */
.distill-site-nav {
color: rgba(255, 255, 255, 0.8);
background-color: #0F2E3D;
font-size: 15px;
font-weight: 300;
}
.distill-site-nav a {
color: inherit;
text-decoration: none;
}
.distill-site-nav a:hover {
color: white;
}
@media print {
.distill-site-nav {
display: none;
}
}
.distill-site-header {
}
.distill-site-footer {
}
/* Site Header */
.distill-site-header {
width: 100%;
box-sizing: border-box;
z-index: 3;
}
.distill-site-header .nav-left {
display: inline-block;
margin-left: 8px;
}
@media screen and (max-width: 768px) {
.distill-site-header .nav-left {
margin-left: 0;
}
}
.distill-site-header .nav-right {
float: right;
margin-right: 8px;
}
.distill-site-header a,
.distill-site-header .title {
display: inline-block;
text-align: center;
padding: 14px 10px 14px 10px;
}
.distill-site-header .title {
font-size: 18px;
min-width: 150px;
}
.distill-site-header .logo {
padding: 0;
}
.distill-site-header .logo img {
display: none;
max-height: 20px;
width: auto;
margin-bottom: -4px;
}
.distill-site-header .nav-image img {
max-height: 18px;
width: auto;
display: inline-block;
margin-bottom: -3px;
}
@media screen and (min-width: 1000px) {
.distill-site-header .logo img {
display: inline-block;
}
.distill-site-header .nav-left {
margin-left: 20px;
}
.distill-site-header .nav-right {
margin-right: 20px;
}
.distill-site-header .title {
padding-left: 12px;
}
}
.distill-site-header .nav-toggle {
display: none;
}
.nav-dropdown {
display: inline-block;
position: relative;
}
.nav-dropdown .nav-dropbtn {
border: none;
outline: none;
color: rgba(255, 255, 255, 0.8);
padding: 16px 10px;
background-color: transparent;
font-family: inherit;
font-size: inherit;
font-weight: inherit;
margin: 0;
margin-top: 1px;
z-index: 2;
}
.nav-dropdown-content {
display: none;
position: absolute;
background-color: white;
min-width: 200px;
border: 1px solid rgba(0,0,0,0.15);
border-radius: 4px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.1);
z-index: 1;
margin-top: 2px;
white-space: nowrap;
padding-top: 4px;
padding-bottom: 4px;
}
.nav-dropdown-content hr {
margin-top: 4px;
margin-bottom: 4px;
border: none;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.nav-dropdown-active {
display: block;
}
.nav-dropdown-content a, .nav-dropdown-content .nav-dropdown-header {
color: black;
padding: 6px 24px;
text-decoration: none;
display: block;
text-align: left;
}
.nav-dropdown-content .nav-dropdown-header {
display: block;
padding: 5px 24px;
padding-bottom: 0;
text-transform: uppercase;
font-size: 14px;
color: #999999;
white-space: nowrap;
}
.nav-dropdown:hover .nav-dropbtn {
color: white;
}
.nav-dropdown-content a:hover {
background-color: #ddd;
color: black;
}
.nav-right .nav-dropdown-content {
margin-left: -45%;
right: 0;
}
@media screen and (max-width: 768px) {
.distill-site-header a, .distill-site-header .nav-dropdown {display: none;}
.distill-site-header a.nav-toggle {
float: right;
display: block;
}
.distill-site-header .title {
margin-left: 0;
}
.distill-site-header .nav-right {
margin-right: 0;
}
.distill-site-header {
overflow: hidden;
}
.nav-right .nav-dropdown-content {
margin-left: 0;
}
}
@media screen and (max-width: 768px) {
.distill-site-header.responsive {position: relative; min-height: 500px; }
.distill-site-header.responsive a.nav-toggle {
position: absolute;
right: 0;
top: 0;
}
.distill-site-header.responsive a,
.distill-site-header.responsive .nav-dropdown {
display: block;
text-align: left;
}
.distill-site-header.responsive .nav-left,
.distill-site-header.responsive .nav-right {
width: 100%;
}
.distill-site-header.responsive .nav-dropdown {float: none;}
.distill-site-header.responsive .nav-dropdown-content {position: relative;}
.distill-site-header.responsive .nav-dropdown .nav-dropbtn {
display: block;
width: 100%;
text-align: left;
}
}
/* Site Footer */
.distill-site-footer {
width: 100%;
overflow: hidden;
box-sizing: border-box;
z-index: 3;
margin-top: 30px;
padding-top: 30px;
padding-bottom: 30px;
text-align: center;
}
/* Headroom */
d-title {
padding-top: 6rem;
}
@media print {
d-title {
padding-top: 4rem;
}
}
.headroom {
z-index: 1000;
position: fixed;
top: 0;
left: 0;
right: 0;
}
.headroom--transition {
transition: all .4s ease-in-out;
}
.headroom--unpinned {
top: -100px;
}
.headroom--pinned {
top: 0;
}
/* adjust viewport for navbar height */
/* helps vertically center bootstrap (non-distill) content */
.min-vh-100 {
min-height: calc(100vh - 100px) !important;
}
</style>
<script src="../../site_libs/jquery-1.11.3/jquery.min.js"></script>
<link href="../../site_libs/font-awesome-5.1.0/css/all.css" rel="stylesheet"/>
<link href="../../site_libs/font-awesome-5.1.0/css/v4-shims.css" rel="stylesheet"/>
<script src="../../site_libs/headroom-0.9.4/headroom.min.js"></script>
<script src="../../site_libs/autocomplete-0.37.1/autocomplete.min.js"></script>
<script src="../../site_libs/fuse-6.4.1/fuse.min.js"></script>
<script type="application/javascript">
function getMeta(metaName) {
var metas = document.getElementsByTagName('meta');
for (let i = 0; i < metas.length; i++) {
if (metas[i].getAttribute('name') === metaName) {
return metas[i].getAttribute('content');
}
}
return '';
}
function offsetURL(url) {
var offset = getMeta('distill:offset');
return offset ? offset + '/' + url : url;
}
function createFuseIndex() {
// create fuse index
var options = {
keys: [
{ name: 'title', weight: 20 },
{ name: 'categories', weight: 15 },
{ name: 'description', weight: 10 },
{ name: 'contents', weight: 5 },
],
ignoreLocation: true,
threshold: 0
};
var fuse = new window.Fuse([], options);
// fetch the main search.json
return fetch(offsetURL('search.json'))
.then(function(response) {
if (response.status == 200) {
return response.json().then(function(json) {
// index main articles
json.articles.forEach(function(article) {
fuse.add(article);
});
// download collections and index their articles
return Promise.all(json.collections.map(function(collection) {
return fetch(offsetURL(collection)).then(function(response) {
if (response.status === 200) {
return response.json().then(function(articles) {
articles.forEach(function(article) {
fuse.add(article);
});
})
} else {
return Promise.reject(
new Error('Unexpected status from search index request: ' +
response.status)
);
}
});
})).then(function() {
return fuse;
});
});
} else {
return Promise.reject(
new Error('Unexpected status from search index request: ' +
response.status)
);
}
});
}
window.document.addEventListener("DOMContentLoaded", function (event) {
// get search element (bail if we don't have one)
var searchEl = window.document.getElementById('distill-search');
if (!searchEl)
return;
createFuseIndex()
.then(function(fuse) {
// make search box visible
searchEl.classList.remove('hidden');
// initialize autocomplete
var options = {
autoselect: true,
hint: false,
minLength: 2,
};
window.autocomplete(searchEl, options, [{
source: function(query, callback) {
const searchOptions = {
isCaseSensitive: false,
shouldSort: true,
minMatchCharLength: 2,
limit: 10,
};
var results = fuse.search(query, searchOptions);
callback(results
.map(function(result) { return result.item; })
);
},
templates: {
suggestion: function(suggestion) {
var img = suggestion.preview && Object.keys(suggestion.preview).length > 0
? `<img src="${offsetURL(suggestion.preview)}"</img>`
: '';
var html = `
<div class="search-item">
<h3>${suggestion.title}</h3>
<div class="search-item-description">
${suggestion.description || ''}
</div>
<div class="search-item-preview">
${img}
</div>
</div>
`;
return html;
}
}
}]).on('autocomplete:selected', function(event, suggestion) {
window.location.href = offsetURL(suggestion.path);
});
// remove inline display style on autocompleter (we want to
// manage responsive display via css)
$('.algolia-autocomplete').css("display", "");
})
.catch(function(error) {
console.log(error);
});
});
</script>
<style type="text/css">
.nav-search {
font-size: x-small;
}
/* Algolioa Autocomplete */
.algolia-autocomplete {
display: inline-block;
margin-left: 10px;
vertical-align: sub;
background-color: white;
color: black;
padding: 6px;
padding-top: 8px;
padding-bottom: 0;
border-radius: 6px;
border: 1px #0F2E3D solid;
width: 180px;
}
@media screen and (max-width: 768px) {
.distill-site-nav .algolia-autocomplete {
display: none;
visibility: hidden;
}
.distill-site-nav.responsive .algolia-autocomplete {
display: inline-block;
visibility: visible;
}
.distill-site-nav.responsive .algolia-autocomplete .aa-dropdown-menu {
margin-left: 0;
width: 400px;
max-height: 400px;
}
}
.algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint {
width: 90%;
outline: none;
border: none;
}
.algolia-autocomplete .aa-hint {
color: #999;
}
.algolia-autocomplete .aa-dropdown-menu {
width: 550px;
max-height: 70vh;
overflow-x: visible;
overflow-y: scroll;
padding: 5px;
margin-top: 3px;
margin-left: -150px;
background-color: #fff;
border-radius: 5px;
border: 1px solid #999;
border-top: none;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion {
cursor: pointer;
padding: 5px 4px;
border-bottom: 1px solid #eee;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:last-of-type {
border-bottom: none;
margin-bottom: 2px;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item {
overflow: hidden;
font-size: 0.8em;
line-height: 1.4em;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item h3 {
font-size: 1rem;
margin-block-start: 0;
margin-block-end: 5px;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-description {
display: inline-block;
overflow: hidden;
height: 2.8em;
width: 80%;
margin-right: 4%;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview {
display: inline-block;
width: 15%;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img {
height: 3em;
width: auto;
display: none;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img[src] {
display: initial;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor {
background-color: #eee;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em {
font-weight: bold;
font-style: normal;
}
</style>
<!--/radix_placeholder_navigation_in_header-->
<!--radix_placeholder_distill-->
<style type="text/css">
body {
background-color: white;
}
.pandoc-table {
width: 100%;
}
.pandoc-table>caption {
margin-bottom: 10px;
}
.pandoc-table th:not([align]) {
text-align: left;
}
.pagedtable-footer {
font-size: 15px;
}
d-byline .byline {
grid-template-columns: 2fr 2fr;
}
d-byline .byline h3 {
margin-block-start: 1.5em;
}
d-byline .byline .authors-affiliations h3 {
margin-block-start: 0.5em;
}
.authors-affiliations .orcid-id {
width: 16px;
height:16px;
margin-left: 4px;
margin-right: 4px;
vertical-align: middle;
padding-bottom: 2px;
}
d-title .dt-tags {
margin-top: 1em;
grid-column: text;
}
.dt-tags .dt-tag {
text-decoration: none;
display: inline-block;
color: rgba(0,0,0,0.6);
padding: 0em 0.4em;
margin-right: 0.5em;
margin-bottom: 0.4em;
font-size: 70%;
border: 1px solid rgba(0,0,0,0.2);
border-radius: 3px;
text-transform: uppercase;
font-weight: 500;
}
d-article table.gt_table td,
d-article table.gt_table th {
border-bottom: none;
}
.html-widget {
margin-bottom: 2.0em;
}
.l-screen-inset {
padding-right: 16px;
}
.l-screen .caption {
margin-left: 10px;
}
.shaded {
background: rgb(247, 247, 247);
padding-top: 20px;
padding-bottom: 20px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.shaded .html-widget {
margin-bottom: 0;
border: 1px solid rgba(0, 0, 0, 0.1);
}
.shaded .shaded-content {
background: white;
}
.text-output {
margin-top: 0;
line-height: 1.5em;
}
.hidden {
display: none !important;
}
d-article {
padding-top: 2.5rem;
padding-bottom: 30px;
}
d-appendix {
padding-top: 30px;
}
d-article>p>img {
width: 100%;
}
d-article h2 {
margin: 1rem 0 1.5rem 0;
}
d-article h3 {
margin-top: 1.5rem;
}
d-article iframe {
border: 1px solid rgba(0, 0, 0, 0.1);
margin-bottom: 2.0em;
width: 100%;
}
/* Tweak code blocks */
d-article div.sourceCode code,
d-article pre code {
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
}
d-article pre,
d-article div.sourceCode,
d-article div.sourceCode pre {
overflow: auto;
}
d-article div.sourceCode {
background-color: white;
}
d-article div.sourceCode pre {
padding-left: 10px;
font-size: 12px;
border-left: 2px solid rgba(0,0,0,0.1);
}
d-article pre {
font-size: 12px;
color: black;
background: none;
margin-top: 0;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
d-article pre a {
border-bottom: none;
}
d-article pre a:hover {
border-bottom: none;
text-decoration: underline;
}
d-article details {
grid-column: text;
margin-bottom: 0.8em;
}
@media(min-width: 768px) {
d-article pre,
d-article div.sourceCode,
d-article div.sourceCode pre {
overflow: visible !important;
}
d-article div.sourceCode pre {
padding-left: 18px;
font-size: 14px;
}
d-article pre {
font-size: 14px;
}
}
figure img.external {
background: white;
border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
padding: 18px;
box-sizing: border-box;
}
/* CSS for d-contents */
.d-contents {
grid-column: text;
color: rgba(0,0,0,0.8);
font-size: 0.9em;
padding-bottom: 1em;
margin-bottom: 1em;
padding-bottom: 0.5em;
margin-bottom: 1em;
padding-left: 0.25em;
justify-self: start;
}
@media(min-width: 1000px) {
.d-contents.d-contents-float {
height: 0;
grid-column-start: 1;
grid-column-end: 4;
justify-self: center;
padding-right: 3em;
padding-left: 2em;
}
}
.d-contents nav h3 {
font-size: 18px;
margin-top: 0;
margin-bottom: 1em;
}
.d-contents li {
list-style-type: none
}
.d-contents nav > ul {
padding-left: 0;
}
.d-contents ul {
padding-left: 1em
}
.d-contents nav ul li {
margin-top: 0.6em;
margin-bottom: 0.2em;
}
.d-contents nav a {
font-size: 13px;
border-bottom: none;
text-decoration: none
color: rgba(0, 0, 0, 0.8);
}
.d-contents nav a:hover {
text-decoration: underline solid rgba(0, 0, 0, 0.6)
}
.d-contents nav > ul > li > a {
font-weight: 600;
}
.d-contents nav > ul > li > ul {
font-weight: inherit;
}
.d-contents nav > ul > li > ul > li {
margin-top: 0.2em;
}
.d-contents nav ul {
margin-top: 0;
margin-bottom: 0.25em;
}
.d-article-with-toc h2:nth-child(2) {
margin-top: 0;
}
/* Figure */
.figure {
position: relative;
margin-bottom: 2.5em;
margin-top: 1.5em;
}
.figure img {
width: 100%;
}
.figure .caption {
color: rgba(0, 0, 0, 0.6);
font-size: 12px;
line-height: 1.5em;
}
.figure img.external {
background: white;
border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
padding: 18px;
box-sizing: border-box;
}
.figure .caption a {
color: rgba(0, 0, 0, 0.6);
}
.figure .caption b,
.figure .caption strong, {
font-weight: 600;
color: rgba(0, 0, 0, 1.0);
}
/* Citations */
d-article .citation {
color: inherit;
cursor: inherit;
}
div.hanging-indent{
margin-left: 1em; text-indent: -1em;
}
/* Citation hover box */
.tippy-box[data-theme~=light-border] {
background-color: rgba(250, 250, 250, 0.95);
}
.tippy-content > p {
margin-bottom: 0;
padding: 2px;
}
/* Tweak 1000px media break to show more text */
@media(min-width: 1000px) {
.base-grid,
distill-header,
d-title,
d-abstract,
d-article,
d-appendix,
distill-appendix,
d-byline,
d-footnote-list,
d-citation-list,
distill-footer {
grid-template-columns: [screen-start] 1fr [page-start kicker-start] 80px [middle-start] 50px [text-start kicker-end] 65px 65px 65px 65px 65px 65px 65px 65px [text-end gutter-start] 65px [middle-end] 65px [page-end gutter-end] 1fr [screen-end];
grid-column-gap: 16px;
}
.grid {
grid-column-gap: 16px;
}
d-article {
font-size: 1.06rem;
line-height: 1.7em;
}
figure .caption, .figure .caption, figure figcaption {
font-size: 13px;
}
}
@media(min-width: 1180px) {
.base-grid,
distill-header,
d-title,
d-abstract,
d-article,
d-appendix,
distill-appendix,
d-byline,
d-footnote-list,
d-citation-list,
distill-footer {
grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];
grid-column-gap: 32px;
}
.grid {
grid-column-gap: 32px;
}
}
/* Get the citation styles for the appendix (not auto-injected on render since
we do our own rendering of the citation appendix) */
d-appendix .citation-appendix,
.d-appendix .citation-appendix {
font-size: 11px;
line-height: 15px;
border-left: 1px solid rgba(0, 0, 0, 0.1);
padding-left: 18px;
border: 1px solid rgba(0,0,0,0.1);
background: rgba(0, 0, 0, 0.02);
padding: 10px 18px;
border-radius: 3px;
color: rgba(150, 150, 150, 1);
overflow: hidden;
margin-top: -12px;
white-space: pre-wrap;
word-wrap: break-word;
}
/* Include appendix styles here so they can be overridden */
d-appendix {
contain: layout style;
font-size: 0.8em;
line-height: 1.7em;
margin-top: 60px;
margin-bottom: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1);
color: rgba(0,0,0,0.5);
padding-top: 60px;
padding-bottom: 48px;
}
d-appendix h3 {
grid-column: page-start / text-start;
font-size: 15px;
font-weight: 500;
margin-top: 1em;
margin-bottom: 0;
color: rgba(0,0,0,0.65);
}
d-appendix h3 + * {
margin-top: 1em;
}
d-appendix ol {
padding: 0 0 0 15px;
}
@media (min-width: 768px) {
d-appendix ol {
padding: 0 0 0 30px;
margin-left: -30px;
}
}
d-appendix li {
margin-bottom: 1em;
}
d-appendix a {
color: rgba(0, 0, 0, 0.6);
}
d-appendix > * {
grid-column: text;
}
d-appendix > d-footnote-list,
d-appendix > d-citation-list,
d-appendix > distill-appendix {
grid-column: screen;
}
/* Include footnote styles here so they can be overridden */
d-footnote-list {
contain: layout style;
}
d-footnote-list > * {
grid-column: text;
}
d-footnote-list a.footnote-backlink {
color: rgba(0,0,0,0.3);
padding-left: 0.5em;
}
/* Anchor.js */
.anchorjs-link {
/*transition: all .25s linear; */
text-decoration: none;
border-bottom: none;
}
*:hover > .anchorjs-link {
margin-left: -1.125em !important;
text-decoration: none;
border-bottom: none;
}
/* Social footer */
.social_footer {
margin-top: 30px;
margin-bottom: 0;
color: rgba(0,0,0,0.67);
}
.disqus-comments {
margin-right: 30px;
}
.disqus-comment-count {
border-bottom: 1px solid rgba(0, 0, 0, 0.4);
cursor: pointer;
}
#disqus_thread {
margin-top: 30px;
}
.article-sharing a {
border-bottom: none;
margin-right: 8px;
}
.article-sharing a:hover {
border-bottom: none;
}
.sidebar-section.subscribe {
font-size: 12px;
line-height: 1.6em;
}
.subscribe p {
margin-bottom: 0.5em;
}
.article-footer .subscribe {
font-size: 15px;
margin-top: 45px;
}
.sidebar-section.custom {
font-size: 12px;
line-height: 1.6em;
}
.custom p {
margin-bottom: 0.5em;
}
/* Styles for listing layout (hide title) */
.layout-listing d-title, .layout-listing .d-title {
display: none;
}
/* Styles for posts lists (not auto-injected) */
.posts-with-sidebar {
padding-left: 45px;
padding-right: 45px;
}
.posts-list .description h2,
.posts-list .description p {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
}
.posts-list .description h2 {
font-weight: 700;
border-bottom: none;
padding-bottom: 0;
}
.posts-list h2.post-tag {
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
padding-bottom: 12px;
}
.posts-list {
margin-top: 60px;
margin-bottom: 24px;
}
.posts-list .post-preview {
text-decoration: none;
overflow: hidden;
display: block;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
padding: 24px 0;
}
.post-preview-last {
border-bottom: none !important;
}
.posts-list .posts-list-caption {
grid-column: screen;
font-weight: 400;
}
.posts-list .post-preview h2 {
margin: 0 0 6px 0;
line-height: 1.2em;
font-style: normal;
font-size: 24px;
}
.posts-list .post-preview p {
margin: 0 0 12px 0;
line-height: 1.4em;
font-size: 16px;
}
.posts-list .post-preview .thumbnail {
box-sizing: border-box;
margin-bottom: 24px;
position: relative;
max-width: 500px;
}
.posts-list .post-preview img {
width: 100%;
display: block;
}
.posts-list .metadata {
font-size: 12px;
line-height: 1.4em;
margin-bottom: 18px;
}
.posts-list .metadata > * {
display: inline-block;
}
.posts-list .metadata .publishedDate {
margin-right: 2em;
}
.posts-list .metadata .dt-authors {
display: block;
margin-top: 0.3em;
margin-right: 2em;
}
.posts-list .dt-tags {
display: block;
line-height: 1em;
}
.posts-list .dt-tags .dt-tag {
display: inline-block;
color: rgba(0,0,0,0.6);
padding: 0.3em 0.4em;
margin-right: 0.2em;
margin-bottom: 0.4em;
font-size: 60%;
border: 1px solid rgba(0,0,0,0.2);
border-radius: 3px;
text-transform: uppercase;
font-weight: 500;
}
.posts-list img {
opacity: 1;
}
.posts-list img[data-src] {
opacity: 0;
}
.posts-more {
clear: both;
}
.posts-sidebar {
font-size: 16px;
}
.posts-sidebar h3 {
font-size: 16px;
margin-top: 0;
margin-bottom: 0.5em;
font-weight: 400;
text-transform: uppercase;
}
.sidebar-section {
margin-bottom: 30px;
}
.categories ul {
list-style-type: none;
margin: 0;
padding: 0;
}
.categories li {
color: rgba(0, 0, 0, 0.8);
margin-bottom: 0;
}
.categories li>a {
border-bottom: none;
}
.categories li>a:hover {
border-bottom: 1px solid rgba(0, 0, 0, 0.4);
}
.categories .active {
font-weight: 600;
}
.categories .category-count {
color: rgba(0, 0, 0, 0.4);
}
@media(min-width: 768px) {
.posts-list .post-preview h2 {
font-size: 26px;
}
.posts-list .post-preview .thumbnail {
float: right;
width: 30%;
margin-bottom: 0;
}
.posts-list .post-preview .description {
float: left;
width: 45%;
}
.posts-list .post-preview .metadata {
float: left;
width: 20%;
margin-top: 8px;
}
.posts-list .post-preview p {
margin: 0 0 12px 0;
line-height: 1.5em;
font-size: 16px;
}
.posts-with-sidebar .posts-list {
float: left;
width: 75%;
}
.posts-with-sidebar .posts-sidebar {
float: right;
width: 20%;
margin-top: 60px;
padding-top: 24px;
padding-bottom: 24px;
}
}
/* Improve display for browsers without grid (IE/Edge <= 15) */
.downlevel {
line-height: 1.6em;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
margin: 0;
}
.downlevel .d-title {
padding-top: 6rem;
padding-bottom: 1.5rem;
}
.downlevel .d-title h1 {
font-size: 50px;
font-weight: 700;
line-height: 1.1em;
margin: 0 0 0.5rem;
}
.downlevel .d-title p {
font-weight: 300;
font-size: 1.2rem;
line-height: 1.55em;
margin-top: 0;
}
.downlevel .d-byline {
padding-top: 0.8em;
padding-bottom: 0.8em;
font-size: 0.8rem;
line-height: 1.8em;
}
.downlevel .section-separator {
border: none;
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
.downlevel .d-article {
font-size: 1.06rem;
line-height: 1.7em;
padding-top: 1rem;
padding-bottom: 2rem;
}
.downlevel .d-appendix {
padding-left: 0;
padding-right: 0;
max-width: none;
font-size: 0.8em;
line-height: 1.7em;
margin-bottom: 0;
color: rgba(0,0,0,0.5);
padding-top: 40px;
padding-bottom: 48px;
}
.downlevel .footnotes ol {
padding-left: 13px;
}
.downlevel .base-grid,
.downlevel .distill-header,
.downlevel .d-title,
.downlevel .d-abstract,
.downlevel .d-article,
.downlevel .d-appendix,
.downlevel .distill-appendix,
.downlevel .d-byline,
.downlevel .d-footnote-list,
.downlevel .d-citation-list,
.downlevel .distill-footer,
.downlevel .appendix-bottom,
.downlevel .posts-container {
padding-left: 40px;
padding-right: 40px;
}
@media(min-width: 768px) {
.downlevel .base-grid,
.downlevel .distill-header,
.downlevel .d-title,
.downlevel .d-abstract,
.downlevel .d-article,
.downlevel .d-appendix,
.downlevel .distill-appendix,
.downlevel .d-byline,
.downlevel .d-footnote-list,
.downlevel .d-citation-list,
.downlevel .distill-footer,
.downlevel .appendix-bottom,
.downlevel .posts-container {
padding-left: 150px;
padding-right: 150px;
max-width: 900px;
}
}
.downlevel pre code {
display: block;
border-left: 2px solid rgba(0, 0, 0, .1);
padding: 0 0 0 20px;
font-size: 14px;
}
.downlevel code, .downlevel pre {
color: black;
background: none;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
.downlevel .posts-list .post-preview {
color: inherit;
}
</style>
<script type="application/javascript">
function is_downlevel_browser() {
if (bowser.isUnsupportedBrowser({ msie: "12", msedge: "16"},
window.navigator.userAgent)) {
return true;
} else {
return window.load_distill_framework === undefined;
}
}
// show body when load is complete
function on_load_complete() {
// add anchors
if (window.anchors) {
window.anchors.options.placement = 'left';
window.anchors.add('d-article > h2, d-article > h3, d-article > h4, d-article > h5');
}
// set body to visible
document.body.style.visibility = 'visible';
// force redraw for leaflet widgets
if (window.HTMLWidgets) {
var maps = window.HTMLWidgets.findAll(".leaflet");
$.each(maps, function(i, el) {
var map = this.getMap();
map.invalidateSize();
map.eachLayer(function(layer) {
if (layer instanceof L.TileLayer)
layer.redraw();
});
});
}
// trigger 'shown' so htmlwidgets resize
$('d-article').trigger('shown');
}
function init_distill() {
init_common();
// create front matter
var front_matter = $('<d-front-matter></d-front-matter>');
$('#distill-front-matter').wrap(front_matter);
// create d-title
$('.d-title').changeElementType('d-title');
// create d-byline
var byline = $('<d-byline></d-byline>');
$('.d-byline').replaceWith(byline);
// create d-article
var article = $('<d-article></d-article>');
$('.d-article').wrap(article).children().unwrap();
// move posts container into article
$('.posts-container').appendTo($('d-article'));
// create d-appendix
$('.d-appendix').changeElementType('d-appendix');
// flag indicating that we have appendix items
var appendix = $('.appendix-bottom').children('h3').length > 0;
// replace footnotes with <d-footnote>
$('.footnote-ref').each(function(i, val) {
appendix = true;
var href = $(this).attr('href');
var id = href.replace('#', '');
var fn = $('#' + id);
var fn_p = $('#' + id + '>p');
fn_p.find('.footnote-back').remove();
var text = fn_p.html();
var dtfn = $('<d-footnote></d-footnote>');
dtfn.html(text);
$(this).replaceWith(dtfn);
});
// remove footnotes
$('.footnotes').remove();
// move refs into #references-listing
$('#references-listing').replaceWith($('#refs'));
$('h1.appendix, h2.appendix').each(function(i, val) {
$(this).changeElementType('h3');
});
$('h3.appendix').each(function(i, val) {
var id = $(this).attr('id');
$('.d-contents a[href="#' + id + '"]').parent().remove();
appendix = true;
$(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('d-appendix'));
});
// show d-appendix if we have appendix content
$("d-appendix").css('display', appendix ? 'grid' : 'none');
// localize layout chunks to just output
$('.layout-chunk').each(function(i, val) {
// capture layout
var layout = $(this).attr('data-layout');
// apply layout to markdown level block elements
var elements = $(this).children().not('details, div.sourceCode, pre, script');
elements.each(function(i, el) {
var layout_div = $('<div class="' + layout + '"></div>');
if (layout_div.hasClass('shaded')) {
var shaded_content = $('<div class="shaded-content"></div>');
$(this).wrap(shaded_content);
$(this).parent().wrap(layout_div);
} else {
$(this).wrap(layout_div);
}
});
// unwrap the layout-chunk div
$(this).children().unwrap();
});
// remove code block used to force highlighting css
$('.distill-force-highlighting-css').parent().remove();
// remove empty line numbers inserted by pandoc when using a
// custom syntax highlighting theme
$('code.sourceCode a:empty').remove();
// load distill framework
load_distill_framework();
// wait for window.distillRunlevel == 4 to do post processing
function distill_post_process() {
if (!window.distillRunlevel || window.distillRunlevel < 4)
return;
// hide author/affiliations entirely if we have no authors
var front_matter = JSON.parse($("#distill-front-matter").html());
var have_authors = front_matter.authors && front_matter.authors.length > 0;
if (!have_authors)
$('d-byline').addClass('hidden');
// article with toc class
$('.d-contents').parent().addClass('d-article-with-toc');
// strip links that point to #
$('.authors-affiliations').find('a[href="#"]').removeAttr('href');
// add orcid ids
$('.authors-affiliations').find('.author').each(function(i, el) {
var orcid_id = front_matter.authors[i].orcidID;
if (orcid_id) {
var a = $('<a></a>');
a.attr('href', 'https://orcid.org/' + orcid_id);
var img = $('<img></img>');
img.addClass('orcid-id');
img.attr('alt', 'ORCID ID');
img.attr('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==');
a.append(img);
$(this).append(a);
}
});
// hide elements of author/affiliations grid that have no value
function hide_byline_column(caption) {
$('d-byline').find('h3:contains("' + caption + '")').parent().css('visibility', 'hidden');
}
// affiliations
var have_affiliations = false;
for (var i = 0; i<front_matter.authors.length; ++i) {
var author = front_matter.authors[i];
if (author.affiliation !== "&nbsp;") {
have_affiliations = true;
break;
}
}
if (!have_affiliations)
$('d-byline').find('h3:contains("Affiliations")').css('visibility', 'hidden');
// published date
if (!front_matter.publishedDate)
hide_byline_column("Published");
// document object identifier
var doi = $('d-byline').find('h3:contains("DOI")');
var doi_p = doi.next().empty();
if (!front_matter.doi) {
// if we have a citation and valid citationText then link to that
if ($('#citation').length > 0 && front_matter.citationText) {
doi.html('Citation');
$('<a href="#citation"></a>')
.text(front_matter.citationText)
.appendTo(doi_p);
} else {
hide_byline_column("DOI");
}
} else {
$('<a></a>')
.attr('href', "https://doi.org/" + front_matter.doi)
.html(front_matter.doi)
.appendTo(doi_p);
}
// change plural form of authors/affiliations
if (front_matter.authors.length === 1) {
var grid = $('.authors-affiliations');
grid.children('h3:contains("Authors")').text('Author');
grid.children('h3:contains("Affiliations")').text('Affiliation');
}
// remove d-appendix and d-footnote-list local styles
$('d-appendix > style:first-child').remove();
$('d-footnote-list > style:first-child').remove();
// move appendix-bottom entries to the bottom
$('.appendix-bottom').appendTo('d-appendix').children().unwrap();
$('.appendix-bottom').remove();
// hoverable references
$('span.citation[data-cites]').each(function() {
var refHtml = $('#ref-' + $(this).attr('data-cites')).html();
window.tippy(this, {
allowHTML: true,
content: refHtml,
maxWidth: 500,
interactive: true,
interactiveBorder: 10,
theme: 'light-border',
placement: 'bottom-start'
});
});
// clear polling timer
clearInterval(tid);
// show body now that everything is ready
on_load_complete();
}
var tid = setInterval(distill_post_process, 50);
distill_post_process();
}
function init_downlevel() {
init_common();
// insert hr after d-title
$('.d-title').after($('<hr class="section-separator"/>'));
// check if we have authors
var front_matter = JSON.parse($("#distill-front-matter").html());
var have_authors = front_matter.authors && front_matter.authors.length > 0;
// manage byline/border
if (!have_authors)
$('.d-byline').remove();
$('.d-byline').after($('<hr class="section-separator"/>'));
$('.d-byline a').remove();
// remove toc
$('.d-contents').remove();
// move appendix elements
$('h1.appendix, h2.appendix').each(function(i, val) {
$(this).changeElementType('h3');
});
$('h3.appendix').each(function(i, val) {
$(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('.d-appendix'));
});
// inject headers into references and footnotes
var refs_header = $('<h3></h3>');
refs_header.text('References');
$('#refs').prepend(refs_header);
var footnotes_header = $('<h3></h3');
footnotes_header.text('Footnotes');
$('.footnotes').children('hr').first().replaceWith(footnotes_header);
// move appendix-bottom entries to the bottom
$('.appendix-bottom').appendTo('.d-appendix').children().unwrap();
$('.appendix-bottom').remove();
// remove appendix if it's empty
if ($('.d-appendix').children().length === 0)
$('.d-appendix').remove();
// prepend separator above appendix
$('.d-appendix').before($('<hr class="section-separator" style="clear: both"/>'));
// trim code
$('pre>code').each(function(i, val) {
$(this).html($.trim($(this).html()));
});
// move posts-container right before article
$('.posts-container').insertBefore($('.d-article'));
$('body').addClass('downlevel');
on_load_complete();
}
function init_common() {
// jquery plugin to change element types
(function($) {
$.fn.changeElementType = function(newType) {
var attrs = {};
$.each(this[0].attributes, function(idx, attr) {
attrs[attr.nodeName] = attr.nodeValue;
});
this.replaceWith(function() {
return $("<" + newType + "/>", attrs).append($(this).contents());
});
};
})(jQuery);
// prevent underline for linked images
$('a > img').parent().css({'border-bottom' : 'none'});
// mark non-body figures created by knitr chunks as 100% width
$('.layout-chunk').each(function(i, val) {
var figures = $(this).find('img, .html-widget');
if ($(this).attr('data-layout') !== "l-body") {
figures.css('width', '100%');
} else {
figures.css('max-width', '100%');
figures.filter("[width]").each(function(i, val) {
var fig = $(this);
fig.css('width', fig.attr('width') + 'px');
});
}
});
// auto-append index.html to post-preview links in file: protocol
// and in rstudio ide preview
$('.post-preview').each(function(i, val) {
if (window.location.protocol === "file:")
$(this).attr('href', $(this).attr('href') + "index.html");
});
// get rid of index.html references in header
if (window.location.protocol !== "file:") {
$('.distill-site-header a[href]').each(function(i,val) {
$(this).attr('href', $(this).attr('href').replace("index.html", "./"));
});
}
// add class to pandoc style tables
$('tr.header').parent('thead').parent('table').addClass('pandoc-table');
$('.kable-table').children('table').addClass('pandoc-table');
// add figcaption style to table captions
$('caption').parent('table').addClass("figcaption");
// initialize posts list
if (window.init_posts_list)
window.init_posts_list();
// implmement disqus comment link
$('.disqus-comment-count').click(function() {
window.headroom_prevent_pin = true;
$('#disqus_thread').toggleClass('hidden');
if (!$('#disqus_thread').hasClass('hidden')) {
var offset = $(this).offset();
$(window).resize();
$('html, body').animate({
scrollTop: offset.top - 35
});
}
});
}
document.addEventListener('DOMContentLoaded', function() {
if (is_downlevel_browser())
init_downlevel();
else
window.addEventListener('WebComponentsReady', init_distill);
});
</script>
<!--/radix_placeholder_distill-->
<script src="../../site_libs/header-attrs-2.7/header-attrs.js"></script>
<script src="../../site_libs/jquery-1.11.3/jquery.min.js"></script>
<script src="../../site_libs/popper-2.6.0/popper.min.js"></script>
<link href="../../site_libs/tippy-6.2.7/tippy.css" rel="stylesheet" />
<link href="../../site_libs/tippy-6.2.7/tippy-light-border.css" rel="stylesheet" />
<script src="../../site_libs/tippy-6.2.7/tippy.umd.min.js"></script>
<script src="../../site_libs/anchor-4.2.2/anchor.min.js"></script>
<script src="../../site_libs/bowser-1.9.3/bowser.min.js"></script>
<script src="../../site_libs/webcomponents-2.0.0/webcomponents.js"></script>
<script src="../../site_libs/distill-2.2.21/template.v2.js"></script>
<!--radix_placeholder_site_in_header-->
<!--/radix_placeholder_site_in_header-->
</head>
<body>
<!--radix_placeholder_front_matter-->
<script id="distill-front-matter" type="text/json">
{"title":"ISS Eclipse Determination","description":"Determining how much sunlight a body orbiting a planet is receiving.","authors":[{"author":"Anson Biggs","authorURL":"https://ansonbiggs.com","affiliation":"&nbsp;","affiliationURL":"#","orcidID":""}],"publishedDate":"2021-05-01T00:00:00.000-07:00","citationText":"Biggs, 2021"}
</script>
<!--/radix_placeholder_front_matter-->
<!--radix_placeholder_navigation_before_body-->
<header class="header header--fixed" role="banner">
<nav class="distill-site-nav distill-site-header">
<div class="nav-left">
<a href="../../index.html" class="title">Anson's Projects</a>
<input id="distill-search" class="nav-search hidden" type="text" placeholder="Search..."/>
</div>
<div class="nav-right">
<a href="../../about.html">About/Contact</a>
<a href="https://ansonbiggs.com">Resume</a>
<a href="../../index.xml">
<i class="fa fa-rss" aria-hidden="true"></i>
</a>
<a href="https://gitlab.com/MisterBiggs/projects">
<i class="fa fa-gitlab" aria-hidden="true"></i>
</a>
<a href="javascript:void(0);" class="nav-toggle">&#9776;</a>
</div>
</nav>
</header>
<!--/radix_placeholder_navigation_before_body-->
<!--radix_placeholder_site_before_body-->
<!--/radix_placeholder_site_before_body-->
<div class="d-title">
<h1>ISS Eclipse Determination</h1>
<!--radix_placeholder_categories-->
<div class="dt-tags">
<a href="../../index.html#category:Julia" class="dt-tag">Julia</a>
<a href="../../index.html#category:Astrodynamics" class="dt-tag">Astrodynamics</a>
</div>
<!--/radix_placeholder_categories-->
<p><p>Determining how much sunlight a body orbiting a planet is receiving.</p></p>
</div>
<div class="d-byline">
Anson Biggs <a href="https://ansonbiggs.com" class="uri">https://ansonbiggs.com</a>
<br/>05-01-2021
</div>
<div class="d-article">
<p>Determining the eclipses a satellite will encounter is a major driving factor when designing a mission in space. Thermal and power budgets have to be made with the fact that a satellite will periodically be in the complete darkness of space with no solar radiation to power the solar panels and keep the spacecraft from freezing.</p>
<h2 id="what-is-an-eclipse">What is an Eclipse</h2>
<figure>
<img src="geometry.svg" alt="Geometry of an Eclipse" /><figcaption aria-hidden="true">Geometry of an Eclipse</figcaption>
</figure>
<p>The above image is a simple representation of what an eclipse is. Youll notice there is the Umbra which is complete darkness, then the Penumbra which is a shadow of varying darkness, and then the rest of the orbit is in complete sunlight. For this example I will be using the ISS which has a very low orbit so the Penumbra isnt much of a problem. You can tell by looking at the diagram that higher altitude orbits would spend more time in the Penumbra.</p>
<figure>
<img src="vectors_radiuss.svg" alt="Body Radiuss and Position Vectors" /><figcaption aria-hidden="true">Body Radiuss and Position Vectors</figcaption>
</figure>
<p>Here is a more detailed view of the eclipse that will make it easier to explain the code. There are 2 Position vectors and 2 radiuss that need to be known for simple eclipse determination. There are more advanced cases where the atmosphere of the body your orbiting can greatly affect the Umbra and Penumbra, and other bodies could also potentially block the Sun, but for this example we will keep it simple since those have very little affect for the ISSs orbit. <code style="color:#0b7285">Rsun</code> and <code style="color:#c92a2a">Rbody</code> are the radiuss of the Sun and Body (In this case Earth) respectively. <code style="color:#5f3dc4">r_sun_body</code> is a vector from the center of the Sun to the center of the target body. For this example I will only be using one vector, but for more rigorous eclipse determination its important to calculate this at least once a day since it does significantly change over the course of a year. The reason that I am ignoring it at the moment is because there is currently no good way to calculate <a href="https://ssd.jpl.nasa.gov/?ephemerides">Ephemerides</a> in Julia but the package is being worked on so I may revisit this and do a more rigorous analysis in the future. <code style="color:#5c940d">r_body_sc</code> is a position vector from the center of the body being orbitted, to the center of our spacecraft.</p>
<h2 id="the-code">The Code</h2>
<div class="layout-chunk" data-layout="l-body">
<details>
<summary>
Show code
</summary>
<div class="sourceCode" id="cb1"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> Unitful</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> LinearAlgebra</span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> SatelliteToolbox</span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> Plots</span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="kw">using</span> Colors</span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a>theme(<span class="op">:</span>ggplot2)</span></code></pre></div>
</details>
</div>
<p>In order to get the orbit for the ISS I used a <a href="https://en.wikipedia.org/wiki/Two-line_element_set">Two-Line Element</a> which is a data format for explaining orbits. the US Joint Space Operations Center makes these widely available, but <a href="https://live.ariss.org/tle/" class="uri">https://live.ariss.org/tle/</a> makes the TLE for the ISS way more accessible <span class="citation" data-cites="ariss">(<a href="#ref-ariss" role="doc-biblioref"><span><span>ARISS</span> <span>TLE</span>,”</span> n.d.</a>)</span>. The Julia Package <a href="https://github.com/JuliaSpace/SatelliteToolbox.jl">SatelliteToolbox.jl</a> makes it super easy to turn a TLE into an orbit that can be propagated. Simply putting the TLE in a string and using the <code>tle</code> string macro like below and now we have access to the information to start making our ISS orbit.</p>
<div class="layout-chunk" data-layout="l-body">
<div class="sourceCode" id="cb2"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>ISS <span class="op">=</span> tle<span class="st">&quot;&quot;&quot;</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="st">ISS (ZARYA)</span></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="st">1 25544U 98067A 21103.84943184 .00000176 00000-0 11381-4 0 9990</span></span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a><span class="st">2 25544 51.6434 300.9481 0002858 223.8443 263.8789 15.48881793278621</span></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a><span class="st">&quot;&quot;&quot;</span></span></code></pre></div>
<pre><code>1-element Vector{TLE}:
TLE: ISS (ZARYA) (Epoch = 2021-04-13T20:23:10.911)</code></pre>
</div>
<p>Now that we have the TLE we can pass that into SatelliteToolboxs orbit propagator. Before we can propagate the orbit we need to have a range of time steps to pass into the propagator. The TLE gives the mean motion, n, which is the revolutions per day so using that we can calculate the amount of time required for one orbit which is all that were worried about for this analysis. The propagator returns a tuple containing the Orbital elements, a position vector with units meters, and a velocity vector with units meters per second. For this analysis were only worried about the position vector.</p>
<div class="layout-chunk" data-layout="l-body">
<pre class="juliam"><code>ISS[1].n</code></pre>
</div>
<div class="layout-chunk" data-layout="l-body">
<div class="sourceCode" id="cb5"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>orbit <span class="op">=</span> init_orbit_propagator(<span class="dt">Val</span>(<span class="op">:</span>twobody)<span class="op">,</span> ISS[<span class="fl">1</span>])<span class="op">;</span></span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a>time <span class="op">=</span> <span class="fl">0</span><span class="op">:</span><span class="fl">0.1</span><span class="op">:</span>((<span class="fl">24</span> <span class="op">/</span> ISS[<span class="fl">1</span>].n) <span class="op">.*</span> <span class="fl">60</span> <span class="op">*</span> <span class="fl">60</span>)<span class="op">;</span> <span class="co"># ISS[1].n gives the mean motion, or orbits per day.</span></span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a>o<span class="op">,</span> r<span class="op">,</span> v <span class="op">=</span> propagate<span class="op">!</span>(orbit<span class="op">,</span> time)<span class="op">;</span></span></code></pre></div>
</div>
<p>Now we just need way to use the radii and vectors discussed earlier to determine if the ISS is in the penumbra or umbra. This is a lot of pretty basic trigonometry and vector math.</p>
<p><code>add more discussion about the math</code></p>
<div class="layout-chunk" data-layout="l-body">
<div class="sourceCode" id="cb6"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span> sunlight(Rbody<span class="op">,</span> r_sun_body<span class="op">,</span> r_body_sc)</span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a> Rsun <span class="op">=</span> <span class="fl">695_700</span>u<span class="st">&quot;km&quot;</span></span>
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a> </span>
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a> hu <span class="op">=</span> Rbody <span class="op">*</span> norm(r_sun_body) <span class="op">/</span> (Rsun <span class="op">-</span> Rbody)</span>
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a> </span>
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true" tabindex="-1"></a> θe <span class="op">=</span> acos((r_sun_body ⋅ r_body_sc) <span class="op">/</span> (norm(r_sun_body) <span class="op">*</span> norm(r_body_sc)))</span>
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-8"><a href="#cb6-8" aria-hidden="true" tabindex="-1"></a> θu <span class="op">=</span> atan(Rbody <span class="op">/</span> hu)</span>
<span id="cb6-9"><a href="#cb6-9" aria-hidden="true" tabindex="-1"></a> du <span class="op">=</span> hu <span class="op">*</span> sin(θu) <span class="op">/</span> sin(θe <span class="op">+</span> θu)</span>
<span id="cb6-10"><a href="#cb6-10" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-11"><a href="#cb6-11" aria-hidden="true" tabindex="-1"></a> θp <span class="op">=</span> π <span class="op">-</span> atan(norm(r_sun_body) <span class="op">/</span> (Rsun <span class="op">+</span> Rbody))</span>
<span id="cb6-12"><a href="#cb6-12" aria-hidden="true" tabindex="-1"></a> dp <span class="op">=</span> Rbody <span class="op">*</span> sin(θp) <span class="op">/</span> cos(θe <span class="op">-</span> θp)</span>
<span id="cb6-13"><a href="#cb6-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-14"><a href="#cb6-14" aria-hidden="true" tabindex="-1"></a> S <span class="op">=</span> <span class="fl">1</span></span>
<span id="cb6-15"><a href="#cb6-15" aria-hidden="true" tabindex="-1"></a> <span class="kw">if</span> (θe <span class="op">&lt;</span> π <span class="op">/</span> <span class="fl">2</span>) <span class="op">&amp;&amp;</span> (norm(r_body_sc) <span class="op">&lt;</span> du)</span>
<span id="cb6-16"><a href="#cb6-16" aria-hidden="true" tabindex="-1"></a> S <span class="op">=</span> <span class="fl">0</span></span>
<span id="cb6-17"><a href="#cb6-17" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
<span id="cb6-18"><a href="#cb6-18" aria-hidden="true" tabindex="-1"></a> <span class="kw">if</span> (θe <span class="op">&lt;</span> π <span class="op">/</span> <span class="fl">2</span>) <span class="op">&amp;&amp;</span> ((du <span class="op">&lt;</span> norm(r_body_sc)) <span class="op">&amp;&amp;</span> (norm(r_body_sc) <span class="op">&lt;</span> dp))</span>
<span id="cb6-19"><a href="#cb6-19" aria-hidden="true" tabindex="-1"></a> S <span class="op">=</span> (norm(r_body_sc .<span class="op">|&gt;</span> u<span class="st">&quot;km&quot;</span>) <span class="op">-</span> du) <span class="op">/</span> (dp <span class="op">-</span> du) <span class="op">|&gt;</span> ustrip</span>
<span id="cb6-20"><a href="#cb6-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span>
<span id="cb6-21"><a href="#cb6-21" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-22"><a href="#cb6-22" aria-hidden="true" tabindex="-1"></a> <span class="kw">return</span> S</span>
<span id="cb6-23"><a href="#cb6-23" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span></code></pre></div>
</div>
<p>Then we can pass all the values weve gathered into the function we just made.</p>
<div class="layout-chunk" data-layout="l-body">
<div class="sourceCode" id="cb7"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>S <span class="op">=</span> r .<span class="op">|&gt;</span> R <span class="op">-&gt;</span> sunlight(<span class="fl">6371</span>u<span class="st">&quot;km&quot;</span><span class="op">,</span> [<span class="fl">0.5370</span><span class="op">,</span> <span class="fl">1.2606</span><span class="op">,</span> <span class="fl">0.5466</span>] <span class="op">.*</span> <span class="fl">1e8</span>u<span class="st">&quot;km&quot;</span><span class="op">,</span> R <span class="op">.*</span> u<span class="st">&quot;m&quot;</span>)<span class="op">;</span></span></code></pre></div>
</div>
<h2 id="plotting-the-results">Plotting the Results</h2>
<p>The <code>sunlight</code> function returns values from 0 to 1, 0 being complete darkness, 1 being complete sunlight, and anything between being the fraction of light being received. Again since the ISS has a very low orbit, the amount of time spend in the penumbra is almost insignificant.</p>
<div class="layout-chunk" data-layout="l-body-outset">
<details>
<summary>
Show code
</summary>
<div class="sourceCode" id="cb8"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Get fancy with the line color. </span></span>
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a>light_range <span class="op">=</span> range(colorant<span class="st">&quot;black&quot;</span><span class="op">,</span> stop <span class="op">=</span> colorant<span class="st">&quot;orange&quot;</span><span class="op">,</span> length <span class="op">=</span> <span class="fl">101</span>)<span class="op">;</span></span>
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a>light_colors <span class="op">=</span> [light_range[unique(round(<span class="dt">Int</span><span class="op">,</span> <span class="fl">1</span> <span class="op">+</span> s <span class="op">*</span> <span class="fl">100</span>))][<span class="fl">1</span>] <span class="kw">for</span> s <span class="kw">in</span> S]<span class="op">;</span></span>
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a>plot(</span>
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">LinRange</span>(<span class="fl">0</span><span class="op">,</span> <span class="fl">24</span><span class="op">,</span> length(S))<span class="op">,</span></span>
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a> S <span class="op">.*</span> <span class="fl">100</span><span class="op">,</span></span>
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true" tabindex="-1"></a> linewidth <span class="op">=</span> <span class="fl">5</span><span class="op">,</span></span>
<span id="cb8-9"><a href="#cb8-9" aria-hidden="true" tabindex="-1"></a> legend <span class="op">=</span> <span class="ex">false</span><span class="op">,</span></span>
<span id="cb8-10"><a href="#cb8-10" aria-hidden="true" tabindex="-1"></a> color <span class="op">=</span> light_colors<span class="op">,</span></span>
<span id="cb8-11"><a href="#cb8-11" aria-hidden="true" tabindex="-1"></a>)<span class="op">;</span></span>
<span id="cb8-12"><a href="#cb8-12" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb8-13"><a href="#cb8-13" aria-hidden="true" tabindex="-1"></a>xlabel<span class="op">!</span>(<span class="st">&quot;Time (hr)&quot;</span>)<span class="op">;</span></span>
<span id="cb8-14"><a href="#cb8-14" aria-hidden="true" tabindex="-1"></a>ylabel<span class="op">!</span>(<span class="st">&quot;Sunlight (%)&quot;</span>)<span class="op">;</span></span>
<span id="cb8-15"><a href="#cb8-15" aria-hidden="true" tabindex="-1"></a>title<span class="op">!</span>(<span class="st">&quot;ISS Sunlight Over a Day&quot;</span>)</span></code></pre></div>
</details>
<div class="figure"><span id="fig:unnamed-chunk-7"></span>
<img src="iss-eclipse-determination_files/figure-html5/unnamed-chunk-7-J1.png" alt="ISS Sunlight" width="300" data-distill-preview=1 />
<p class="caption">
Figure 1: ISS Sunlight
</p>
</div>
</div>
<p>Looking at the plot its pretty easy to see by the vertical transition from 0% to 100% that the time in the penumbra is limited, but almost counterintutively it also looks like the ISS gets more sunlight than it does darkness. Using the raw sunlight data we can actually calculate almost exactly how much time is spent in each region.</p>
Time in Sun:
<div class="layout-chunk" data-layout="l-body">
<div class="sourceCode" id="cb9"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>sun <span class="op">=</span> length(S[S.<span class="op">==</span><span class="fl">1</span>])<span class="op">/</span>length(S) <span class="op">*</span> <span class="fl">100</span></span></code></pre></div>
<pre><code>62.03323593209401</code></pre>
</div>
Time in Darkness:
<div class="layout-chunk" data-layout="l-body">
<div class="sourceCode" id="cb11"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>umbra <span class="op">=</span> length(S[S.<span class="op">==</span><span class="fl">0</span>])<span class="op">/</span>length(S) <span class="op">*</span> <span class="fl">100</span></span></code></pre></div>
<pre><code>37.64408511553699</code></pre>
</div>
Time in Penumbra:
<div class="layout-chunk" data-layout="l-body">
<div class="sourceCode" id="cb13"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a>penumbra <span class="op">=</span> <span class="fl">100</span> <span class="op">-</span> umbra <span class="op">-</span> sun</span></code></pre></div>
<pre><code>0.322678952369003</code></pre>
</div>
<p>The ISS spends about 62% of its time in the sun, this is because if you go back and reference the diagram at the beginning of this post you can see that the umbra is actually a cone. This is mainly due to the fact that the Sun is massive compared to the Earth, but this effect is also stronger with orbits of higher altitudes.</p>
<div class="sourceCode" id="cb15"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div>
<div id="refs" class="references csl-bib-body hanging-indent" role="doc-bibliography">
<div id="ref-ariss" class="csl-entry" role="doc-biblioentry">
<span><span>ARISS</span> <span>TLE</span>.”</span> n.d. <em>Amateur Radio on the International Space Station</em>. <a href="https://live.ariss.org/tle/">https://live.ariss.org/tle/</a>.
</div>
</div>
<!--radix_placeholder_article_footer-->
<div class="article-footer">
<p class="social_footer">
<span class="article-sharing">
Share: &nbsp;
<a href="https://twitter.com/share?text=ISS%20Eclipse%20Determination&amp;url=https%3A%2F%2Fprojects.ansonbiggs.com%2Fposts%2F2021-04-14-iss-eclipse-determination%2F">
<i class="fab fa-twitter"></i>
</a>
<a href="https://www.linkedin.com/shareArticle?mini=true&amp;url=https%3A%2F%2Fprojects.ansonbiggs.com%2Fposts%2F2021-04-14-iss-eclipse-determination%2F&amp;title=ISS%20Eclipse%20Determination">
<i class="fab fa-linkedin"></i>
</a>
</span>
</p>
</div>
<!--/radix_placeholder_article_footer-->
</div>
<div class="d-appendix">
</div>
<!--radix_placeholder_site_after_body-->
<!--/radix_placeholder_site_after_body-->
<!--radix_placeholder_appendices-->
<div class="appendix-bottom">
<h3 id="references">References</h3>
<div id="references-listing"></div>
<h3 id="updates-and-corrections">Corrections</h3>
<p>If you see mistakes or want to suggest changes, please <a href="https://gitlab.com/lander-team/air-prop-simulation">create an issue</a> on the source repository.</p>
<h3 id="reuse">Reuse</h3>
<p>Text and figures are licensed under Creative Commons Attribution <a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Source code is available at <a href="https://gitlab.com/lander-team/air-prop-simulation">https://gitlab.com/lander-team/air-prop-simulation</a>, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".</p>
<h3 id="citation">Citation</h3>
<p>For attribution, please cite this work as</p>
<pre class="citation-appendix short">Biggs (2021, May 1). Anson's Projects: ISS Eclipse Determination. Retrieved from https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/</pre>
<p>BibTeX citation</p>
<pre class="citation-appendix long">@misc{biggs2021iss,
author = {Biggs, Anson},
title = {Anson's Projects: ISS Eclipse Determination},
url = {https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/},
year = {2021}
}</pre>
</div>
<!--/radix_placeholder_appendices-->
<!--radix_placeholder_navigation_after_body-->
<!--/radix_placeholder_navigation_after_body-->
</body>
</html>