--- title: "Paths in the Space of Arcs" author: "Glenn Davis" date: "`r Sys.Date()`" output: rmarkdown::html_vignette: toc: true toc_depth: 2 number_sections: false bibliography: bibliography.bib # csl: iso690-numeric-brackets-cs.csl csl: personal.csl # csl: institute-of-mathematical-statistics.csl # csl: transactions-on-mathematical-software.csl vignette: > %\VignetteIndexEntry{Paths in the Space of Arcs} %\VignetteEngine{knitr::rmarkdown} --- ```{css, echo=FALSE} body { max-width: 725px; /* make wider, default is 700px */ } h1{ font-size: 20pt; /* make the level 1 headers smaller */ } ``` ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) old_opt = options( width=144 ) ```

# Introduction ```{r, echo=TRUE, message=FALSE} library(polarzonoid) ``` In the [User Guide](../vignettes/polarzonoid-guide.html) vignette it is shown that there is are homeomorphisms \begin{equation} A_n ~~ \longleftrightarrow ~~ \partial Z_n ~~ \longleftrightarrow ~~ \mathbb{S}^{2n} \end{equation} where $A_n$ is the space of $n$ or fewer pairwise disjoint arcs in the circle, and $Z_n$ is the polar zonoid in $\mathbb{R}^{2n+1}$. In this vignette, we take some easily-defined paths in the sphere $\mathbb{S}^{2n}$, compute the corresponding paths in the space of arcs $A_n$, and display those paths as animated WebM video plots. We make these plots with help of the package **av** and this function:
Embedding videos in the HTML output is done with the help of the package **base64enc** and this function:

# The Tubular Neighborhood of $A_n \subseteq A_{n+1}$ $A_n$ is a _stratum_ in $A_{n+1}$ and there is a _tubular neighborhood_ of $A_n$ in $A_{n+1}$. Since the codimension is 2, the fiber of a point $a \in A_n$ in the neighborhood is an open 2-disk $\text{int}(D^2)$. The boundary of the 2-disk is a circle, which we think of this circle as a closed path of points at a small and equal distance from $a$. We can compute this circle by mapping $a$ to $\mathbb{S}^{2n+2}$ using the homeomorphism $A_{n+1} ~ \rightleftarrows ~ \mathbb{S}^{2n+2}$, computing the circle in $\mathbb{S}^{2n+2}$, and then mapping back to $A_{n+1}$ using the inverse homeomorphism. This is the function we will use: The case of $n{=}0$ is easy to visualize. The space $A_0$ is 2 points, which map to the "poles" of the sphere $\mathbb{S}^2$. The empty arc maps to the "south" and the full circle maps to the "north" Around each pole is a small circle. For the "south pole" it is a circle of tiny arcs, almost empty. For the "north pole" it is a circle of very large arcs, almost the full circle. In both cases, the length of the arcs is constant, while the center loops around $\mathbb{S}^1$.

# A Circle of Arcs in $A_2$ around a Single Arc in $A_1$ The goal of this section is to take a single arc $a \in A_1$ and plot the 2 arcs in $A_2$ that circle around $a$. ```{r, echo=TRUE, message=FALSE, warning=TRUE, fig.cap='caption', fig.keep='last', fig.show='hide', cache=FALSE } # arcmat1 is a single semicircle centered at (1,0) arcmat1 = matrix( c(0,pi), nrow=1, ncol=2 ) circle = circle_of_arcs( arcmat1, count=90 ) webm_file = WebMfromarclist( circle, arcmat1, index=1, vpsize=c(480,480) ) video_html = video2html(webm_file) ```
```{r, echo=FALSE, message=TRUE, warning=TRUE } knitr::raw_html( video_html, meta=NULL, cacheable=FALSE ) unlink( dirname(webm_file) ) ``` circle of arcs around a single arc
The original arc is drawn in blue, and shrunken a little so it does not overlap with the nearby pair of arcs.

# A Circle of Arcs in $A_3$ around Two Arcs in $A_2$ This section is the same as the previous one, except we bump up the complexity. Now $a \in A_2$ is a pair of arcs, and we plot the 3 arcs in $A_3$ that circle around $a$. ```{r, echo=TRUE, message=FALSE, warning=TRUE, fig.cap='caption', fig.keep='last', fig.show='hide', cache=FALSE } # arcmat2 is: an arc filling quadrant #1, plus an arc filling quadrant #3 arcmat2 = matrix( c((1/4)*pi,pi/2, (5/4)*pi,pi/2), nrow=2, ncol=2, byrow=TRUE ) circle = circle_of_arcs( arcmat2, count=90 ) webm_file = WebMfromarclist( circle, arcmat2, index=2, vpsize=c(480,480) ) video_html = video2html(webm_file) ```
```{r, echo=FALSE, message=TRUE, warning=TRUE } knitr::raw_html( video_html, meta=NULL, cacheable=FALSE ) unlink( dirname(webm_file) ) ``` circle of 3 arcs around a pair of arcs
The original pair of arcs are drawn in blue, and shrunken a little so they does not overlap with the nearby triple of arcs.

# Empty Arc to Full Circle, and Back Again In this one, the path in the sphere starts at the "south pole", goes up through an arbitrary point along a great semicircle to the antipodal "north pole", and then down the other side. The full path is a great circle, and is pieced together using the function `slerp()` (spherical linear interpolation) from @Shoemake1985. ```{r, echo=TRUE, message=FALSE, warning=TRUE, fig.cap='caption', fig.keep='last', fig.show='hide', cache=FALSE } # arcmat3 is 3 arcs of different lengths arcmat3 = matrix( c(0.375,0.75, 2.3,1.1, 4.6,2.8), ncol=2, byrow=TRUE ) arclist = poletopole( arcmat3 ) webm_file = WebMfromarclist( arclist, arcmat3, index=3, vpsize=c(480,480) ) video_html = video2html(webm_file) ```
```{r, echo=FALSE, message=TRUE, warning=TRUE } knitr::raw_html( video_html, meta=NULL, cacheable=FALSE ) unlink( dirname(webm_file) ) ``` empty to full circle, and back to empty on the other side
The defining arcs are drawn in blue, and shrunken a little so they do not overlap with the arcs along the path. Note that at each step, there are 3 arcs, except at the poles, i.e. the empty arc and the full circle. But it is easy to make an example where the number of arcs is **not** a constant. ```{r, echo=TRUE, message=TRUE, warning=TRUE, fig.cap='caption', fig.keep='last', fig.show='hide', cache=FALSE } # arcmat1 is a single arc, but it splits into 3 arcs on either side of the path from pole to pole arcmat1 = matrix( c(1.5,2.9), ncol=2, byrow=TRUE ) arclist = poletopole( arcmat1, n=3 ) webm_file = WebMfromarclist( arclist, arcmat1, index=4, vpsize=c(480,480) ) video_html = video2html(webm_file) ```
```{r, echo=FALSE, message=TRUE, warning=TRUE } knitr::raw_html( video_html, meta=NULL, cacheable=FALSE ) unlink( dirname(webm_file) ) ``` empty to full circle, and back to empty on the other side
The defining arc is drawn in blue, and shrunken a little so it does not overlap with the arcs along the path.

# References


# Session Information This document was prepared `r format(Sys.Date(), "%a %b %d, %Y")` with the following configuration:
```{r, echo=FALSE, results='asis'}
options(old_opt)
sessionInfo()
```