# arc3d

##### Draw arcs.

Given starting and ending points on a sphere and the center of the sphere, draw the great circle arc between the starting and ending points. If the starting and ending points have different radii, a segment of a logarithmic spiral will join them.

##### Usage

```
arc3d(from, to, center, radius, n, circle = 50, base = 0,
plot = TRUE, ...)
```

##### Arguments

- from
One or more points from which to start arcs.

- to
One or more destination points.

- center
One or more center points.

- radius
If not missing, a vector of length

`n`

giving the radii at each point between`from`

and`to`

. If missing, the starting and ending points will be joined by a logarithmic spiral.- n
If not missing, how many segments to use between the first and last point. If missing, a value will be calculated based on the angle between starting and ending points as seen from the center.

- circle
How many segments would be used if the arc went completely around a circle.

- base
See Details below.

- plot
Should the arcs be plotted, or returned as a matrix?

- …
Additional parameters to pass to

`points3d`

.

##### Details

If any of `from`

, `to`

or `center`

is an n by 3
matrix with n > 1, multiple arcs will be drawn by recycling
each of these parameters to the number of rows of the longest
one.

If the vector lengths of `from - center`

and
`to - center`

differ, then instead of a spherical
arc, the function will draw a segment of a logarithmic spiral joining
the two points.

By default, the arc is drawn along the shortest great
circle path from `from`

to `to`

, but the
`base`

parameter can be used to modify this.
If `base = 1`

is used, the longer arc will be followed.
Larger positive integer values will result in `base - 1`

loops in that direction completely around the sphere.
Negative values will draw the curve in the same direction
as the shortest arc, but with `abs(base)`

full loops.
It doesn't make much sense to ask for such loops unless
the radii of `from`

and `to`

differ, because
spherical arcs would overlap.
Normally the `base`

parameter is left at its default
value of `0`

.

When `base`

is non-zero, the curve will be constructed in multiple
pieces, between `from`

, `to`

, `-from`

and `-to`

,
for as many steps as necessary. If `n`

is specified, it
will apply to each of these pieces.

##### Value

If `plot = TRUE`

, called mainly for the side effect of drawing arcs. Invisibly
returns the object ID of the collection of arcs.

If `plot = FALSE`

, returns a 3 column matrix containing
the points that would be drawn as the arcs.

##### Examples

```
# NOT RUN {
normalize <- function(v) v/sqrt(sum(v^2))
# These vectors all have the same length
from <- t(apply(matrix(rnorm(9), ncol = 3), 1, normalize))
to <- normalize(rnorm(3))
center <- c(0, 0, 0)
open3d()
spheres3d(center, radius = 1, col = "white", alpha = 0.2)
arc3d(from, to, center, col = "red")
arc3d(from, 2*to, center, col = "blue")
text3d(rbind(from, to, center, 2*to),
text = c(paste0("from", 1:3), "to", "center", "2*to"),
depth_mask = FALSE, depth_test = "always")
# }
```

*Documentation reproduced from package rgl, version 0.100.50, License: GPL*