# arc3d: Draw arcs In rgl: 3D Visualization Using OpenGL

 arc3d R Documentation

## Draw arcs

### Description

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.

Duncan Murdoch

### Examples

```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),
texts = c(paste0("from", 1:3), "to", "center", "2*to"),
depth_mask = FALSE, depth_test = "always")
```

rgl documentation built on June 10, 2022, 9:05 a.m.